\n\n",
"contributors": [
{
"login": "yassinedoghri",
"name": "Yassine Doghri",
- "avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/3/avatar.png",
- "profile": "https://github.com/yassinedoghri",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11021441?v=4",
+ "profile": "https://yassinedoghri.com",
"contributions": [
"code",
"bug",
@@ -472,18 +470,6 @@
}
]
},
- {
- "login": "ghose",
- "name": "ghose (XoseM)",
- "avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/12617257/large/a201650da44fed28890b0e0d8477a663.jpg",
- "profile": "https://crowdin.com/profile/xosem",
- "contributions": [
- {
- "type": "translation",
- "url": "https://translate.castopod.org"
- }
- ]
- },
{
"login": "basen1982",
"name": "Andreas Olsson",
@@ -545,7 +531,7 @@
]
},
{
- "login": "ahmed.sabouni11",
+ "login": "ahmedsabouni",
"name": "Ahmed Sabouni",
"avatar_url": "https://avatars.githubusercontent.com/u/74497842?v=4",
"profile": "https://github.com/ahmedsabouni",
@@ -564,11 +550,25 @@
"contributions": ["code"]
},
{
- "login": "NeoluxConsulting",
+ "login": "Dwev",
"name": "Guy Martin",
- "avatar_url": "https://secure.gravatar.com/avatar/6e745565356330c1e29a85d52bffdaa1?s=80&d=identicon",
- "profile": "https://code.castopod.org/NeoluxConsulting",
+ "avatar_url": "https://avatars.githubusercontent.com/u/46626050?v=4",
+ "profile": "https://github.com/Dwev",
"contributions": ["bug", "code"]
+ },
+ {
+ "login": "prcutler",
+ "name": "Paul Cutler",
+ "avatar_url": "https://avatars.githubusercontent.com/u/67276?v=4",
+ "profile": "https://github.com/prcutler",
+ "contributions": ["doc", "question", "ideas"]
+ },
+ {
+ "login": "nateritter",
+ "name": "Nate Ritter",
+ "avatar_url": "https://avatars.githubusercontent.com/u/198798?v=4",
+ "profile": "https://github.com/nateritter",
+ "contributions": ["code"]
}
],
"commitConvention": "none"
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 4da0ceaa..cca42fb0 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -4,7 +4,7 @@
# ⚠️ NOT optimized for production
# should be used only for development purposes
#---------------------------------------------------
-FROM php:8.2-fpm
+FROM php:8.5-fpm
LABEL maintainer="Yassine Doghri "
@@ -47,11 +47,4 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& docker-php-ext-enable redis \
# mysqli for database access
&& docker-php-ext-install mysqli \
- && docker-php-ext-enable mysqli \
- # configure php
- && echo "file_uploads = On\n" \
- "memory_limit = 512M\n" \
- "upload_max_filesize = 500M\n" \
- "post_max_size = 512M\n" \
- "max_execution_time = 300\n" \
- > /usr/local/etc/php/conf.d/uploads.ini
+ && docker-php-ext-enable mysqli
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 3673a17b..f1c12034 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -6,7 +6,7 @@
"service": "app",
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"postCreateCommand": "composer install && pnpm install && pnpm run build:static && php spark migrate --all && php spark db:seed DevSeeder",
- "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder} && crontab .devcontainer/crontab && cron && php spark serve --host 0.0.0.0",
+ "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder} && crontab .devcontainer/crontab && cron && php spark serve --host 0.0.0.0 --port ${APP_PORT:-8080}",
"postAttachCommand": "crontab .devcontainer/crontab && service cron reload",
"shutdownAction": "stopCompose",
"features": {
@@ -30,7 +30,17 @@
"spark": "php",
"env": "dotenv",
".rsync-filter": "diff"
- }
+ },
+ "json.schemas": [
+ {
+ "fileMatch": [
+ "plugins/**/manifest.json",
+ "tests/modules/Plugins/mocks/manifests/*.json",
+ "tests/modules/Plugins/mocks/plugins/**/manifest.json"
+ ],
+ "url": "/workspaces/castopod/modules/Plugins/Manifest/manifest.schema.json"
+ }
+ ]
},
"extensions": [
"astro-build.astro-vscode",
@@ -52,7 +62,8 @@
"stylelint.vscode-stylelint",
"unifiedjs.vscode-mdx",
"wayou.vscode-todo-highlight",
- "yzhang.markdown-all-in-one"
+ "yzhang.markdown-all-in-one",
+ "42Crunch.vscode-openapi"
]
}
}
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
index 5aa15231..665b78e9 100644
--- a/.devcontainer/docker-compose.yml
+++ b/.devcontainer/docker-compose.yml
@@ -1,20 +1,19 @@
-version: "3"
-
services:
app:
build:
context: .
dockerfile: Dockerfile
- ports:
- - 8080:8080
volumes:
- ../..:/workspaces:cached
+ - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
+ APP_PORT: ${APP_PORT:-8080} # used in devcontainer.json file
+ VITE_PORT: ${VITE_PORT:-5173} # used in ../vite.config.js file
CI_ENVIRONMENT: development
vite_environment: development
app_forceGlobalSecureRequests: 0 #false
- app_baseURL: http://localhost:8080/
- media_baseURL: http://localhost:8080/
+ app_baseURL: http://localhost:${APP_PORT:-8080}/
+ media_baseURL: http://localhost:${APP_PORT:-8080}/
admin_gateway: cp-admin
auth_gateway: cp-auth
analytics_salt: dev_analytics_salt
@@ -29,16 +28,10 @@ services:
email_SMTPHost: mailpit
email_SMTPUser: castopod
email_SMTPPass: castopod
- email_SMTPPort: 1025
+ email_SMTPPort: ${MAILPIT_SMTP_PORT:-1025}
depends_on:
- - redis
- mariadb
- redis:
- image: redis:alpine
- volumes:
- - redis:/data
-
mariadb:
image: mariadb:10.2
volumes:
@@ -69,8 +62,8 @@ services:
volumes:
- mailpit:/data
ports:
- - 8025:8025
- - 1025:1025
+ - ${MAILPIT_WEBUI_PORT:-8025}:8025
+ - ${MAILPIT_SMTP_PORT:-1025}:1025
environment:
MP_MAX_MESSAGES: 5000
MP_DATA_FILE: /data/mailpit.db
@@ -78,7 +71,6 @@ services:
MP_SMTP_AUTH_ALLOW_INSECURE: 1
volumes:
- redis:
mariadb:
phpmyadmin:
mailpit:
diff --git a/.devcontainer/uploads.ini b/.devcontainer/uploads.ini
new file mode 100644
index 00000000..23b3c1cd
--- /dev/null
+++ b/.devcontainer/uploads.ini
@@ -0,0 +1,5 @@
+file_uploads = On
+memory_limit = 512M
+upload_max_filesize = 500M
+post_max_size = 512M
+max_execution_time = 300
diff --git a/.gitignore b/.gitignore
index 759dd2f9..b7ea048c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -179,3 +179,9 @@ modules/Admin/Language/*/PersonsTaxonomy.php
castopod/
castopod-*.zip
castopod-*.tar.gz
+
+# Plugins
+plugins/*
+!plugins/.gitkeep
+writable/plugins.json
+writable/plugins-lock.json
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b10a5b9b..32076043 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: code.castopod.org:5050/adaures/castopod:ci-php8.1
+image: code.castopod.org:5050/adaures/castopod:ci-php8.5
stages:
- prepare
@@ -94,14 +94,14 @@ lint-js:
tests:
stage: quality
services:
- - mariadb:10.2
+ - mariadb:10.11
variables:
MYSQL_ROOT_PASSWORD: "R00Tp4ssW0RD"
MYSQL_DATABASE: "test"
MYSQL_USER: "castopod"
MYSQL_PASSWORD: "castopod"
script:
- - echo "SHOW DATABASES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE" --skip-ssl
+ - echo "SHOW DATABASES;" | mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE" --skip_ssl
# run phpunit without code coverage
# TODO: add code coverage
@@ -135,7 +135,7 @@ bundle:
rules:
- if: $CI_PROJECT_NAMESPACE != "adaures"
when: never
- - if: $CI_COMMIT_BRANCH =~ /^(main|beta|alpha|next)$/ || $CI_COMMIT_TAG
+ - if: $CI_COMMIT_BRANCH =~ /^(main|alpha|beta|next)$/ || $CI_COMMIT_TAG
when: never
- when: on_success
diff --git a/.gitlab/issue_templates/bug.md b/.gitlab/issue_templates/bug.md
index 7fec749a..c6041a61 100644
--- a/.gitlab/issue_templates/bug.md
+++ b/.gitlab/issue_templates/bug.md
@@ -6,7 +6,7 @@
1. [First step]
2. [Second step]
-3. [and so on...]
+3. [and so on…]
### Expected behavior
@@ -27,7 +27,7 @@ logs, and code as it's very hard to read otherwise.
- OS: [e.g. Ubuntu server]
- Browser: [e.g. chrome, safari]
- Web server: [eg. Apache]
-- [any other relevant context...]
+- [any other relevant context…]
### Possible fixes
diff --git a/.gitlab/issue_templates/feature-request.md b/.gitlab/issue_templates/feature-request.md
index 644a8fd4..0886d392 100644
--- a/.gitlab/issue_templates/feature-request.md
+++ b/.gitlab/issue_templates/feature-request.md
@@ -1,7 +1,7 @@
### Is your feature request related to a problem? Please describe
A clear and concise description of what the problem is. Ex. I'm always
-frustrated when [...]
+frustrated when […]
### Describe the solution you'd like
diff --git a/.prettierrc.json b/.prettierrc.json
index d567a64c..cae76d94 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -2,7 +2,7 @@
"trailingComma": "es5",
"overrides": [
{
- "files": "*.md",
+ "files": ["*.md", "*.mdx"],
"options": {
"proseWrap": "always"
}
diff --git a/.releaserc.json b/.releaserc.json
index 049e4b2d..7a8b6584 100644
--- a/.releaserc.json
+++ b/.releaserc.json
@@ -8,6 +8,10 @@
{
"name": "beta",
"prerelease": true
+ },
+ {
+ "name": "next",
+ "prerelease": true
}
],
"plugins": [
diff --git a/.rsync-filter b/.rsync-filter
index 6acbba79..0fcb79ec 100644
--- a/.rsync-filter
+++ b/.rsync-filter
@@ -4,6 +4,7 @@
+ resources/
+ app/***
+ modules/***
++ plugins/***
+ public/***
+ themes/***
+ vendor/***
diff --git a/.stylelintrc.json b/.stylelintrc.json
index b9a5630c..8ea025c1 100644
--- a/.stylelintrc.json
+++ b/.stylelintrc.json
@@ -10,10 +10,17 @@
"responsive",
"variants",
"screen",
- "layer"
+ "layer",
+ "config"
]
}
],
+ "at-rule-no-deprecated": [
+ true,
+ {
+ "ignoreAtRules": ["apply"]
+ }
+ ],
"function-no-unknown": [
true,
{
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f99eef1e..29f4a170 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,234 +1,107 @@
-## [1.15.5](https://code.castopod.org/adaures/castopod/compare/v1.15.4...v1.15.5) (2026-02-24)
-
-### Bug Fixes
-
-- **docker:** add arch-specific supercronic and s6-overlay services
- ([243ce3a](https://code.castopod.org/adaures/castopod/commit/243ce3a45c740352841bf67fe1ff63151f276eb9)),
- closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
-
-## [1.15.4](https://code.castopod.org/adaures/castopod/compare/v1.15.3...v1.15.4) (2026-02-19)
-
-### Bug Fixes
-
-- **emails:** display verification link in clear text for email clients only
- displaying text
- ([37c89df](https://code.castopod.org/adaures/castopod/commit/37c89df3424e4f67fb05c09094560df7edbd76d4)),
- closes [#328](https://code.castopod.org/adaures/castopod/issues/328)
-
-## [1.15.3](https://code.castopod.org/adaures/castopod/compare/v1.15.2...v1.15.3) (2026-02-19)
-
-### Bug Fixes
-
-- **bundle:** include resources folder for icons during rsync
- ([70ca0c7](https://code.castopod.org/adaures/castopod/commit/70ca0c7928cabb99a07de01cb4e12f5d81689bbe)),
- closes [#588](https://code.castopod.org/adaures/castopod/issues/588)
-
-## [1.15.2](https://code.castopod.org/adaures/castopod/compare/v1.15.1...v1.15.2) (2026-02-18)
-
-### Bug Fixes
-
-- **player:** load icons locally instead of relying on vimejs picking them from
- third party scripts
- ([0961987](https://code.castopod.org/adaures/castopod/commit/096198727627b3dba9c5bd28f20e90cff680316b)),
- closes [#551](https://code.castopod.org/adaures/castopod/issues/551)
-
-## [1.15.1](https://code.castopod.org/adaures/castopod/compare/v1.15.0...v1.15.1) (2026-02-17)
-
-### Bug Fixes
-
-- **docker:** create optimized builder with docker-container driver for arm64
- builds
- ([89ae2b8](https://code.castopod.org/adaures/castopod/commit/89ae2b89fd20fa31851a31fe44f514294fbcd688)),
- closes [#580](https://code.castopod.org/adaures/castopod/issues/580)
-
-## [1.15.0](https://code.castopod.org/adaures/castopod/compare/v1.14.1...v1.15.0) (2026-02-16)
-
-### Features
-
-- **docker:** replace all-in-one image with FrankenPHP and Caddy based image +
- discard other images
- ([14089f0](https://code.castopod.org/adaures/castopod/commit/14089f0542ccdf187bd64bea8ad2787b9e8c7d59))
-
-## 1.14.1 (2026-01-31)
-
-- fix(i18n): set english as first item in supported locales in case locale
- negotiation does not work
- ([44fb904](https://code.castopod.org/adaures/castopod/commit/44fb904))
-
-## 1.14.0 (2026-01-23)
-
-- feat: add Lithuanian and Czech languages
- ([9582f2a](https://code.castopod.org/adaures/castopod/commit/9582f2a))
-
-## 1.13.8 (2025-12-20)
-
-- chore: update CI4 to v4.6.4 + php and js packages to latest
- ([133e308](https://code.castopod.org/adaures/castopod/commit/133e308))
-- fix(fediverse): match episode posts replies fields with comments in union
- query ([d438190](https://code.castopod.org/adaures/castopod/commit/d438190)),
- closes [#577](https://code.castopod.org/adaures/castopod/issues/577)
-
-## 1.13.7 (2025-11-03)
-
-- fix(rss): set person's avatar url to "federation" for width and height of
- 400px ([a50b0f3](https://code.castopod.org/adaures/castopod/commit/a50b0f3))
-
-## 1.13.6 (2025-11-03)
-
-- fix(fediverse): access to URI in 'object' instead of going down with '->id' in
- delete case
- ([41211a1](https://code.castopod.org/adaures/castopod/commit/41211a1))
-- build: update docker images' versions + docs to latest
- ([07e3a9c](https://code.castopod.org/adaures/castopod/commit/07e3a9c))
-
-## 1.13.5 (2025-08-25)
-
-- chore: add discourse social network
- ([08a3779](https://code.castopod.org/adaures/castopod/commit/08a3779))
-- chore: fix rector issues with filters' methods return types
- ([3d7969d](https://code.castopod.org/adaures/castopod/commit/3d7969d))
-- chore: update .releaserc to include more detailed release notes
- ([5b4403e](https://code.castopod.org/adaures/castopod/commit/5b4403e))
-- chore: update CI to v4.6.3 + all php and js dependencies
- ([842c4e4](https://code.castopod.org/adaures/castopod/commit/842c4e4))
-- fix(episodes): set dropdown menu for seasons / years to a maximum height with
- auto scroll
- ([f88abd2](https://code.castopod.org/adaures/castopod/commit/f88abd2))
-- fix(fediverse): add is_private field to posts to flag private posts and hide
- them from public views
- ([d5ef2ab](https://code.castopod.org/adaures/castopod/commit/d5ef2ab))
-
-## [1.13.4](https://code.castopod.org/adaures/castopod/compare/v1.13.3...v1.13.4) (2025-02-24)
-
-### Bug Fixes
-
-- **platforms:** add podcast id when deleting platforms on save
- ([019fbaf](https://code.castopod.org/adaures/castopod/commit/019fbaf74ddd7427c3b7dfaef0d2e4409aab0e7c))
-- return method instead of throwing a 404 when submitting a post
- ([44ad651](https://code.castopod.org/adaures/castopod/commit/44ad65117635b6292b4653bca7e22acecb025146)),
- closes [#550](https://code.castopod.org/adaures/castopod/issues/550)
-
-## [1.13.3](https://code.castopod.org/adaures/castopod/compare/v1.13.2...v1.13.3) (2025-01-08)
-
-### Bug Fixes
-
-- remove exit function from podcast:import command to allow for
- episodes:compute-downloads to run
- ([3359abf](https://code.castopod.org/adaures/castopod/commit/3359abf3fc7d6ddf9db2cacc3e25f7c6d99e33a6))
-
-## [1.13.2](https://code.castopod.org/adaures/castopod/compare/v1.13.1...v1.13.2) (2024-12-28)
-
-### Bug Fixes
-
-- add downloads_count to episodes table, computed every hour
- ([5182d5d](https://code.castopod.org/adaures/castopod/commit/5182d5d67aa3c6f7906d4603efcec4b48f048991))
-
-## [1.13.1](https://code.castopod.org/adaures/castopod/compare/v1.13.0...v1.13.1) (2024-12-05)
-
-### Bug Fixes
-
-- **api:** cast integers when creating episode
- ([7ca501d](https://code.castopod.org/adaures/castopod/commit/7ca501dd6f426a1d50ffb1ea759f1e2cc91c1d13))
-
-# [1.13.0](https://code.castopod.org/adaures/castopod/compare/v1.12.11...v1.13.0) (2024-10-25)
+## [2.0.0-next.3](https://code.castopod.org/adaures/castopod/compare/v2.0.0-next.2...v2.0.0-next.3) (2024-12-30)
### Features
- **api:** add Episode create and publish endpoints
- ([75cf78e](https://code.castopod.org/adaures/castopod/commit/75cf78e972c52528dc38be050dcb1eb1f8e626fa))
+ ([a90cdfd](https://code.castopod.org/adaures/castopod/commit/a90cdfdcdbde7a8fb520c6815d7b757947aea055))
+- **image:** add image size's width and height
+ ([f50098e](https://code.castopod.org/adaures/castopod/commit/f50098ec8926c8ae40718f5f128b6de7fe721b46))
+- **plugins:** add defaultValue for all field types
+ ([d3a98db](https://code.castopod.org/adaures/castopod/commit/d3a98db6d0112b5f59daddd2708c09dd2e595332))
+- **plugins:** add group field type + multiple option to render field arrays
+ ([11ccd0e](https://code.castopod.org/adaures/castopod/commit/11ccd0ebe71d476d8c0dbfe28edcf01f7f362b83))
+- **plugins:** add html field type + CodeEditor component + rework html head
+ generation
+ ([8cf9c6d](https://code.castopod.org/adaures/castopod/commit/8cf9c6dc833aedcccbc4cdb309b111f84d97d629))
- **rss:** add option for 301 redirect to new feed url
- ([3a7d26f](https://code.castopod.org/adaures/castopod/commit/3a7d26fdf9bfeffb9247f8efe06d9040ae2fe5ff))
-
-## [1.12.11](https://code.castopod.org/adaures/castopod/compare/v1.12.10...v1.12.11) (2024-10-16)
+ ([8402cc2](https://code.castopod.org/adaures/castopod/commit/8402cc29d2d0c61b014a7e03e5ccce7d3c11782a))
### Bug Fixes
+- add downloads_count to episodes table, computed every hour
+ ([f981937](https://code.castopod.org/adaures/castopod/commit/f9819376455c371eb5bd3c84ad938698335a3d67))
- allow passing json to app.proxyIPs config to set it
- ([7d1460b](https://code.castopod.org/adaures/castopod/commit/7d1460b8e08beb447389c604995efd931c84fd72))
-
-## [1.12.10](https://code.castopod.org/adaures/castopod/compare/v1.12.9...v1.12.10) (2024-10-03)
-
-### Bug Fixes
-
-- set user as www-data when running cron jobs in docker's supervisord config
- ([be3b6db](https://code.castopod.org/adaures/castopod/commit/be3b6db207204e14c9ad5d4d84384b15e0dbfa84))
-
-## [1.12.9](https://code.castopod.org/adaures/castopod/compare/v1.12.8...v1.12.9) (2024-08-16)
-
-### Bug Fixes
-
-- **fediverse:** add "processing" and "failed" statuses to better manage
- broadcast load
- ([cf9e072](https://code.castopod.org/adaures/castopod/commit/cf9e0724fcdb8d0194676880cc3b088b221f5a38)),
- closes [#511](https://code.castopod.org/adaures/castopod/issues/511)
-
-## [1.12.8](https://code.castopod.org/adaures/castopod/compare/v1.12.7...v1.12.8) (2024-08-16)
-
-### Bug Fixes
-
-- **podcast-model:** always query podcast from database when clearing cache
- ([995ca5b](https://code.castopod.org/adaures/castopod/commit/995ca5b197f8f917102a108dd07d1f81e99cc8e6))
-
-## [1.12.7](https://code.castopod.org/adaures/castopod/compare/v1.12.6...v1.12.7) (2024-08-14)
-
-### Bug Fixes
-
-- **episode:** do not change slug when editing episode title
- ([89bf73b](https://code.castopod.org/adaures/castopod/commit/89bf73b869c28c2fcffa3dcbc3660fac3b6bf988)),
- closes [#513](https://code.castopod.org/adaures/castopod/issues/513)
-- **preview:** delete episode preview cache after editing episode
- ([6a2cdd0](https://code.castopod.org/adaures/castopod/commit/6a2cdd066ee13efc6489901bbdcbcc5fea35cd71)),
- closes [#514](https://code.castopod.org/adaures/castopod/issues/514)
-
-## [1.12.6](https://code.castopod.org/adaures/castopod/compare/v1.12.5...v1.12.6) (2024-08-09)
-
-### Bug Fixes
-
+ ([cbf739e](https://code.castopod.org/adaures/castopod/commit/cbf739e95cc0ad6e83a21353b8f4678e68d74f63))
+- **api:** cast integers when creating episode
+ ([775b302](https://code.castopod.org/adaures/castopod/commit/775b302f7c886e30e133c8a8c68764301b6c663b))
- **docker-image:** clear cache to account for new assets and data structure
changes
- ([e41245d](https://code.castopod.org/adaures/castopod/commit/e41245d2e758bce2a404749398bef89998638561)),
+ ([63c763f](https://code.castopod.org/adaures/castopod/commit/63c763f941195b3758c4b91acd8c350a5e7bb9c2)),
closes [#510](https://code.castopod.org/adaures/castopod/issues/510)
-
-## [1.12.5](https://code.castopod.org/adaures/castopod/compare/v1.12.4...v1.12.5) (2024-07-30)
-
-### Bug Fixes
-
+- edit remap functions to get episode in episode admin controllers
+ ([9f74cca](https://code.castopod.org/adaures/castopod/commit/9f74cca342fedd896977efd2e89d0143959f3c4f))
+- **episode:** do not change slug when editing episode title
+ ([a83afb0](https://code.castopod.org/adaures/castopod/commit/a83afb0004511db80337806577fbc36f8d777116)),
+ closes [#513](https://code.castopod.org/adaures/castopod/issues/513)
+- **fediverse:** add "processing" and "failed" statuses to better manage
+ broadcast load
+ ([1d7583d](https://code.castopod.org/adaures/castopod/commit/1d7583d738219574ae3d45d294dc94e7e406472b)),
+ closes [#511](https://code.castopod.org/adaures/castopod/issues/511)
+- **icons:** set correct names for lock and lock-unlock icons in premium banner
+ ([37ee6d3](https://code.castopod.org/adaures/castopod/commit/37ee6d35b4bb66ce23dc271fb846200d1be0e7f6))
+- **plugins:** clear cache after activating or deactivating plugin
+ ([08c7df2](https://code.castopod.org/adaures/castopod/commit/08c7df2a5d5be340490c78deeef823167eb1b2fc))
+- **plugins:** delete relevant cache when submitting settings
+ ([00bd4c0](https://code.castopod.org/adaures/castopod/commit/00bd4c02ee23b181d74e7731626bfec3b1ff4916))
+- **podcast-model:** always query podcast from database when clearing cache
+ ([d30c49c](https://code.castopod.org/adaures/castopod/commit/d30c49cdff380c15db4f1851631a255a5baffcbe))
+- **premium-podcasts:** update query to validate subscription
+ ([2b1bbf3](https://code.castopod.org/adaures/castopod/commit/2b1bbf34303ead927f433b5c7d5d888ca3799954))
+- **preview:** delete episode preview cache after editing episode
+ ([732d429](https://code.castopod.org/adaures/castopod/commit/732d42923d0d7a66ff1ebd5841458e4205060560)),
+ closes [#514](https://code.castopod.org/adaures/castopod/issues/514)
+- **release:** add conventional-changelog-conventionalcommits for CHANGELOG
+ generation
+ ([6934c8a](https://code.castopod.org/adaures/castopod/commit/6934c8aa8f0b7f9eea7c3f6f4089c56b2391d9a6))
- **rss:** add subscription id to cache name to prevent premium feeds from
overlapping
- ([5310d86](https://code.castopod.org/adaures/castopod/commit/5310d8648af6d43b9090f8d9f8066f7b3a8f0aa7))
+ ([74f9325](https://code.castopod.org/adaures/castopod/commit/74f9325946d03a0d4efce57045e41cc9454ff97c))
+- set user as www-data when running cron jobs in docker's supervisord config
+ ([65d74f1](https://code.castopod.org/adaures/castopod/commit/65d74f14e612be3757c9304518eee112705f5ff9))
+- typo in EpisodeController remap function to get episode
+ ([f288a75](https://code.castopod.org/adaures/castopod/commit/f288a750f580ab19b04a170cc76bf8769084e19d))
+- update select and multi-select options to value/label arrays
+ ([63f93f5](https://code.castopod.org/adaures/castopod/commit/63f93f585bec4a11022cc8c75deb34968cba2348))
-## [1.12.4](https://code.castopod.org/adaures/castopod/compare/v1.12.3...v1.12.4) (2024-07-30)
+### Internal
-### Bug Fixes
+- **plugins:** create Field objects per field type in settings forms + handle
+ rendering in class
+ ([34be5bc](https://code.castopod.org/adaures/castopod/commit/34be5bccabb7531afdcc6ebaf1dd39e4dfbe0677))
+- remove fields from podcast and episode entities to be replaced with plugins
+ ([b869acb](https://code.castopod.org/adaures/castopod/commit/b869acb3a988a3616d883a41c25d9c8409bd5518))
+- rename controller methods for views and actions to be more consistent
+ ([85704bf](https://code.castopod.org/adaures/castopod/commit/85704bfbe03fe5e38ff5e76a0e1cf0e5f1275f57))
+- update CodeIgniter to v4.5.6
+ ([f295e9a](https://code.castopod.org/adaures/castopod/commit/f295e9aa4ca3129df24a22779f7c19bba7fac370))
+- update codigniter-icons to v1.0.1
+ ([fa6967e](https://code.castopod.org/adaures/castopod/commit/fa6967e65cef1705b19cbb205132c4c751507d53))
+- update js dependencies to latest
+ ([70c9797](https://code.castopod.org/adaures/castopod/commit/70c97971fcf5bbeee826578057ae0e3afbbbd8a8))
-- **icons:** set correct names for lock and lock-unlock icons in premium banner
- ([94deaab](https://code.castopod.org/adaures/castopod/commit/94deaab3cd0912ff1a585bee174a096a84c68384))
-- **premium-podcasts:** update query to validate subscription
- ([0e6d294](https://code.castopod.org/adaures/castopod/commit/0e6d2945f215453abbe7d9f90afd012d2507846b))
-
-## [1.12.3](https://code.castopod.org/adaures/castopod/compare/v1.12.2...v1.12.3) (2024-07-04)
+# [2.0.0-next.2](https://code.castopod.org/adaures/castopod/compare/v2.0.0-next.1...v2.0.0-next.2) (2024-07-08)
### Bug Fixes
- **audio-player:** set player icons to default instead of missing Castopod's
- ([c89d298](https://code.castopod.org/adaures/castopod/commit/c89d29867e122fe7d4d5563f0ab1e9993e2ece16))
-
-## [1.12.2](https://code.castopod.org/adaures/castopod/compare/v1.12.1...v1.12.2) (2024-07-03)
-
-### Bug Fixes
-
+ ([0ba0a25](https://code.castopod.org/adaures/castopod/commit/0ba0a25b11bd67aeeb47a8179b72152dfd4a36da))
- broken icon call in frontend default pages template
- ([d8d2eb9](https://code.castopod.org/adaures/castopod/commit/d8d2eb92b741ecfc956b416db481f8c2dee84864))
-
-## [1.12.1](https://code.castopod.org/adaures/castopod/compare/v1.12.0...v1.12.1) (2024-07-01)
-
-### Bug Fixes
-
+ ([3228362](https://code.castopod.org/adaures/castopod/commit/322836254e86be7878e21438177ee8f73f03a2fa))
+- **manifest:** set repository url as required in docstring typings
+ ([a8c81b3](https://code.castopod.org/adaures/castopod/commit/a8c81b3fa19a28dbd608027c231dcac31eafb38f))
- set correct icons parameters in map and funding links views
- ([b129813](https://code.castopod.org/adaures/castopod/commit/b129813ea5d38436563639b51ec9ed2882644228)),
+ ([5d35524](https://code.castopod.org/adaures/castopod/commit/5d355248753be24e3cf324144ff076f2fc23be88)),
closes [#500](https://code.castopod.org/adaures/castopod/issues/500)
-# [1.12.0](https://code.castopod.org/adaures/castopod/compare/v1.11.0...v1.12.0) (6/28/2024)
+### Features
+
+- **plugins:** add `minCastopodVersion` to denote incompatibility with previous
+ Castopod versions
+ ([fc9ea75](https://code.castopod.org/adaures/castopod/commit/fc9ea7597e454e5c7c7af043d29af7bbe119e342))
+- **plugins:** load and display LICENSE.md file if found in plugin's directory
+ ([fee7905](https://code.castopod.org/adaures/castopod/commit/fee7905935a9adf963b4485b437fe4d972c14b5f))
+
+# [2.0.0-next.1](https://code.castopod.org/adaures/castopod/compare/v1.11.0...v2.0.0-next.1) (6/19/2024)
### Bug Fixes
@@ -248,14 +121,65 @@
([fc4f982](https://code.castopod.org/adaures/castopod/commit/fc4f9825568cd4384c5b3cfe972accd146548807)),
closes [#473](https://code.castopod.org/adaures/castopod/issues/473)
+### Build System
+
+- release next major version as prerelease
+ ([8275226](https://code.castopod.org/adaures/castopod/commit/827522643e9f8a5ea9be05b4847dc637f0f43a13))
+
### Features
+- add Plugins module with base files for plugins architecture
+ ([7253e13](https://code.castopod.org/adaures/castopod/commit/7253e13ac2118f6f165f54ea0cbcd63d51ab9205))
+- **plugins:** abstract settings form for general, podcast and episode types
+ ([b62b483](https://code.castopod.org/adaures/castopod/commit/b62b483ad9ff114a22a9ee52e1a1a2c9fa444d42))
+- **plugins:** activate / deactivate plugin using settings table
+ ([27d2a1b](https://code.castopod.org/adaures/castopod/commit/27d2a1b0ffba9454dd54cbb4251a2d179b09762a))
+- **plugins:** add aside with plugin metadata next to plugin's readme
+ ([dfb7888](https://code.castopod.org/adaures/castopod/commit/dfb7888aeb689b4066abc37084e08cd7f1d0f15d))
+- **plugins:** add before channel/item hooks to allow podcast/episode data edit
+ when generating rss
+ ([80d2c48](https://code.castopod.org/adaures/castopod/commit/80d2c48ee265cb32ed0d710c488292fcbc120044))
+- **plugins:** add json schema definition for plugin manifest
+ ([b5eddf3](https://code.castopod.org/adaures/castopod/commit/b5eddf351f6f6fa1c299fbac31cbd056ef232330))
+- **plugins:** add methods to easily retrieve general, podcast and episode
+ settings in hooks methods
+ ([3a900bb](https://code.castopod.org/adaures/castopod/commit/3a900bbab68b819cedf8943540d2ee0aeb6e8539))
+- **plugins:** add new field types + validate & cast user data before storing
+ settings
+ ([6f833fc](https://code.castopod.org/adaures/castopod/commit/6f833fc76a3aa6c6b87c27ad18a2fb90e537e21e))
+- **plugins:** add options to manifest for building forms and storing plugin
+ settings
+ ([3d8aedf](https://code.castopod.org/adaures/castopod/commit/3d8aedf9c34e6927b6d3b11445d5f0e669b347d7))
+- **plugins:** add settings page for podcast and episode if defined in the
+ plugin's manifest
+ ([89ac92f](https://code.castopod.org/adaures/castopod/commit/89ac92fb412a04231ce52fd6480c9ab893b19ef5))
+- **plugins:** add siteHead hook to add custom meta tags to public pages
+ ([e80a33b](https://code.castopod.org/adaures/castopod/commit/e80a33bf2ad4fe1b47037add7470a6c2770f4036))
+- **plugins:** display errors when plugin is invalid instead of crashing
+ ([8ec7909](https://code.castopod.org/adaures/castopod/commit/8ec79097bbdbcbce622518ef61c068f20e0ef74e))
+- **plugins:** handle empty states and long strings in UI
+ ([45ac2a4](https://code.castopod.org/adaures/castopod/commit/45ac2a4be96532b9456e6af1d26ba4ada3649303))
+- **plugins:** load and validate plugin manifest.json
+ ([1510e36](https://code.castopod.org/adaures/castopod/commit/1510e36c0acd2b254622ec230acd1d2461ee9bf3))
+- **plugins:** load plugins using file locator service
+ ([587938d](https://code.castopod.org/adaures/castopod/commit/587938d2bf307b823af143586b9ec9e9b44e8dc1))
+- **plugins:** load README.md file to view plugin's instructions in UI
+ ([e6bfdfc](https://code.castopod.org/adaures/castopod/commit/e6bfdfc3902705285701c13c8067fe0f538425c6))
+- **plugins:** register plugins using Plugin.php file instead of namespace +
+ simplify i18n structure
+ ([2035c39](https://code.castopod.org/adaures/castopod/commit/2035c39fd138a1fd408516bd1972ab6a02544c10))
+- **plugins:** uninstall plugins via CLI and admin UI
+ ([9a80de4](https://code.castopod.org/adaures/castopod/commit/9a80de40686bbf4288da21cc2a6dde8036580e47))
- set owner email to hidden by default in podcast create form
([7a6d9df](https://code.castopod.org/adaures/castopod/commit/7a6d9df6db8a6184b8250ced0475f3e741dde7f4))
- support podcast:txt tag with verify use case
([57e459e](https://code.castopod.org/adaures/castopod/commit/57e459e187ed048430f4137172e22396cd02bf81)),
closes [#468](https://code.castopod.org/adaures/castopod/issues/468)
+### BREAKING CHANGES
+
+- next major release including plugins architecture
+
# [1.11.0](https://code.castopod.org/adaures/castopod/compare/v1.10.5...v1.11.0) (4/17/2024)
### Bug Fixes
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 57da0daf..b1291ae9 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,128 +1,162 @@
-# Contributor Covenant Code of Conduct
+# Contributor Covenant 3.0 Code of Conduct
## Our Pledge
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity and
-orientation.
+We pledge to make our community welcoming, safe, and equitable for all.
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
+We are committed to fostering an environment that respects and promotes the
+dignity, rights, and contributions of all individuals, regardless of
+characteristics including race, ethnicity, caste, color, age, physical
+characteristics, neurodiversity, disability, sex or gender, gender identity or
+expression, sexual orientation, language, philosophy or religion, national or
+social origin, socio-economic position, level of education, or other status. The
+same privileges of participation are extended to everyone who participates in
+good faith and in accordance with this Covenant.
-## Our Standards
+## Encouraged Behaviors
-Examples of behavior that contributes to a positive environment for our
-community include:
+While acknowledging differences in social norms, we all strive to meet our
+community's expectations for positive behavior. We also understand that our
+words and actions may be interpreted differently than we intend based on
+culture, background, or native language.
-- Demonstrating empathy and kindness toward other people
-- Being respectful of differing opinions, viewpoints, and experiences
-- Giving and gracefully accepting constructive feedback
-- Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-- Focusing on what is best not just for us as individuals, but for the overall
- community
+With these considerations in mind, we agree to behave mindfully toward each
+other and act in ways that center our shared values, including:
-Examples of unacceptable behavior include:
+1. Respecting the **purpose of our community**, our activities, and our ways of
+ gathering.
+2. Engaging **kindly and honestly** with others.
+3. Respecting **different viewpoints** and experiences.
+4. **Taking responsibility** for our actions and contributions.
+5. Gracefully giving and accepting **constructive feedback**.
+6. Committing to **repairing harm** when it occurs.
+7. Behaving in other ways that promote and sustain the **well-being of our
+ community**.
-- The use of sexualized language or imagery, and sexual attention or advances of
- any kind
-- Trolling, insulting or derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or email address,
- without their explicit permission
-- Other conduct which could reasonably be considered inappropriate in a
- professional setting
+## Restricted Behaviors
-## Enforcement Responsibilities
+We agree to restrict the following behaviors in our community. Instances,
+threats, and promotion of these behaviors are violations of this Code of
+Conduct.
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
+1. **Harassment.** Violating explicitly expressed boundaries or engaging in
+ unnecessary personal attention after any clear request to stop.
+2. **Character attacks.** Making insulting, demeaning, or pejorative comments
+ directed at a community member or group of people.
+3. **Stereotyping or discrimination.** Characterizing anyone’s personality or
+ behavior on the basis of immutable identities or traits.
+4. **Sexualization.** Behaving in a way that would generally be considered
+ inappropriately intimate in the context or purpose of the community.
+5. **Violating confidentiality**. Sharing or acting on someone's personal or
+ private information without their permission.
+6. **Endangerment.** Causing, encouraging, or threatening violence or other harm
+ toward any person or group.
+7. Behaving in other ways that **threaten the well-being** of our community.
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
+### Other Restrictions
+
+1. **Misleading identity.** Impersonating someone else for any reason, or
+ pretending to be someone else to evade enforcement actions.
+2. **Failing to credit sources.** Not properly crediting the sources of content
+ you contribute.
+3. **Promotional materials**. Sharing marketing or other commercial content in a
+ way that is outside the norms of the community.
+4. **Irresponsible communication.** Failing to responsibly present content which
+ includes, links or describes any other restricted behaviors.
+
+## Reporting an Issue
+
+Tensions can occur between community members even when they are trying their
+best to collaborate. Not every conflict represents a code of conduct violation,
+and this Code of Conduct reinforces encouraged behaviors and norms that can help
+avoid conflicts and minimize harm.
+
+When an incident does occur, it is important to report it promptly. To report a
+possible violation, email us at [abuse@castopod.org](mailto:abuse@castopod.org).
+
+Community Moderators take reports of violations seriously and will make every
+effort to respond in a timely manner. They will investigate all reports of code
+of conduct violations, reviewing messages, logs, and recordings, or interviewing
+witnesses and other participants. Community Moderators will keep investigation
+and enforcement actions as transparent as possible while prioritizing safety and
+confidentiality. In order to honor these values, enforcement actions are carried
+out in private with the involved parties, but communicating to the whole
+community may be part of a mutually agreed upon resolution.
+
+## Addressing and Repairing Harm
+
+If an investigation by the Community Moderators finds that this Code of Conduct
+has been violated, the following enforcement ladder may be used to determine how
+best to repair harm, based on the incident's impact on the individuals involved
+and the community as a whole. Depending on the severity of a violation, lower
+rungs on the ladder may be skipped.
+
+1. Warning
+ 1. Event: A violation involving a single incident or series of incidents.
+ 2. Consequence: A private, written warning from the Community Moderators.
+ 3. Repair: Examples of repair include a private written apology,
+ acknowledgement of responsibility, and seeking clarification on
+ expectations.
+2. Temporarily Limited Activities
+ 1. Event: A repeated incidence of a violation that previously resulted in a
+ warning, or the first incidence of a more serious violation.
+ 2. Consequence: A private, written warning with a time-limited cooldown
+ period designed to underscore the seriousness of the situation and give
+ the community members involved time to process the incident. The cooldown
+ period may be limited to particular communication channels or interactions
+ with particular community members.
+ 3. Repair: Examples of repair may include making an apology, using the
+ cooldown period to reflect on actions and impact, and being thoughtful
+ about re-entering community spaces after the period is over.
+3. Temporary Suspension
+ 1. Event: A pattern of repeated violation which the Community Moderators have
+ tried to address with warnings, or a single serious violation.
+ 2. Consequence: A private written warning with conditions for return from
+ suspension. In general, temporary suspensions give the person being
+ suspended time to reflect upon their behavior and possible corrective
+ actions.
+ 3. Repair: Examples of repair include respecting the spirit of the
+ suspension, meeting the specified conditions for return, and being
+ thoughtful about how to reintegrate with the community when the suspension
+ is lifted.
+4. Permanent Ban
+ 1. Event: A pattern of repeated code of conduct violations that other steps
+ on the ladder have failed to resolve, or a violation so serious that the
+ Community Moderators determine there is no way to keep the community safe
+ with this person as a member.
+ 2. Consequence: Access to all community spaces, tools, and communication
+ channels is removed. In general, permanent bans should be rarely used,
+ should have strong reasoning behind them, and should only be resorted to
+ if working through other remedies has failed to change the behavior.
+ 3. Repair: There is no possible repair in cases of this severity.
+
+This enforcement ladder is intended as a guideline. It does not limit the
+ability of Community Managers to use their discretion and judgment, in keeping
+with the best interests of our community.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
+an individual is officially representing the community in public or other
+spaces. Examples of representing our community include using an official email
+address, posting via an official social media account, or acting as an appointed
representative at an online or offline event.
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-[abuse@castopod.org](mailto:abuse@castopod.org). All complaints will be reviewed
-and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series of
-actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or permanent
-ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within the
-community.
-
## Attribution
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+This Code of Conduct is adapted from the Contributor Covenant, version 3.0,
+permanently available at
+[https://www.contributor-covenant.org/version/3/0/](https://www.contributor-covenant.org/version/3/0/).
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
+Contributor Covenant is stewarded by the Organization for Ethical Source and
+licensed under CC BY-SA 4.0. To view a copy of this license, visit
+[https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/)
-[homepage]: https://www.contributor-covenant.org
-
-For answers to common questions about this code of conduct, see the FAQ at
-https://www.contributor-covenant.org/faq. Translations are available at
-https://www.contributor-covenant.org/translations.
+For answers to common questions about Contributor Covenant, see the FAQ at
+[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq).
+Translations are provided at
+[https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations).
+Additional enforcement and community guideline resources can be found at
+[https://www.contributor-covenant.org/resources](https://www.contributor-covenant.org/resources).
+The enforcement ladder was inspired by the work of
+[Mozilla’s code of conduct team](https://github.com/mozilla/inclusion).
diff --git a/CONTRIBUTING-DEV.md b/CONTRIBUTING-DEV.md
index 66bfae37..907d3ce1 100644
--- a/CONTRIBUTING-DEV.md
+++ b/CONTRIBUTING-DEV.md
@@ -5,7 +5,7 @@
Castopod is a web app based on the `php` framework
[CodeIgniter 4](https://codeigniter.com).
-We use [Docker](https://www.docker.com/) quickly setup a dev environment. A
+We use [Docker](https://www.docker.com/) to quickly setup a dev environment. A
`docker-compose.yml` and `Dockerfile` are included in the project's root folder
to help you kickstart your contribution.
@@ -16,9 +16,9 @@ to help you kickstart your contribution.
### 1. Pre-requisites
-0. Install [docker](https://docs.docker.com/get-docker).
+0. Install [Docker](https://docs.docker.com/get-docker).
-1. Clone Castopod project by running:
+1. Clone the Castopod repository by running:
```bash
git clone https://code.castopod.org/adaures/castopod.git
@@ -79,7 +79,7 @@ to help you kickstart your contribution.
> [CodeIgniter4 User Guide](https://codeigniter.com/user_guide/index.html)
> for more info.
-3. (for docker desktop) Add the repository you've cloned to docker desktop's
+3. (for Docker desktop) Add the repository you've cloned to Docker desktop's
`Settings` > `Resources` > `File Sharing`
### 2. (recommended) Develop inside the app container with VSCode
@@ -96,7 +96,7 @@ required services will be loaded automagically! 🪄
> The VSCode window will reload inside the dev container. Expect several
> minutes during first load as it is building all necessary services.
- **Note**: The dev container will start by running Castopod's php server.
+ **Note**: The dev container will start by running Castopod's PHP server.
During development, you will have to start [Vite](https://vitejs.dev)'s dev
server for compiling the typescript code and styles:
@@ -105,7 +105,7 @@ required services will be loaded automagically! 🪄
pnpm run dev
```
- If there is any issue with the php server not running, you can restart them
+ If there is any issue with the PHP server not running, you can restart them
using the following commands:
```bash
@@ -157,9 +157,9 @@ To see your changes, go to:
You do not wish to use the VSCode devcontainer? No problem!
-1. Start docker containers manually:
+1. Start the Docker containers manually:
- Go to project's root folder and run:
+ Go to the project's root folder and run:
```bash
# starts all services declared in docker-compose.yml file
@@ -223,14 +223,14 @@ You do not wish to use the VSCode devcontainer? No problem!
> For more info, check out the
> [Composer documentation](https://getcomposer.org/doc/).
-2. Install javascript dependencies with [pnpm](https://pnpm.io/)
+2. Install JavaScript dependencies with [pnpm](https://pnpm.io/)
```bash
pnpm install
```
> [!NOTE]
- > The javascript dependencies aren't included in the repository. Pnpm will
+ > The JavaScript dependencies aren't included in the repository. Pnpm will
> check the `package.json` and `pnpm-lock.yaml` files to download the
> packages with the right versions. The dependencies will live under the
> `node_module` folder. For more info, check out the
@@ -249,7 +249,7 @@ You do not wish to use the VSCode devcontainer? No problem!
> [!NOTE]
> The static assets generated live under the `public/assets` folder, it
- > includes javascript, styles, images, fonts, icons and svg files.
+ > includes JavaScript, styles, images, fonts, icons and svg files.
### Initialize and populate database
@@ -291,7 +291,7 @@ You do not wish to use the VSCode devcontainer? No problem!
php spark db:seed DevSuperadminSeeder
```
-3. (optionnal) Populate the database with test data:
+3. (optional) Populate the database with test data:
- Populate with fake podcast analytics:
```bash
@@ -312,13 +312,13 @@ You do not wish to use the VSCode devcontainer? No problem!
docker-compose logs --tail 50 --follow --timestamps app
```
-- Interact with redis server using included redis-cli command:
+- Interact with the Redis server using included redis-cli command:
```bash
docker exec -it castopod_redis redis-cli
```
-- Monitor the redis container:
+- Monitor the Redis container:
```bash
docker-compose logs --tail 50 --follow --timestamps redis
@@ -354,10 +354,37 @@ docker-compose down
docker-compose build app
```
-Check [docker](https://docs.docker.com/engine/reference/commandline/docker/) and
+Check [Docker](https://docs.docker.com/engine/reference/commandline/docker/) and
[docker-compose](https://docs.docker.com/compose/reference/) documentations for
more insights.
+### Updating Documentation
+
+Castopod's documentation is written in Markdown and uses the Astro Starlight
+framework. To update Castopod's documentation, including the Getting Started
+guide and User Guide:
+
+1. Change directories to the `docs` directory and install the dependencies:
+
+ ```bash
+ cd docs/
+ pnpm i
+ ```
+
+2. Start the documentation development server:
+
+ ```bash
+ pnpm run dev --host
+ ```
+
+3. The documentation development server runs on port 4321. In your browser visit
+ `http://localhost:4321/docs`. If the page displays a 404 Not Found error,
+ click on the Castopod logo in the upper left hand corner of the page and the
+ documentation should load.
+
+4. Edit the Markdown files with your documentation updates. The Astro Starlight
+ development server will automatically update each time you save a change.
+
## Known issues
### Allocation failed - JavaScript heap out of memory
@@ -396,7 +423,7 @@ You may use Linux user namespaces to fix this on your machine:
username:100000:65536
```
-3. Restart docker:
+3. Restart Docker:
```bash
sudo systemctl restart docker
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 24af0bdb..a3468537 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -98,8 +98,8 @@ accurate comments, etc.) and any other requirements (such as test coverage).
Adhering to the following process is the best way to get your work included in
the project:
-1. [Fork](https://docs.gitlab.com/ee/gitlab-basics/fork-project.html) the
- project, clone your fork, and configure the remotes:
+1. [Fork](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html)
+ the project, clone your fork, and configure the remotes:
```bash
# Clone your fork of the repo into the current directory
diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md
index b9c083c2..97175ffd 100644
--- a/DEPENDENCIES.md
+++ b/DEPENDENCIES.md
@@ -18,9 +18,9 @@ Javascript dependencies can be found in the [package.json](./package.json) file.
([Open Font License](https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL))
- [RemixIcon](https://remixicon.com/)
([Apache License 2.0](https://github.com/Remix-Design/RemixIcon/blob/master/License))
-- [OPAWG/User agent list](https://github.com/opawg/user-agents)
+- [OPAWG/User agent list](https://github.com/opawg/user-agents-v2)
([by Open Podcast Analytics Working Group](https://github.com/opawg))
- ([MIT license](https://github.com/opawg/user-agents/blob/master/LICENSE))
+ ([MIT license](https://github.com/opawg/user-agents-v2/blob/master/LICENSE))
- [OPAWG/podcast-rss-useragents](https://github.com/opawg/podcast-rss-useragents)
([by Open Podcast Analytics Working Group](https://github.com/opawg))
([MIT license](https://github.com/opawg/podcast-rss-useragents/blob/master/LICENSE))
diff --git a/README.md b/README.md
index d6c165c9..6460720c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
diff --git a/composer.json b/composer.json
index c4eebd5d..f3ce91ba 100644
--- a/composer.json
+++ b/composer.json
@@ -1,20 +1,21 @@
{
"name": "adaures/castopod",
- "version": "1.15.5",
+ "version": "2.0.0-dev",
"type": "project",
"description": "Castopod is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"homepage": "https://castopod.org",
"license": "AGPL-3.0-or-later",
"require": {
- "php": "^8.1",
+ "php": "^8.5",
+ "adaures/castopod-plugins-manager": "dev-main",
"adaures/ipcat-php": "^v1.0.0",
"adaures/podcast-persons-taxonomy": "^v1.0.1",
- "aws/aws-sdk-php": "^3.369.36",
+ "aws/aws-sdk-php": "^3.369.37",
"chrisjean/php-ico": "^1.0.4",
- "cocur/slugify": "^v4.7.1",
- "codeigniter4/framework": "4.6.5",
+ "cocur/slugify": "4.7.1",
+ "codeigniter4/framework": "4.7.0",
"codeigniter4/settings": "v2.2.0",
- "codeigniter4/shield": "^1.2.0",
+ "codeigniter4/shield": "1.2.0",
"codeigniter4/tasks": "dev-develop",
"geoip2/geoip2": "3.3.0",
"james-heinrich/getid3": "^2.0.0-beta6",
@@ -25,19 +26,19 @@
"mpratt/embera": "^2.0.42",
"opawg/user-agents-v2-php": "dev-main",
"phpseclib/phpseclib": "~2.0.51",
- "vlucas/phpdotenv": "^5.6.3",
+ "vlucas/phpdotenv": "5.6.3",
"whichbrowser/parser": "^v2.1.8",
- "yassinedoghri/codeigniter-vite": "^2.1",
- "yassinedoghri/php-icons": "^1.3.0",
+ "yassinedoghri/codeigniter-vite": "^2.1.0",
+ "yassinedoghri/php-icons": "1.3.0",
"yassinedoghri/podcast-feed": "dev-main"
},
"require-dev": {
"captainhook/captainhook": "^5.28.3",
- "codeigniter/phpstan-codeigniter": "^1.5.4",
- "mikey179/vfsstream": "v1.6.12",
+ "codeigniter/phpstan-codeigniter": "1.5.4",
+ "mikey179/vfsstream": "^v1.6.12",
"phpstan/extension-installer": "^1.4.3",
"phpstan/phpstan": "^2.1.39",
- "phpunit/phpunit": "^10.5.63",
+ "phpunit/phpunit": "^13.0.5",
"rector/rector": "^2.3.6",
"symplify/coding-standard": "^13.0.0",
"symplify/easy-coding-standard": "^13.0.4"
diff --git a/composer.lock b/composer.lock
index 6755eaf1..3e35a5dd 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,63 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ae175922494cbac88f4477946a143ae8",
+ "content-hash": "de1c665976cbb37fec3de326336d83f5",
"packages": [
+ {
+ "name": "adaures/castopod-plugins-manager",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ad-aures/castopod-plugins-manager.git",
+ "reference": "53430f9a57cd38eee3e3dfe5953764cc42c2a0c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ad-aures/castopod-plugins-manager/zipball/53430f9a57cd38eee3e3dfe5953764cc42c2a0c9",
+ "reference": "53430f9a57cd38eee3e3dfe5953764cc42c2a0c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.4",
+ "z4kn4fein/php-semver": "^3.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^4.0.4",
+ "pestphp/pest-plugin-type-coverage": "^4.0.2",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.22",
+ "rector/rector": "^2.1.4",
+ "symplify/coding-standard": "^12.4.3",
+ "symplify/easy-coding-standard": "^12.5.24"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/Constants.php",
+ "src/helpers.php"
+ ],
+ "psr-4": {
+ "Castopod\\PluginsManager\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "AGPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "Yassine Doghri",
+ "homepage": "https://yassinedoghri.com/"
+ }
+ ],
+ "description": "A PHP library to install, update, and remove plugins on a Castopod instance.",
+ "support": {
+ "issues": "https://github.com/ad-aures/castopod-plugins-manager/issues",
+ "source": "https://github.com/ad-aures/castopod-plugins-manager/tree/main"
+ },
+ "time": "2025-10-06T15:58:43+00:00"
+ },
{
"name": "adaures/ipcat-php",
"version": "v1.0.0",
@@ -206,16 +261,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.369.36",
+ "version": "3.369.37",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0"
+ "reference": "bc599ce989b101ee630d5e1a1aeda387632df47b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0",
- "reference": "2a69e7df5e03be9e08f9f73fb6a8cc9dd63b59c0",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bc599ce989b101ee630d5e1a1aeda387632df47b",
+ "reference": "bc599ce989b101ee630d5e1a1aeda387632df47b",
"shasum": ""
},
"require": {
@@ -297,9 +352,9 @@
"support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues",
- "source": "https://github.com/aws/aws-sdk-php/tree/3.369.36"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.369.37"
},
- "time": "2026-02-17T19:45:01+00:00"
+ "time": "2026-02-18T19:16:34+00:00"
},
{
"name": "brick/math",
@@ -484,23 +539,23 @@
},
{
"name": "codeigniter4/framework",
- "version": "v4.6.5",
+ "version": "v4.7.0",
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/framework.git",
- "reference": "116e0919590a412c09d2b9e4f6b8addda18224d8"
+ "reference": "e7753bc03f8b74af428f46b5e2bb74925487c930"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/codeigniter4/framework/zipball/116e0919590a412c09d2b9e4f6b8addda18224d8",
- "reference": "116e0919590a412c09d2b9e4f6b8addda18224d8",
+ "url": "https://api.github.com/repos/codeigniter4/framework/zipball/e7753bc03f8b74af428f46b5e2bb74925487c930",
+ "reference": "e7753bc03f8b74af428f46b5e2bb74925487c930",
"shasum": ""
},
"require": {
"ext-intl": "*",
"ext-mbstring": "*",
- "laminas/laminas-escaper": "^2.17",
- "php": "^8.1",
+ "laminas/laminas-escaper": "^2.18",
+ "php": "^8.2",
"psr/log": "^3.0"
},
"require-dev": {
@@ -514,6 +569,7 @@
"predis/predis": "^3.0"
},
"suggest": {
+ "ext-apcu": "If you use Cache class ApcuHandler",
"ext-curl": "If you use CURLRequest class",
"ext-dom": "If you use TestResponse",
"ext-exif": "If you run Image class tests",
@@ -525,7 +581,9 @@
"ext-memcached": "If you use Cache class MemcachedHandler with Memcached",
"ext-mysqli": "If you use MySQL",
"ext-oci8": "If you use Oracle Database",
+ "ext-pcntl": "If you use Signals",
"ext-pgsql": "If you use PostgreSQL",
+ "ext-posix": "If you use Signals",
"ext-readline": "Improves CLI::input() usability",
"ext-redis": "If you use Cache class RedisHandler",
"ext-simplexml": "If you format XML",
@@ -554,7 +612,7 @@
"slack": "https://codeigniterchat.slack.com",
"source": "https://github.com/codeigniter4/CodeIgniter4"
},
- "time": "2026-02-01T17:59:34+00:00"
+ "time": "2026-02-01T20:39:35+00:00"
},
{
"name": "codeigniter4/queue",
@@ -3201,25 +3259,25 @@
},
{
"name": "symfony/filesystem",
- "version": "v7.4.0",
+ "version": "v8.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "d551b38811096d0be9c4691d406991b47c0c630a"
+ "reference": "d937d400b980523dc9ee946bb69972b5e619058d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a",
- "reference": "d551b38811096d0be9c4691d406991b47c0c630a",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/d937d400b980523dc9ee946bb69972b5e619058d",
+ "reference": "d937d400b980523dc9ee946bb69972b5e619058d",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-mbstring": "~1.8"
},
"require-dev": {
- "symfony/process": "^6.4|^7.0|^8.0"
+ "symfony/process": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -3247,7 +3305,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.4.0"
+ "source": "https://github.com/symfony/filesystem/tree/v8.0.1"
},
"funding": [
{
@@ -3267,7 +3325,7 @@
"type": "tidelift"
}
],
- "time": "2025-11-27T13:27:24+00:00"
+ "time": "2025-12-01T09:13:36+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -3836,6 +3894,60 @@
"source": "https://github.com/yassinedoghri/podcast-feed/tree/main"
},
"time": "2024-04-28T16:17:41+00:00"
+ },
+ {
+ "name": "z4kn4fein/php-semver",
+ "version": "v3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/z4kn4fein/php-semver.git",
+ "reference": "049a1d81e92235c8b3c9ab30a96fcbaa929a266d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/z4kn4fein/php-semver/zipball/049a1d81e92235c8b3c9ab30a96fcbaa929a266d",
+ "reference": "049a1d81e92235c8b3c9ab30a96fcbaa929a266d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.0",
+ "phpstan/phpstan": "^1.0",
+ "phpunit/phpunit": "^10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "z4kn4fein\\SemVer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Peter Csajtai",
+ "email": "peter.csajtai@outlook.com"
+ }
+ ],
+ "description": "Semantic Versioning library for PHP. It implements the full semantic version 2.0.0 specification and provides ability to parse, compare, and increment semantic versions along with validation against constraints.",
+ "homepage": "https://github.com/z4kn4fein/php-semver",
+ "keywords": [
+ "comparison",
+ "semantic",
+ "semver",
+ "validation",
+ "version",
+ "versioning"
+ ],
+ "support": {
+ "issues": "https://github.com/z4kn4fein/php-semver/issues",
+ "source": "https://github.com/z4kn4fein/php-semver/tree/v3.0.0"
+ },
+ "time": "2024-04-01T16:17:27+00:00"
}
],
"packages-dev": [
@@ -4940,35 +5052,34 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.16",
+ "version": "13.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
+ "reference": "a8b58fde2f4fbc69a064e1f80ff917607cf7737c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
- "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a8b58fde2f4fbc69a064e1f80ff917607cf7737c",
+ "reference": "a8b58fde2f4fbc69a064e1f80ff917607cf7737c",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.19.1 || ^5.1.0",
- "php": ">=8.1",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-text-template": "^3.0.1",
- "sebastian/code-unit-reverse-lookup": "^3.0.0",
- "sebastian/complexity": "^3.2.0",
- "sebastian/environment": "^6.1.0",
- "sebastian/lines-of-code": "^2.0.2",
- "sebastian/version": "^4.0.1",
- "theseer/tokenizer": "^1.2.3"
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.4",
+ "phpunit/php-file-iterator": "^7.0",
+ "phpunit/php-text-template": "^6.0",
+ "sebastian/complexity": "^6.0",
+ "sebastian/environment": "^9.0",
+ "sebastian/lines-of-code": "^5.0",
+ "sebastian/version": "^7.0",
+ "theseer/tokenizer": "^2.0.1"
},
"require-dev": {
- "phpunit/phpunit": "^10.1"
+ "phpunit/phpunit": "^13.0"
},
"suggest": {
"ext-pcov": "PHP extension that provides line coverage",
@@ -4977,7 +5088,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.1.x-dev"
+ "dev-main": "13.0.x-dev"
}
},
"autoload": {
@@ -5006,40 +5117,52 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/13.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage",
+ "type": "tidelift"
}
],
- "time": "2024-08-22T04:31:57+00:00"
+ "time": "2026-02-06T06:05:15+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "4.1.0",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
+ "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
- "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
+ "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -5067,36 +5190,48 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator",
+ "type": "tidelift"
}
],
- "time": "2023-08-31T06:24:48+00:00"
+ "time": "2026-02-06T04:33:26+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "4.0.0",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
+ "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
- "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
+ "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -5104,7 +5239,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -5130,40 +5265,53 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
+ "security": "https://github.com/sebastianbergmann/php-invoker/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T06:56:09+00:00"
+ "time": "2026-02-06T04:34:47+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "3.0.1",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
+ "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
- "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4",
+ "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -5190,40 +5338,52 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template",
+ "type": "tidelift"
}
],
- "time": "2023-08-31T14:07:24+00:00"
+ "time": "2026-02-06T04:36:37+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "6.0.0",
+ "version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
+ "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
- "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6",
+ "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "9.0-dev"
}
},
"autoload": {
@@ -5249,28 +5409,41 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
+ "security": "https://github.com/sebastianbergmann/php-timer/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/9.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T06:57:52+00:00"
+ "time": "2026-02-06T04:37:53+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "10.5.63",
+ "version": "13.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "33198268dad71e926626b618f3ec3966661e4d90"
+ "reference": "d57826e8921a534680c613924bfd921ded8047f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90",
- "reference": "33198268dad71e926626b618f3ec3966661e4d90",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d57826e8921a534680c613924bfd921ded8047f4",
+ "reference": "d57826e8921a534680c613924bfd921ded8047f4",
"shasum": ""
},
"require": {
@@ -5283,26 +5456,23 @@
"myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
- "php": ">=8.1",
- "phpunit/php-code-coverage": "^10.1.16",
- "phpunit/php-file-iterator": "^4.1.0",
- "phpunit/php-invoker": "^4.0.0",
- "phpunit/php-text-template": "^3.0.1",
- "phpunit/php-timer": "^6.0.0",
- "sebastian/cli-parser": "^2.0.1",
- "sebastian/code-unit": "^2.0.0",
- "sebastian/comparator": "^5.0.5",
- "sebastian/diff": "^5.1.1",
- "sebastian/environment": "^6.1.0",
- "sebastian/exporter": "^5.1.4",
- "sebastian/global-state": "^6.0.2",
- "sebastian/object-enumerator": "^5.0.0",
- "sebastian/recursion-context": "^5.0.1",
- "sebastian/type": "^4.0.0",
- "sebastian/version": "^4.0.1"
- },
- "suggest": {
- "ext-soap": "To be able to generate mocks based on WSDL files"
+ "php": ">=8.4.1",
+ "phpunit/php-code-coverage": "^13.0.1",
+ "phpunit/php-file-iterator": "^7.0.0",
+ "phpunit/php-invoker": "^7.0.0",
+ "phpunit/php-text-template": "^6.0.0",
+ "phpunit/php-timer": "^9.0.0",
+ "sebastian/cli-parser": "^5.0.0",
+ "sebastian/comparator": "^8.0.0",
+ "sebastian/diff": "^8.0.0",
+ "sebastian/environment": "^9.0.0",
+ "sebastian/exporter": "^8.0.0",
+ "sebastian/global-state": "^9.0.0",
+ "sebastian/object-enumerator": "^8.0.0",
+ "sebastian/recursion-context": "^8.0.0",
+ "sebastian/type": "^7.0.0",
+ "sebastian/version": "^7.0.0",
+ "staabm/side-effects-detector": "^1.0.5"
},
"bin": [
"phpunit"
@@ -5310,7 +5480,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "10.5-dev"
+ "dev-main": "13.0-dev"
}
},
"autoload": {
@@ -5342,7 +5512,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/13.0.5"
},
"funding": [
{
@@ -5366,7 +5536,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-27T05:48:37+00:00"
+ "time": "2026-02-18T12:40:03+00:00"
},
{
"name": "psr/container",
@@ -6009,28 +6179,28 @@
},
{
"name": "sebastian/cli-parser",
- "version": "2.0.1",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
+ "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
- "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca",
+ "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6054,155 +6224,59 @@
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
"security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
- }
- ],
- "time": "2024-03-02T07:12:49+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
- "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
+ },
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
- },
- "funding": [
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
{
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:58:43+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
- "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
- "shasum": ""
- },
- "require": {
- "php": ">=8.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser",
+ "type": "tidelift"
}
],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:59:15+00:00"
+ "time": "2026-02-06T04:39:44+00:00"
},
{
"name": "sebastian/comparator",
- "version": "5.0.5",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d"
+ "reference": "29b232ddc29c2b114c0358c69b3084e7c3da0d58"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
- "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/29b232ddc29c2b114c0358c69b3084e7c3da0d58",
+ "reference": "29b232ddc29c2b114c0358c69b3084e7c3da0d58",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/diff": "^5.0",
- "sebastian/exporter": "^5.0"
+ "php": ">=8.4",
+ "sebastian/diff": "^8.0",
+ "sebastian/exporter": "^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "phpunit/phpunit": "^13.0"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6242,7 +6316,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/8.0.0"
},
"funding": [
{
@@ -6262,33 +6336,33 @@
"type": "tidelift"
}
],
- "time": "2026-01-24T09:25:16+00:00"
+ "time": "2026-02-06T04:40:39+00:00"
},
{
"name": "sebastian/complexity",
- "version": "3.2.0",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "68ff824baeae169ec9f2137158ee529584553799"
+ "reference": "c5651c795c98093480df79350cb050813fc7a2f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
- "reference": "68ff824baeae169ec9f2137158ee529584553799",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3",
+ "reference": "c5651c795c98093480df79350cb050813fc7a2f3",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.2-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -6312,41 +6386,53 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity",
+ "type": "tidelift"
}
],
- "time": "2023-12-21T08:37:17+00:00"
+ "time": "2026-02-06T04:41:32+00:00"
},
{
"name": "sebastian/diff",
- "version": "5.1.1",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
+ "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
- "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2b6d09d7729ee87d605a439469f9dcc39be5ea3",
+ "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0",
- "symfony/process": "^6.4"
+ "phpunit/phpunit": "^13.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.1-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6379,35 +6465,47 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
+ "source": "https://github.com/sebastianbergmann/diff/tree/8.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/diff",
+ "type": "tidelift"
}
],
- "time": "2024-03-02T07:15:17+00:00"
+ "time": "2026-02-06T04:42:27+00:00"
},
{
"name": "sebastian/environment",
- "version": "6.1.0",
+ "version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
+ "reference": "bb64d08145b021b67d5f253308a498b73ab0461e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
- "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/bb64d08145b021b67d5f253308a498b73ab0461e",
+ "reference": "bb64d08145b021b67d5f253308a498b73ab0461e",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"suggest": {
"ext-posix": "*"
@@ -6415,7 +6513,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.1-dev"
+ "dev-main": "9.0-dev"
}
},
"autoload": {
@@ -6443,42 +6541,54 @@
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"security": "https://github.com/sebastianbergmann/environment/security/policy",
- "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
+ "source": "https://github.com/sebastianbergmann/environment/tree/9.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
+ "type": "tidelift"
}
],
- "time": "2024-03-23T08:47:14+00:00"
+ "time": "2026-02-06T04:43:29+00:00"
},
{
"name": "sebastian/exporter",
- "version": "5.1.4",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "0735b90f4da94969541dac1da743446e276defa6"
+ "reference": "dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6",
- "reference": "0735b90f4da94969541dac1da743446e276defa6",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea",
+ "reference": "dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "php": ">=8.1",
- "sebastian/recursion-context": "^5.0"
+ "php": ">=8.4",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.1-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6521,7 +6631,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/8.0.0"
},
"funding": [
{
@@ -6541,35 +6651,35 @@
"type": "tidelift"
}
],
- "time": "2025-09-24T06:09:11+00:00"
+ "time": "2026-02-06T04:44:28+00:00"
},
{
"name": "sebastian/global-state",
- "version": "6.0.2",
+ "version": "9.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
+ "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
- "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e52e3dc22441e6218c710afe72c3042f8fc41ea7",
+ "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
+ "php": ">=8.4",
+ "sebastian/object-reflector": "^6.0",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "9.0-dev"
}
},
"autoload": {
@@ -6595,41 +6705,53 @@
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
+ "type": "tidelift"
}
],
- "time": "2024-03-02T07:19:19+00:00"
+ "time": "2026-02-06T04:45:13+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "2.0.2",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
+ "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
- "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/4f21bb7768e1c997722ccc7efb1d6b5c11bfd471",
+ "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=8.1"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -6653,42 +6775,54 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code",
+ "type": "tidelift"
}
],
- "time": "2023-12-21T08:38:20+00:00"
+ "time": "2026-02-06T04:45:54+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "5.0.0",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
+ "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
- "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
+ "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
"shasum": ""
},
"require": {
- "php": ">=8.1",
- "sebastian/object-reflector": "^3.0",
- "sebastian/recursion-context": "^5.0"
+ "php": ">=8.4",
+ "sebastian/object-reflector": "^6.0",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6710,40 +6844,53 @@
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
+ "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T07:08:32+00:00"
+ "time": "2026-02-06T04:46:36+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "3.0.0",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
+ "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
- "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
+ "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -6765,40 +6912,53 @@
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
+ "security": "https://github.com/sebastianbergmann/object-reflector/security/policy",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T07:06:18+00:00"
+ "time": "2026-02-06T04:47:13+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "5.0.1",
+ "version": "8.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a"
+ "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a",
- "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e",
+ "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.5"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6829,7 +6989,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0"
},
"funding": [
{
@@ -6849,32 +7009,32 @@
"type": "tidelift"
}
],
- "time": "2025-08-10T07:50:56+00:00"
+ "time": "2026-02-06T04:51:28+00:00"
},
{
"name": "sebastian/type",
- "version": "4.0.0",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
+ "reference": "42412224607bd3931241bbd17f38e0f972f5a916"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
- "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/42412224607bd3931241bbd17f38e0f972f5a916",
+ "reference": "42412224607bd3931241bbd17f38e0f972f5a916",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^10.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -6897,37 +7057,50 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
}
],
- "time": "2023-02-03T07:10:45+00:00"
+ "time": "2026-02-06T04:52:09+00:00"
},
{
"name": "sebastian/version",
- "version": "4.0.1",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
+ "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
- "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b",
+ "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "4.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -6950,15 +7123,28 @@
"homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/7.0.0"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/version",
+ "type": "tidelift"
}
],
- "time": "2023-02-07T11:34:05+00:00"
+ "time": "2026-02-06T04:52:52+00:00"
},
{
"name": "sebastianfeldmann/camino",
@@ -7137,48 +7323,92 @@
"time": "2026-01-26T20:59:18+00:00"
},
{
- "name": "symfony/console",
- "version": "v7.4.4",
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894"
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
- "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/string": "^7.2|^8.0"
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
},
- "conflict": {
- "symfony/dependency-injection": "<6.4",
- "symfony/dotenv": "<6.4",
- "symfony/event-dispatcher": "<6.4",
- "symfony/lock": "<6.4",
- "symfony/process": "<6.4"
+ "require-dev": {
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.6",
+ "phpunit/phpunit": "^9.6.21",
+ "symfony/var-dumper": "^5.4.43",
+ "tomasvotruba/type-coverage": "1.0.0",
+ "tomasvotruba/unused-public": "1.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "lib/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/staabm",
+ "type": "github"
+ }
+ ],
+ "time": "2024-10-20T05:08:20+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v8.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/ace03c4cf9805080ff40cbeec69fca180c339a3b",
+ "reference": "ace03c4cf9805080ff40cbeec69fca180c339a3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.4",
+ "symfony/polyfill-mbstring": "^1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.4|^8.0"
},
"provide": {
"psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0|^8.0",
- "symfony/dependency-injection": "^6.4|^7.0|^8.0",
- "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
- "symfony/http-foundation": "^6.4|^7.0|^8.0",
- "symfony/http-kernel": "^6.4|^7.0|^8.0",
- "symfony/lock": "^6.4|^7.0|^8.0",
- "symfony/messenger": "^6.4|^7.0|^8.0",
- "symfony/process": "^6.4|^7.0|^8.0",
- "symfony/stopwatch": "^6.4|^7.0|^8.0",
- "symfony/var-dumper": "^6.4|^7.0|^8.0"
+ "symfony/config": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/event-dispatcher": "^7.4|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
+ "symfony/http-kernel": "^7.4|^8.0",
+ "symfony/lock": "^7.4|^8.0",
+ "symfony/messenger": "^7.4|^8.0",
+ "symfony/process": "^7.4|^8.0",
+ "symfony/stopwatch": "^7.4|^8.0",
+ "symfony/var-dumper": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -7212,7 +7442,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.4.4"
+ "source": "https://github.com/symfony/console/tree/v8.0.4"
},
"funding": [
{
@@ -7232,28 +7462,28 @@
"type": "tidelift"
}
],
- "time": "2026-01-13T11:36:38+00:00"
+ "time": "2026-01-13T13:06:50+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.4.4",
+ "version": "v8.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "dc2c0eba1af673e736bb851d747d266108aea746"
+ "reference": "99301401da182b6cfaa4700dbe9987bb75474b47"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746",
- "reference": "dc2c0eba1af673e736bb851d747d266108aea746",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/99301401da182b6cfaa4700dbe9987bb75474b47",
+ "reference": "99301401da182b6cfaa4700dbe9987bb75474b47",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
- "symfony/dependency-injection": "<6.4",
+ "symfony/security-http": "<7.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@@ -7262,14 +7492,14 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
- "symfony/config": "^6.4|^7.0|^8.0",
- "symfony/dependency-injection": "^6.4|^7.0|^8.0",
- "symfony/error-handler": "^6.4|^7.0|^8.0",
- "symfony/expression-language": "^6.4|^7.0|^8.0",
- "symfony/framework-bundle": "^6.4|^7.0|^8.0",
- "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/config": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/error-handler": "^7.4|^8.0",
+ "symfony/expression-language": "^7.4|^8.0",
+ "symfony/framework-bundle": "^7.4|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
"symfony/service-contracts": "^2.5|^3",
- "symfony/stopwatch": "^6.4|^7.0|^8.0"
+ "symfony/stopwatch": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -7297,7 +7527,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.4"
},
"funding": [
{
@@ -7317,7 +7547,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-05T11:45:34+00:00"
+ "time": "2026-01-05T11:45:55+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -7397,23 +7627,23 @@
},
{
"name": "symfony/finder",
- "version": "v7.4.5",
+ "version": "v8.0.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
+ "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
- "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0",
+ "reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.4"
},
"require-dev": {
- "symfony/filesystem": "^6.4|^7.0|^8.0"
+ "symfony/filesystem": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -7441,7 +7671,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.4.5"
+ "source": "https://github.com/symfony/finder/tree/v8.0.5"
},
"funding": [
{
@@ -7461,24 +7691,24 @@
"type": "tidelift"
}
],
- "time": "2026-01-26T15:07:59+00:00"
+ "time": "2026-01-26T15:08:38+00:00"
},
{
"name": "symfony/options-resolver",
- "version": "v7.4.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
- "reference": "b38026df55197f9e39a44f3215788edf83187b80"
+ "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80",
- "reference": "b38026df55197f9e39a44f3215788edf83187b80",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d2b592535ffa6600c265a3893a7f7fd2bad82dd7",
+ "reference": "d2b592535ffa6600c265a3893a7f7fd2bad82dd7",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/deprecation-contracts": "^2.5|^3"
},
"type": "library",
@@ -7512,7 +7742,7 @@
"options"
],
"support": {
- "source": "https://github.com/symfony/options-resolver/tree/v7.4.0"
+ "source": "https://github.com/symfony/options-resolver/tree/v8.0.0"
},
"funding": [
{
@@ -7532,7 +7762,7 @@
"type": "tidelift"
}
],
- "time": "2025-11-12T15:39:26+00:00"
+ "time": "2025-11-12T15:55:31+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@@ -7863,20 +8093,20 @@
},
{
"name": "symfony/process",
- "version": "v7.4.5",
+ "version": "v8.0.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "608476f4604102976d687c483ac63a79ba18cc97"
+ "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97",
- "reference": "608476f4604102976d687c483ac63a79ba18cc97",
+ "url": "https://api.github.com/repos/symfony/process/zipball/b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
+ "reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.4"
},
"type": "library",
"autoload": {
@@ -7904,7 +8134,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.4.5"
+ "source": "https://github.com/symfony/process/tree/v8.0.5"
},
"funding": [
{
@@ -7924,7 +8154,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-26T15:07:59+00:00"
+ "time": "2026-01-26T15:08:38+00:00"
},
{
"name": "symfony/service-contracts",
@@ -8015,20 +8245,20 @@
},
{
"name": "symfony/stopwatch",
- "version": "v7.4.0",
+ "version": "v8.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "8a24af0a2e8a872fb745047180649b8418303084"
+ "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084",
- "reference": "8a24af0a2e8a872fb745047180649b8418303084",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/67df1914c6ccd2d7b52f70d40cf2aea02159d942",
+ "reference": "67df1914c6ccd2d7b52f70d40cf2aea02159d942",
"shasum": ""
},
"require": {
- "php": ">=8.2",
+ "php": ">=8.4",
"symfony/service-contracts": "^2.5|^3"
},
"type": "library",
@@ -8057,7 +8287,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v7.4.0"
+ "source": "https://github.com/symfony/stopwatch/tree/v8.0.0"
},
"funding": [
{
@@ -8077,39 +8307,38 @@
"type": "tidelift"
}
],
- "time": "2025-08-04T07:05:15+00:00"
+ "time": "2025-08-04T07:36:47+00:00"
},
{
"name": "symfony/string",
- "version": "v7.4.4",
+ "version": "v8.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f"
+ "reference": "758b372d6882506821ed666032e43020c4f57194"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f",
- "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f",
+ "url": "https://api.github.com/repos/symfony/string/zipball/758b372d6882506821ed666032e43020c4f57194",
+ "reference": "758b372d6882506821ed666032e43020c4f57194",
"shasum": ""
},
"require": {
- "php": ">=8.2",
- "symfony/deprecation-contracts": "^2.5|^3.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.33",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0"
+ "php": ">=8.4",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-intl-grapheme": "^1.33",
+ "symfony/polyfill-intl-normalizer": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
},
"conflict": {
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
- "symfony/emoji": "^7.1|^8.0",
- "symfony/http-client": "^6.4|^7.0|^8.0",
- "symfony/intl": "^6.4|^7.0|^8.0",
+ "symfony/emoji": "^7.4|^8.0",
+ "symfony/http-client": "^7.4|^8.0",
+ "symfony/intl": "^7.4|^8.0",
"symfony/translation-contracts": "^2.5|^3.0",
- "symfony/var-exporter": "^6.4|^7.0|^8.0"
+ "symfony/var-exporter": "^7.4|^8.0"
},
"type": "library",
"autoload": {
@@ -8148,7 +8377,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.4.4"
+ "source": "https://github.com/symfony/string/tree/v8.0.4"
},
"funding": [
{
@@ -8168,7 +8397,7 @@
"type": "tidelift"
}
],
- "time": "2026-01-12T10:54:30+00:00"
+ "time": "2026-01-12T12:37:40+00:00"
},
{
"name": "symplify/coding-standard",
@@ -8291,23 +8520,23 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.3.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "b7489ce515e168639d17feec34b8847c326b0b3c"
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c",
- "reference": "b7489ce515e168639d17feec34b8847c326b0b3c",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
+ "php": "^8.1"
},
"type": "library",
"autoload": {
@@ -8329,7 +8558,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.3.1"
+ "source": "https://github.com/theseer/tokenizer/tree/2.0.1"
},
"funding": [
{
@@ -8337,12 +8566,13 @@
"type": "github"
}
],
- "time": "2025-11-17T20:03:58+00:00"
+ "time": "2025-12-08T11:19:18+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {
+ "adaures/castopod-plugins-manager": 20,
"codeigniter4/tasks": 20,
"opawg/user-agents-v2-php": 20,
"yassinedoghri/podcast-feed": 20
@@ -8350,7 +8580,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": "^8.1"
+ "php": "^8.4"
},
"platform-dev": {},
"plugin-api-version": "2.9.0"
diff --git a/docker/ci/Dockerfile b/docker/ci/Dockerfile
index 1e98f266..bae95838 100644
--- a/docker/ci/Dockerfile
+++ b/docker/ci/Dockerfile
@@ -4,7 +4,7 @@
# ⚠️ NOT optimized for production
# should be used only for continuous integration
#---------------------------------------------------
-FROM php:8.1-fpm-alpine3.22
+FROM php:8.5-fpm-alpine3.23
LABEL maintainer="Yassine Doghri "
@@ -32,9 +32,8 @@ RUN \
mysqli \
&& apk del .php-ext-build-dep \
# install pnpm
- && wget -qO- https://get.pnpm.io/install.sh | ENV="~/.shrc" SHELL="$(which sh)" sh - \
- && mv ~/.local/share/pnpm/pnpm /usr/bin/pnpm \
- && rm -rf ~/.local \
+ && npm install --global corepack@latest \
+ && corepack enable pnpm \
# set pnpm store directory
&& pnpm config set store-dir .pnpm-store \
# set composer cache directory
diff --git a/docker/production/Dockerfile b/docker/production/Dockerfile
index dc719c71..f55d3cfc 100644
--- a/docker/production/Dockerfile
+++ b/docker/production/Dockerfile
@@ -7,7 +7,7 @@
# 2. BUILD the FrankenPHP/debian based prod image
#---------------------------------------------------
-ARG PHP_VERSION="8.4"
+ARG PHP_VERSION="8.5"
####################################################
# BUNDLE STAGE
diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 12243d1b..d641ec7f 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -1,6 +1,7 @@
// @ts-check
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
+import starlightOpenAPI from "starlight-openapi";
const site = "https://docs.castopod.org/";
const base = process.env.BASE ?? "/docs";
@@ -143,6 +144,17 @@ export default defineConfig({
lang: "zh-Hans",
},
},
+ plugins: [
+ // Generate the OpenAPI documentation pages.
+ starlightOpenAPI([
+ {
+ base: "en/api",
+ label: "API reference",
+ schema: "../modules/Api/Rest/V1/schema.yaml",
+ collapsed: true,
+ },
+ ]),
+ ],
sidebar: [
{
label: "Introduction",
@@ -214,6 +226,90 @@ export default defineConfig({
},
],
},
+ {
+ label: "Plugins",
+ items: [
+ {
+ label: "Introduction",
+ link: "/plugins/",
+ },
+ {
+ label: "Install plugins",
+ link: "/plugins/install",
+ },
+ {
+ label: "Create a plugin",
+ link: "/plugins/create",
+ },
+ {
+ label: "Share your plugin",
+ link: "/plugins/share",
+ },
+ {
+ label: "Reference",
+ items: [
+ {
+ label: "plugins.json",
+ link: "/plugins/reference/plugins-json",
+ },
+ {
+ label: "plugins-lock.json",
+ link: "/plugins/reference/plugins-lock-json",
+ },
+ {
+ label: "manifest.json",
+ link: "/plugins/reference/manifest",
+ },
+ {
+ label: "hooks",
+ link: "/plugins/reference/hooks",
+ },
+ ],
+ },
+ ],
+ },
+ // TODO: openapi plugin does not handle i18n, manual sidebar workaround
+ // Add the generated sidebar group to the sidebar.
+ // ...openAPISidebarGroups,
+ {
+ label: "API reference",
+ translations: {},
+ items: [
+ {
+ label: "Overview",
+ link: "/api",
+ },
+ {
+ label: "Operations",
+ items: [
+ {
+ label: "Get all podcasts",
+ link: "/api/operations/get-all-podcasts",
+ },
+ {
+ label: "Get podcast by ID",
+ link: "/api/operations/get-podcast-by-id",
+ },
+ {
+ label: "Get all episodes",
+ link: "/api/operations/get-all-episodes",
+ },
+ {
+ label: "Add a new episode",
+ link: "/api/operations/add-episode",
+ },
+ {
+ label: "Get episode by ID",
+ link: "/api/operations/get-episode-by-id",
+ },
+ {
+ label: "Publish an episode",
+ link: "/api/operations/publish-episode",
+ },
+ ],
+ },
+ ],
+ },
{
label: "User guide",
translations: {},
@@ -225,6 +321,7 @@ export default defineConfig({
{
label: "Manage your instance",
translations: {},
+ collapsed: true,
items: [
{
label: "Introduction",
@@ -266,6 +363,7 @@ export default defineConfig({
{
label: "Manage your podcasts",
translations: {},
+ collapsed: true,
items: [
{
label: "Introduction",
diff --git a/docs/package.json b/docs/package.json
index 5edaeb8c..9258fab6 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -14,7 +14,8 @@
"@astrojs/starlight": "^0.37.6",
"@fontsource/inter": "^5.2.8",
"@fontsource/rubik": "^5.2.8",
- "astro": "^5.17.1",
- "sharp": "^0.34.5"
+ "astro": "^5.17.2",
+ "sharp": "^0.34.5",
+ "starlight-openapi": "^0.22.0"
}
}
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
index fc96242c..45dac61d 100644
--- a/docs/pnpm-lock.yaml
+++ b/docs/pnpm-lock.yaml
@@ -9,7 +9,7 @@ importers:
dependencies:
"@astrojs/starlight":
specifier: ^0.37.6
- version: 0.37.6(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
+ version: 0.37.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))
"@fontsource/inter":
specifier: ^5.2.8
version: 5.2.8
@@ -17,25 +17,29 @@ importers:
specifier: ^5.2.8
version: 5.2.8
astro:
- specifier: ^5.17.1
- version: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
+ specifier: ^5.17.2
+ version: 5.17.2(rollup@4.57.1)(typescript@5.9.3)
sharp:
specifier: ^0.34.5
version: 0.34.5
+ starlight-openapi:
+ specifier: ^0.22.0
+ version: 0.22.0(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.37.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3)))(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))(openapi-types@12.1.3)
packages:
+ "@apidevtools/json-schema-ref-parser@13.0.5":
+ resolution:
+ {
+ integrity: sha512-xfh4xVJD62gG6spIc7lwxoWT+l16nZu1ELyU8FkjaP/oD2yP09EvLAU6KhtudN9aML2Khhs9pY6Slr7KGTES3w==,
+ }
+ engines: { node: ">= 16" }
+
"@astrojs/compiler@2.13.1":
resolution:
{
integrity: sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==,
}
- "@astrojs/internal-helpers@0.7.2":
- resolution:
- {
- integrity: sha512-KCkCqR3Goym79soqEtbtLzJfqhTWMyVaizUi35FLzgGSzBotSw8DB1qwsu7U96ihOJgYhDk2nVPz+3LnXPeX6g==,
- }
-
"@astrojs/internal-helpers@0.7.5":
resolution:
{
@@ -48,16 +52,10 @@ packages:
integrity: sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==,
}
- "@astrojs/markdown-remark@6.3.6":
+ "@astrojs/mdx@4.3.13":
resolution:
{
- integrity: sha512-bwylYktCTsLMVoCOEHbn2GSUA3c5KT/qilekBKA3CBng0bo1TYjNZPr761vxumRk9kJGqTOtU+fgCAp5Vwokug==,
- }
-
- "@astrojs/mdx@4.3.4":
- resolution:
- {
- integrity: sha512-Ew3iP+6zuzzJWNEH5Qr1iknrue1heEfgmfuMpuwLaSwqlUiJQ0NDb2oxKosgWU1ROYmVf1H4KCmS6QdMWKyFjw==,
+ integrity: sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==,
}
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
peerDependencies:
@@ -70,10 +68,10 @@ packages:
}
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
- "@astrojs/sitemap@3.5.1":
+ "@astrojs/sitemap@3.7.0":
resolution:
{
- integrity: sha512-uX5z52GLtQTgOe8r3jeGmFRYrFe52mdpLYJzqjvL1cdy5Kg3MLOZEvaZ/OCH0fSq0t7e50uJQ6oBMZG0ffszBg==,
+ integrity: sha512-+qxjUrz6Jcgh+D5VE1gKUJTA3pSthuPHe6Ao5JCxok794Lewx8hBFaWHtOnN0ntb2lfOf7gvOi9TefUswQ/ZVA==,
}
"@astrojs/starlight@0.37.6":
@@ -91,6 +89,13 @@ packages:
}
engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 }
+ "@babel/code-frame@7.29.0":
+ resolution:
+ {
+ integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==,
+ }
+ engines: { node: ">=6.9.0" }
+
"@babel/helper-string-parser@7.27.1":
resolution:
{
@@ -113,10 +118,10 @@ packages:
engines: { node: ">=6.0.0" }
hasBin: true
- "@babel/runtime@7.28.3":
+ "@babel/runtime@7.28.6":
resolution:
{
- integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==,
+ integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==,
}
engines: { node: ">=6.9.0" }
@@ -134,10 +139,10 @@ packages:
}
engines: { node: ">=18" }
- "@ctrl/tinycolor@4.1.0":
+ "@ctrl/tinycolor@4.2.0":
resolution:
{
- integrity: sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==,
+ integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==,
}
engines: { node: ">=14" }
@@ -147,262 +152,496 @@ packages:
integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==,
}
- "@esbuild/aix-ppc64@0.25.9":
+ "@esbuild/aix-ppc64@0.25.12":
resolution:
{
- integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==,
+ integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==,
}
engines: { node: ">=18" }
cpu: [ppc64]
os: [aix]
- "@esbuild/android-arm64@0.25.9":
+ "@esbuild/aix-ppc64@0.27.3":
resolution:
{
- integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==,
+ integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [ppc64]
+ os: [aix]
+
+ "@esbuild/android-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [android]
- "@esbuild/android-arm@0.25.9":
+ "@esbuild/android-arm64@0.27.3":
resolution:
{
- integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==,
+ integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [android]
+
+ "@esbuild/android-arm@0.25.12":
+ resolution:
+ {
+ integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==,
}
engines: { node: ">=18" }
cpu: [arm]
os: [android]
- "@esbuild/android-x64@0.25.9":
+ "@esbuild/android-arm@0.27.3":
resolution:
{
- integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==,
+ integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm]
+ os: [android]
+
+ "@esbuild/android-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [android]
- "@esbuild/darwin-arm64@0.25.9":
+ "@esbuild/android-x64@0.27.3":
resolution:
{
- integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==,
+ integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [android]
+
+ "@esbuild/darwin-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [darwin]
- "@esbuild/darwin-x64@0.25.9":
+ "@esbuild/darwin-arm64@0.27.3":
resolution:
{
- integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==,
+ integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [darwin]
+
+ "@esbuild/darwin-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [darwin]
- "@esbuild/freebsd-arm64@0.25.9":
+ "@esbuild/darwin-x64@0.27.3":
resolution:
{
- integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==,
+ integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [darwin]
+
+ "@esbuild/freebsd-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [freebsd]
- "@esbuild/freebsd-x64@0.25.9":
+ "@esbuild/freebsd-arm64@0.27.3":
resolution:
{
- integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==,
+ integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [freebsd]
+
+ "@esbuild/freebsd-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [freebsd]
- "@esbuild/linux-arm64@0.25.9":
+ "@esbuild/freebsd-x64@0.27.3":
resolution:
{
- integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==,
+ integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [freebsd]
+
+ "@esbuild/linux-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [linux]
- "@esbuild/linux-arm@0.25.9":
+ "@esbuild/linux-arm64@0.27.3":
resolution:
{
- integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==,
+ integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [linux]
+
+ "@esbuild/linux-arm@0.25.12":
+ resolution:
+ {
+ integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==,
}
engines: { node: ">=18" }
cpu: [arm]
os: [linux]
- "@esbuild/linux-ia32@0.25.9":
+ "@esbuild/linux-arm@0.27.3":
resolution:
{
- integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==,
+ integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm]
+ os: [linux]
+
+ "@esbuild/linux-ia32@0.25.12":
+ resolution:
+ {
+ integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==,
}
engines: { node: ">=18" }
cpu: [ia32]
os: [linux]
- "@esbuild/linux-loong64@0.25.9":
+ "@esbuild/linux-ia32@0.27.3":
resolution:
{
- integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==,
+ integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==,
+ }
+ engines: { node: ">=18" }
+ cpu: [ia32]
+ os: [linux]
+
+ "@esbuild/linux-loong64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==,
}
engines: { node: ">=18" }
cpu: [loong64]
os: [linux]
- "@esbuild/linux-mips64el@0.25.9":
+ "@esbuild/linux-loong64@0.27.3":
resolution:
{
- integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==,
+ integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [loong64]
+ os: [linux]
+
+ "@esbuild/linux-mips64el@0.25.12":
+ resolution:
+ {
+ integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==,
}
engines: { node: ">=18" }
cpu: [mips64el]
os: [linux]
- "@esbuild/linux-ppc64@0.25.9":
+ "@esbuild/linux-mips64el@0.27.3":
resolution:
{
- integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==,
+ integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==,
+ }
+ engines: { node: ">=18" }
+ cpu: [mips64el]
+ os: [linux]
+
+ "@esbuild/linux-ppc64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==,
}
engines: { node: ">=18" }
cpu: [ppc64]
os: [linux]
- "@esbuild/linux-riscv64@0.25.9":
+ "@esbuild/linux-ppc64@0.27.3":
resolution:
{
- integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==,
+ integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [ppc64]
+ os: [linux]
+
+ "@esbuild/linux-riscv64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==,
}
engines: { node: ">=18" }
cpu: [riscv64]
os: [linux]
- "@esbuild/linux-s390x@0.25.9":
+ "@esbuild/linux-riscv64@0.27.3":
resolution:
{
- integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==,
+ integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==,
+ }
+ engines: { node: ">=18" }
+ cpu: [riscv64]
+ os: [linux]
+
+ "@esbuild/linux-s390x@0.25.12":
+ resolution:
+ {
+ integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==,
}
engines: { node: ">=18" }
cpu: [s390x]
os: [linux]
- "@esbuild/linux-x64@0.25.9":
+ "@esbuild/linux-s390x@0.27.3":
resolution:
{
- integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==,
+ integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==,
+ }
+ engines: { node: ">=18" }
+ cpu: [s390x]
+ os: [linux]
+
+ "@esbuild/linux-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [linux]
- "@esbuild/netbsd-arm64@0.25.9":
+ "@esbuild/linux-x64@0.27.3":
resolution:
{
- integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==,
+ integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [linux]
+
+ "@esbuild/netbsd-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [netbsd]
- "@esbuild/netbsd-x64@0.25.9":
+ "@esbuild/netbsd-arm64@0.27.3":
resolution:
{
- integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==,
+ integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [netbsd]
+
+ "@esbuild/netbsd-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [netbsd]
- "@esbuild/openbsd-arm64@0.25.9":
+ "@esbuild/netbsd-x64@0.27.3":
resolution:
{
- integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==,
+ integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [netbsd]
+
+ "@esbuild/openbsd-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [openbsd]
- "@esbuild/openbsd-x64@0.25.9":
+ "@esbuild/openbsd-arm64@0.27.3":
resolution:
{
- integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==,
+ integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [openbsd]
+
+ "@esbuild/openbsd-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [openbsd]
- "@esbuild/openharmony-arm64@0.25.9":
+ "@esbuild/openbsd-x64@0.27.3":
resolution:
{
- integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==,
+ integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [openbsd]
+
+ "@esbuild/openharmony-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [openharmony]
- "@esbuild/sunos-x64@0.25.9":
+ "@esbuild/openharmony-arm64@0.27.3":
resolution:
{
- integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==,
+ integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [openharmony]
+
+ "@esbuild/sunos-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [sunos]
- "@esbuild/win32-arm64@0.25.9":
+ "@esbuild/sunos-x64@0.27.3":
resolution:
{
- integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==,
+ integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [sunos]
+
+ "@esbuild/win32-arm64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==,
}
engines: { node: ">=18" }
cpu: [arm64]
os: [win32]
- "@esbuild/win32-ia32@0.25.9":
+ "@esbuild/win32-arm64@0.27.3":
resolution:
{
- integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==,
+ integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [arm64]
+ os: [win32]
+
+ "@esbuild/win32-ia32@0.25.12":
+ resolution:
+ {
+ integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==,
}
engines: { node: ">=18" }
cpu: [ia32]
os: [win32]
- "@esbuild/win32-x64@0.25.9":
+ "@esbuild/win32-ia32@0.27.3":
resolution:
{
- integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==,
+ integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==,
+ }
+ engines: { node: ">=18" }
+ cpu: [ia32]
+ os: [win32]
+
+ "@esbuild/win32-x64@0.25.12":
+ resolution:
+ {
+ integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==,
}
engines: { node: ">=18" }
cpu: [x64]
os: [win32]
- "@expressive-code/core@0.41.3":
+ "@esbuild/win32-x64@0.27.3":
resolution:
{
- integrity: sha512-9qzohqU7O0+JwMEEgQhnBPOw5DtsQRBXhW++5fvEywsuX44vCGGof1SL5OvPElvNgaWZ4pFZAFSlkNOkGyLwSQ==,
+ integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==,
+ }
+ engines: { node: ">=18" }
+ cpu: [x64]
+ os: [win32]
+
+ "@expressive-code/core@0.41.6":
+ resolution:
+ {
+ integrity: sha512-FvJQP+hG0jWi/FLBSmvHInDqWR7jNANp9PUDjdMqSshHb0y7sxx3vHuoOr6SgXjWw+MGLqorZyPQ0aAlHEok6g==,
}
- "@expressive-code/plugin-frames@0.41.3":
+ "@expressive-code/plugin-frames@0.41.6":
resolution:
{
- integrity: sha512-rFQtmf/3N2CK3Cq/uERweMTYZnBu+CwxBdHuOftEmfA9iBE7gTVvwpbh82P9ZxkPLvc40UMhYt7uNuAZexycRQ==,
+ integrity: sha512-d+hkSYXIQot6fmYnOmWAM+7TNWRv/dhfjMsNq+mIZz8Tb4mPHOcgcfZeEM5dV9TDL0ioQNvtcqQNuzA1sRPjxg==,
}
- "@expressive-code/plugin-shiki@0.41.3":
+ "@expressive-code/plugin-shiki@0.41.6":
resolution:
{
- integrity: sha512-RlTARoopzhFJIOVHLGvuXJ8DCEme/hjV+ZnRJBIxzxsKVpGPW4Oshqg9xGhWTYdHstTsxO663s0cdBLzZj9TQA==,
+ integrity: sha512-Y6zmKBmsIUtWTzdefqlzm/h9Zz0Rc4gNdt2GTIH7fhHH2I9+lDYCa27BDwuBhjqcos6uK81Aca9dLUC4wzN+ng==,
}
- "@expressive-code/plugin-text-markers@0.41.3":
+ "@expressive-code/plugin-text-markers@0.41.6":
resolution:
{
- integrity: sha512-SN8tkIzDpA0HLAscEYD2IVrfLiid6qEdE9QLlGVSxO1KEw7qYvjpbNBQjUjMr5/jvTJ7ys6zysU2vLPHE0sb2g==,
+ integrity: sha512-PBFa1wGyYzRExMDzBmAWC6/kdfG1oLn4pLpBeTfIRrALPjcGA/59HP3e7q9J0Smk4pC7U+lWkA2LHR8FYV8U7Q==,
}
"@fontsource/inter@5.2.8":
@@ -417,6 +656,13 @@ packages:
integrity: sha512-PIc8QR7FqWPcYhbdRiGff56vQlKqg/ytES1YqecSq1GkgxiH4TBshrFvDEOZ9JonUF9m1qQ+qXxJj7wD5zgXEw==,
}
+ "@humanwhocodes/momoa@2.0.4":
+ resolution:
+ {
+ integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==,
+ }
+ engines: { node: ">=10.10.0" }
+
"@img/colour@1.0.0":
resolution:
{
@@ -651,10 +897,10 @@ packages:
integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==,
}
- "@mdx-js/mdx@3.1.0":
+ "@mdx-js/mdx@3.1.1":
resolution:
{
- integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==,
+ integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==,
}
"@oslojs/encoding@1.1.0":
@@ -663,52 +909,85 @@ packages:
integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==,
}
- "@pagefind/darwin-arm64@1.3.0":
+ "@pagefind/darwin-arm64@1.4.0":
resolution:
{
- integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==,
+ integrity: sha512-2vMqkbv3lbx1Awea90gTaBsvpzgRs7MuSgKDxW0m9oV1GPZCZbZBJg/qL83GIUEN2BFlY46dtUZi54pwH+/pTQ==,
}
cpu: [arm64]
os: [darwin]
- "@pagefind/darwin-x64@1.3.0":
+ "@pagefind/darwin-x64@1.4.0":
resolution:
{
- integrity: sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow==,
+ integrity: sha512-e7JPIS6L9/cJfow+/IAqknsGqEPjJnVXGjpGm25bnq+NPdoD3c/7fAwr1OXkG4Ocjx6ZGSCijXEV4ryMcH2E3A==,
}
cpu: [x64]
os: [darwin]
- "@pagefind/default-ui@1.3.0":
+ "@pagefind/default-ui@1.4.0":
resolution:
{
- integrity: sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg==,
+ integrity: sha512-wie82VWn3cnGEdIjh4YwNESyS1G6vRHwL6cNjy9CFgNnWW/PGRjsLq300xjVH5sfPFK3iK36UxvIBymtQIEiSQ==,
}
- "@pagefind/linux-arm64@1.3.0":
+ "@pagefind/freebsd-x64@1.4.0":
resolution:
{
- integrity: sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ==,
+ integrity: sha512-WcJVypXSZ+9HpiqZjFXMUobfFfZZ6NzIYtkhQ9eOhZrQpeY5uQFqNWLCk7w9RkMUwBv1HAMDW3YJQl/8OqsV0Q==,
+ }
+ cpu: [x64]
+ os: [freebsd]
+
+ "@pagefind/linux-arm64@1.4.0":
+ resolution:
+ {
+ integrity: sha512-PIt8dkqt4W06KGmQjONw7EZbhDF+uXI7i0XtRLN1vjCUxM9vGPdtJc2mUyVPevjomrGz5M86M8bqTr6cgDp1Uw==,
}
cpu: [arm64]
os: [linux]
- "@pagefind/linux-x64@1.3.0":
+ "@pagefind/linux-x64@1.4.0":
resolution:
{
- integrity: sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ==,
+ integrity: sha512-z4oddcWwQ0UHrTHR8psLnVlz6USGJ/eOlDPTDYZ4cI8TK8PgwRUPQZp9D2iJPNIPcS6Qx/E4TebjuGJOyK8Mmg==,
}
cpu: [x64]
os: [linux]
- "@pagefind/windows-x64@1.3.0":
+ "@pagefind/windows-x64@1.4.0":
resolution:
{
- integrity: sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ==,
+ integrity: sha512-NkT+YAdgS2FPCn8mIA9bQhiBs+xmniMGq1LFPDhcFn0+2yIUEiIG06t7bsZlhdjknEQRTSdT7YitP6fC5qwP0g==,
}
cpu: [x64]
os: [win32]
+ "@readme/better-ajv-errors@2.4.0":
+ resolution:
+ {
+ integrity: sha512-9WODaOAKSl/mU+MYNZ2aHCrkoRSvmQ+1YkLj589OEqqjOAhbn8j7Z+ilYoiTu/he6X63/clsxxAB4qny9/dDzg==,
+ }
+ engines: { node: ">=18" }
+ peerDependencies:
+ ajv: 4.11.8 - 8
+
+ "@readme/openapi-parser@4.1.2":
+ resolution:
+ {
+ integrity: sha512-lAFH88r/CHs5VZDUocEda0OSMSQsr6801sziIjOKyVA+0hSFN+BPuelPF5XvkMROHecnPd+XEJN1iNQqCgER/g==,
+ }
+ engines: { node: ">=20" }
+ peerDependencies:
+ openapi-types: ">=7"
+
+ "@readme/openapi-schemas@3.1.0":
+ resolution:
+ {
+ integrity: sha512-9FC/6ho8uFa8fV50+FPy/ngWN53jaUu4GRXlAjcxIRrzhltJnpKkBG2Tp0IDraFJeWrOpk84RJ9EMEEYzaI1Bw==,
+ }
+ engines: { node: ">=18" }
+
"@rollup/pluginutils@5.3.0":
resolution:
{
@@ -721,182 +1000,218 @@ packages:
rollup:
optional: true
- "@rollup/rollup-android-arm-eabi@4.48.1":
+ "@rollup/rollup-android-arm-eabi@4.57.1":
resolution:
{
- integrity: sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==,
+ integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==,
}
cpu: [arm]
os: [android]
- "@rollup/rollup-android-arm64@4.48.1":
+ "@rollup/rollup-android-arm64@4.57.1":
resolution:
{
- integrity: sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==,
+ integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==,
}
cpu: [arm64]
os: [android]
- "@rollup/rollup-darwin-arm64@4.48.1":
+ "@rollup/rollup-darwin-arm64@4.57.1":
resolution:
{
- integrity: sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==,
+ integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==,
}
cpu: [arm64]
os: [darwin]
- "@rollup/rollup-darwin-x64@4.48.1":
+ "@rollup/rollup-darwin-x64@4.57.1":
resolution:
{
- integrity: sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==,
+ integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==,
}
cpu: [x64]
os: [darwin]
- "@rollup/rollup-freebsd-arm64@4.48.1":
+ "@rollup/rollup-freebsd-arm64@4.57.1":
resolution:
{
- integrity: sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==,
+ integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==,
}
cpu: [arm64]
os: [freebsd]
- "@rollup/rollup-freebsd-x64@4.48.1":
+ "@rollup/rollup-freebsd-x64@4.57.1":
resolution:
{
- integrity: sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==,
+ integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==,
}
cpu: [x64]
os: [freebsd]
- "@rollup/rollup-linux-arm-gnueabihf@4.48.1":
+ "@rollup/rollup-linux-arm-gnueabihf@4.57.1":
resolution:
{
- integrity: sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==,
+ integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==,
}
cpu: [arm]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-arm-musleabihf@4.48.1":
+ "@rollup/rollup-linux-arm-musleabihf@4.57.1":
resolution:
{
- integrity: sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==,
+ integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==,
}
cpu: [arm]
os: [linux]
libc: [musl]
- "@rollup/rollup-linux-arm64-gnu@4.48.1":
+ "@rollup/rollup-linux-arm64-gnu@4.57.1":
resolution:
{
- integrity: sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==,
+ integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==,
}
cpu: [arm64]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-arm64-musl@4.48.1":
+ "@rollup/rollup-linux-arm64-musl@4.57.1":
resolution:
{
- integrity: sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==,
+ integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==,
}
cpu: [arm64]
os: [linux]
libc: [musl]
- "@rollup/rollup-linux-loongarch64-gnu@4.48.1":
+ "@rollup/rollup-linux-loong64-gnu@4.57.1":
resolution:
{
- integrity: sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==,
+ integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==,
}
cpu: [loong64]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-ppc64-gnu@4.48.1":
+ "@rollup/rollup-linux-loong64-musl@4.57.1":
resolution:
{
- integrity: sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==,
+ integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==,
+ }
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
+
+ "@rollup/rollup-linux-ppc64-gnu@4.57.1":
+ resolution:
+ {
+ integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==,
}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-riscv64-gnu@4.48.1":
+ "@rollup/rollup-linux-ppc64-musl@4.57.1":
resolution:
{
- integrity: sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==,
+ integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==,
+ }
+ cpu: [ppc64]
+ os: [linux]
+ libc: [musl]
+
+ "@rollup/rollup-linux-riscv64-gnu@4.57.1":
+ resolution:
+ {
+ integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==,
}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-riscv64-musl@4.48.1":
+ "@rollup/rollup-linux-riscv64-musl@4.57.1":
resolution:
{
- integrity: sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==,
+ integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==,
}
cpu: [riscv64]
os: [linux]
libc: [musl]
- "@rollup/rollup-linux-s390x-gnu@4.48.1":
+ "@rollup/rollup-linux-s390x-gnu@4.57.1":
resolution:
{
- integrity: sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==,
+ integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==,
}
cpu: [s390x]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-x64-gnu@4.48.1":
+ "@rollup/rollup-linux-x64-gnu@4.57.1":
resolution:
{
- integrity: sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==,
+ integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==,
}
cpu: [x64]
os: [linux]
libc: [glibc]
- "@rollup/rollup-linux-x64-musl@4.48.1":
+ "@rollup/rollup-linux-x64-musl@4.57.1":
resolution:
{
- integrity: sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==,
+ integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==,
}
cpu: [x64]
os: [linux]
libc: [musl]
- "@rollup/rollup-win32-arm64-msvc@4.48.1":
+ "@rollup/rollup-openbsd-x64@4.57.1":
resolution:
{
- integrity: sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==,
+ integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==,
+ }
+ cpu: [x64]
+ os: [openbsd]
+
+ "@rollup/rollup-openharmony-arm64@4.57.1":
+ resolution:
+ {
+ integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==,
+ }
+ cpu: [arm64]
+ os: [openharmony]
+
+ "@rollup/rollup-win32-arm64-msvc@4.57.1":
+ resolution:
+ {
+ integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==,
}
cpu: [arm64]
os: [win32]
- "@rollup/rollup-win32-ia32-msvc@4.48.1":
+ "@rollup/rollup-win32-ia32-msvc@4.57.1":
resolution:
{
- integrity: sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==,
+ integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==,
}
cpu: [ia32]
os: [win32]
- "@rollup/rollup-win32-x64-msvc@4.48.1":
+ "@rollup/rollup-win32-x64-gnu@4.57.1":
resolution:
{
- integrity: sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==,
+ integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==,
}
cpu: [x64]
os: [win32]
- "@shikijs/core@3.11.0":
+ "@rollup/rollup-win32-x64-msvc@4.57.1":
resolution:
{
- integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==,
+ integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==,
}
+ cpu: [x64]
+ os: [win32]
"@shikijs/core@3.22.0":
resolution:
@@ -904,60 +1219,30 @@ packages:
integrity: sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==,
}
- "@shikijs/engine-javascript@3.11.0":
- resolution:
- {
- integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==,
- }
-
"@shikijs/engine-javascript@3.22.0":
resolution:
{
integrity: sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==,
}
- "@shikijs/engine-oniguruma@3.11.0":
- resolution:
- {
- integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==,
- }
-
"@shikijs/engine-oniguruma@3.22.0":
resolution:
{
integrity: sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==,
}
- "@shikijs/langs@3.11.0":
- resolution:
- {
- integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==,
- }
-
"@shikijs/langs@3.22.0":
resolution:
{
integrity: sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==,
}
- "@shikijs/themes@3.11.0":
- resolution:
- {
- integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==,
- }
-
"@shikijs/themes@3.22.0":
resolution:
{
integrity: sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==,
}
- "@shikijs/types@3.11.0":
- resolution:
- {
- integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==,
- }
-
"@shikijs/types@3.22.0":
resolution:
{
@@ -1000,6 +1285,12 @@ packages:
integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==,
}
+ "@types/json-schema@7.0.15":
+ resolution:
+ {
+ integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==,
+ }
+
"@types/mdast@4.0.4":
resolution:
{
@@ -1030,12 +1321,6 @@ packages:
integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==,
}
- "@types/node@24.3.0":
- resolution:
- {
- integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==,
- }
-
"@types/sax@1.2.7":
resolution:
{
@@ -1076,6 +1361,23 @@ packages:
engines: { node: ">=0.4.0" }
hasBin: true
+ ajv-draft-04@1.0.0:
+ resolution:
+ {
+ integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==,
+ }
+ peerDependencies:
+ ajv: ^8.5.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
+ ajv@8.18.0:
+ resolution:
+ {
+ integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==,
+ }
+
ansi-align@3.0.1:
resolution:
{
@@ -1089,17 +1391,17 @@ packages:
}
engines: { node: ">=8" }
- ansi-regex@6.2.0:
+ ansi-regex@6.2.2:
resolution:
{
- integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==,
+ integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==,
}
engines: { node: ">=12" }
- ansi-styles@6.2.1:
+ ansi-styles@6.2.3:
resolution:
{
- integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==,
+ integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==,
}
engines: { node: ">=12" }
@@ -1142,18 +1444,18 @@ packages:
}
hasBin: true
- astro-expressive-code@0.41.3:
+ astro-expressive-code@0.41.6:
resolution:
{
- integrity: sha512-u+zHMqo/QNLE2eqYRCrK3+XMlKakv33Bzuz+56V1gs8H0y6TZ0hIi3VNbIxeTn51NLn+mJfUV/A0kMNfE4rANw==,
+ integrity: sha512-l47tb1uhmVIebHUkw+HEPtU/av0G4O8Q34g2cbkPvC7/e9ZhANcjUUciKt9Hp6gSVDdIuXBBLwJQn2LkeGMOAw==,
}
peerDependencies:
- astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0
+ astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 || ^6.0.0-beta
- astro@5.17.1:
+ astro@5.17.2:
resolution:
{
- integrity: sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==,
+ integrity: sha512-7jnMqGo53hOQNwo1N/wqeOvUp8wwW/p+DeerSjSkHNx8L/1mhy6P7rVo7EhdmF8DpKqw0tl/B5Fx1WcIzg1ysA==,
}
engines:
{ node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: ">=9.6.5", pnpm: ">=7.1.0" }
@@ -1216,10 +1518,10 @@ packages:
integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==,
}
- chalk@5.6.0:
+ chalk@5.6.2:
resolution:
{
- integrity: sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==,
+ integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==,
}
engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 }
@@ -1325,10 +1627,10 @@ packages:
integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==,
}
- css-selector-parser@3.1.3:
+ css-selector-parser@3.3.0:
resolution:
{
- integrity: sha512-gJMigczVZqYAk0hPVzx/M4Hm1D9QOtqkdQk9005TNzDIUGzo5cnHEDiKUT7jGPximL/oYb+LIitcHFQ4aKupxg==,
+ integrity: sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==,
}
css-tree@2.2.1:
@@ -1367,18 +1669,6 @@ packages:
}
engines: { node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: ">=7.0.0" }
- debug@4.4.1:
- resolution:
- {
- integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==,
- }
- engines: { node: ">=6.0" }
- peerDependencies:
- supports-color: "*"
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.4.3:
resolution:
{
@@ -1391,10 +1681,10 @@ packages:
supports-color:
optional: true
- decode-named-character-reference@1.2.0:
+ decode-named-character-reference@1.3.0:
resolution:
{
- integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==,
+ integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==,
}
defu@6.1.4:
@@ -1494,10 +1784,10 @@ packages:
}
engines: { node: ">=4" }
- emoji-regex@10.4.0:
+ emoji-regex@10.6.0:
resolution:
{
- integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==,
+ integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==,
}
emoji-regex@8.0.0:
@@ -1538,10 +1828,18 @@ packages:
integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==,
}
- esbuild@0.25.9:
+ esbuild@0.25.12:
resolution:
{
- integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==,
+ integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==,
+ }
+ engines: { node: ">=18" }
+ hasBin: true
+
+ esbuild@0.27.3:
+ resolution:
+ {
+ integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==,
}
engines: { node: ">=18" }
hasBin: true
@@ -1601,16 +1899,16 @@ packages:
integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==,
}
- eventemitter3@5.0.1:
+ eventemitter3@5.0.4:
resolution:
{
- integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==,
+ integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==,
}
- expressive-code@0.41.3:
+ expressive-code@0.41.6:
resolution:
{
- integrity: sha512-YLnD62jfgBZYrXIPQcJ0a51Afv9h8VlWqEGK9uU2T5nL/5rb8SnA86+7+mgCZe5D34Tff5RNEA5hjNVJYHzrFg==,
+ integrity: sha512-W/5+IQbrpCIM5KGLjO35wlp1NCwDOOVQb+PAvzEoGkW1xjGM807ZGfBKptNWH6UECvt6qgmLyWolCMYKh7eQmA==,
}
extend@3.0.2:
@@ -1619,6 +1917,18 @@ packages:
integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==,
}
+ fast-deep-equal@3.1.3:
+ resolution:
+ {
+ integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==,
+ }
+
+ fast-uri@3.1.0:
+ resolution:
+ {
+ integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==,
+ }
+
fdir@6.5.0:
resolution:
{
@@ -1659,10 +1969,10 @@ packages:
engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
os: [darwin]
- get-east-asian-width@1.3.0:
+ get-east-asian-width@1.4.0:
resolution:
{
- integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==,
+ integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==,
}
engines: { node: ">=18" }
@@ -1768,10 +2078,10 @@ packages:
integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==,
}
- hast-util-to-parse5@8.0.0:
+ hast-util-to-parse5@8.0.1:
resolution:
{
- integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==,
+ integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==,
}
hast-util-to-string@3.0.1:
@@ -1828,22 +2138,16 @@ packages:
integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==,
}
- import-meta-resolve@4.1.0:
- resolution:
- {
- integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==,
- }
-
import-meta-resolve@4.2.0:
resolution:
{
integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==,
}
- inline-style-parser@0.2.4:
+ inline-style-parser@0.2.7:
resolution:
{
- integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==,
+ integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==,
}
iron-webcrypto@1.2.1:
@@ -1906,19 +2210,18 @@ packages:
}
engines: { node: ">=12" }
- is-wsl@3.1.0:
+ is-wsl@3.1.1:
resolution:
{
- integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==,
+ integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==,
}
engines: { node: ">=16" }
- js-yaml@4.1.0:
+ js-tokens@4.0.0:
resolution:
{
- integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
+ integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
}
- hasBin: true
js-yaml@4.1.1:
resolution:
@@ -1927,6 +2230,19 @@ packages:
}
hasBin: true
+ json-schema-traverse@1.0.0:
+ resolution:
+ {
+ integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==,
+ }
+
+ jsonpointer@5.0.1:
+ resolution:
+ {
+ integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==,
+ }
+ engines: { node: ">=0.10.0" }
+
kleur@3.0.3:
resolution:
{
@@ -1934,13 +2250,6 @@ packages:
}
engines: { node: ">=6" }
- kleur@4.1.5:
- resolution:
- {
- integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==,
- }
- engines: { node: ">=6" }
-
klona@2.0.6:
resolution:
{
@@ -1948,25 +2257,26 @@ packages:
}
engines: { node: ">= 8" }
+ leven@3.1.0:
+ resolution:
+ {
+ integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==,
+ }
+ engines: { node: ">=6" }
+
longest-streak@3.1.0:
resolution:
{
integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==,
}
- lru-cache@11.2.5:
+ lru-cache@11.2.6:
resolution:
{
- integrity: sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==,
+ integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==,
}
engines: { node: 20 || >=22 }
- magic-string@0.30.18:
- resolution:
- {
- integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==,
- }
-
magic-string@0.30.21:
resolution:
{
@@ -2082,10 +2392,10 @@ packages:
integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==,
}
- mdast-util-to-hast@13.2.0:
+ mdast-util-to-hast@13.2.1:
resolution:
{
- integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==,
+ integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==,
}
mdast-util-to-markdown@2.1.2:
@@ -2405,18 +2715,18 @@ packages:
integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==,
}
- oniguruma-to-es@4.3.3:
- resolution:
- {
- integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==,
- }
-
oniguruma-to-es@4.3.4:
resolution:
{
integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==,
}
+ openapi-types@12.1.3:
+ resolution:
+ {
+ integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==,
+ }
+
p-limit@6.2.0:
resolution:
{
@@ -2444,10 +2754,10 @@ packages:
integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==,
}
- pagefind@1.3.0:
+ pagefind@1.4.0:
resolution:
{
- integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==,
+ integrity: sha512-z2kY1mQlL4J8q5EIsQkLzQjilovKzfNVhX8De6oyE6uHpfFtyBaqUpcl/XzJC/4fjD8vBDyh1zolimIcVrCn9g==,
}
hasBin: true
@@ -2532,12 +2842,6 @@ packages:
}
engines: { node: ">= 6" }
- property-information@6.5.0:
- resolution:
- {
- integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==,
- }
-
property-information@7.1.0:
resolution:
{
@@ -2595,16 +2899,16 @@ packages:
integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==,
}
- regex@6.0.1:
+ regex@6.1.0:
resolution:
{
- integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==,
+ integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==,
}
- rehype-expressive-code@0.41.3:
+ rehype-expressive-code@0.41.6:
resolution:
{
- integrity: sha512-8d9Py4c/V6I/Od2VIXFAdpiO2kc0SV2qTJsRAaqSIcM9aruW4ASLNe2kOEo1inXAAkIhpFzAHTc358HKbvpNUg==,
+ integrity: sha512-aBMX8kxPtjmDSFUdZlAWJkMvsQ4ZMASfee90JWIAV8tweltXLzkWC3q++43ToTelI8ac5iC0B3/S/Cl4Ql1y2g==,
}
rehype-format@5.0.1:
@@ -2655,10 +2959,10 @@ packages:
integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==,
}
- remark-mdx@3.1.0:
+ remark-mdx@3.1.1:
resolution:
{
- integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==,
+ integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==,
}
remark-parse@11.0.0:
@@ -2686,6 +2990,13 @@ packages:
integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==,
}
+ require-from-string@2.0.2:
+ resolution:
+ {
+ integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==,
+ }
+ engines: { node: ">=0.10.0" }
+
retext-latin@4.0.0:
resolution:
{
@@ -2710,19 +3021,20 @@ packages:
integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==,
}
- rollup@4.48.1:
+ rollup@4.57.1:
resolution:
{
- integrity: sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==,
+ integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==,
}
engines: { node: ">=18.0.0", npm: ">=8.0.0" }
hasBin: true
- sax@1.4.1:
+ sax@1.4.4:
resolution:
{
- integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==,
+ integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==,
}
+ engines: { node: ">=11.0.0" }
semver@7.7.4:
resolution:
@@ -2739,12 +3051,6 @@ packages:
}
engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 }
- shiki@3.11.0:
- resolution:
- {
- integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==,
- }
-
shiki@3.22.0:
resolution:
{
@@ -2757,22 +3063,14 @@ packages:
integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==,
}
- sitemap@8.0.0:
+ sitemap@8.0.2:
resolution:
{
- integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==,
+ integrity: sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==,
}
engines: { node: ">=14.0.0", npm: ">=6.0.0" }
- deprecated: "SECURITY: Multiple vulnerabilities fixed in 8.0.1 (XML injection, path traversal, command injection, protocol injection). Upgrade immediately: npm install sitemap@8.0.1"
hasBin: true
- smol-toml@1.4.2:
- resolution:
- {
- integrity: sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==,
- }
- engines: { node: ">= 18" }
-
smol-toml@1.6.0:
resolution:
{
@@ -2800,6 +3098,17 @@ packages:
integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==,
}
+ starlight-openapi@0.22.0:
+ resolution:
+ {
+ integrity: sha512-4H/fywAoTcvKbcv+xBr9LdrjMc5geDOSnydvzpiOxjxkHvI6g+7uPhWNCejnJPyZUd/MC1MI23tvYug85d/WzA==,
+ }
+ engines: { node: ">=18.17.1" }
+ peerDependencies:
+ "@astrojs/markdown-remark": ">=6.0.1"
+ "@astrojs/starlight": ">=0.34.0"
+ astro: ">=5.5.0"
+
stream-replace-string@2.0.0:
resolution:
{
@@ -2833,23 +3142,23 @@ packages:
}
engines: { node: ">=8" }
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
resolution:
{
- integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==,
+ integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==,
}
engines: { node: ">=12" }
- style-to-js@1.1.17:
+ style-to-js@1.1.21:
resolution:
{
- integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==,
+ integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==,
}
- style-to-object@1.0.9:
+ style-to-object@1.0.14:
resolution:
{
- integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==,
+ integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==,
}
svgo@4.0.0:
@@ -2918,20 +3227,14 @@ packages:
}
engines: { node: ">=16" }
- typescript@5.9.2:
+ typescript@5.9.3:
resolution:
{
- integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==,
+ integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==,
}
engines: { node: ">=14.17" }
hasBin: true
- ufo@1.6.1:
- resolution:
- {
- integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==,
- }
-
ufo@1.6.3:
resolution:
{
@@ -2950,22 +3253,16 @@ packages:
integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==,
}
- undici-types@7.10.0:
- resolution:
- {
- integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==,
- }
-
unified@11.0.5:
resolution:
{
integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==,
}
- unifont@0.7.3:
+ unifont@0.7.4:
resolution:
{
- integrity: sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==,
+ integrity: sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==,
}
unist-util-find-after@5.0.0:
@@ -2974,10 +3271,10 @@ packages:
integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==,
}
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
resolution:
{
- integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==,
+ integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==,
}
unist-util-modify-children@4.0.0:
@@ -3016,22 +3313,16 @@ packages:
integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==,
}
- unist-util-visit-parents@6.0.1:
- resolution:
- {
- integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==,
- }
-
unist-util-visit-parents@6.0.2:
resolution:
{
integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==,
}
- unist-util-visit@5.0.0:
+ unist-util-visit@5.1.0:
resolution:
{
- integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==,
+ integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==,
}
unstorage@1.17.4:
@@ -3099,6 +3390,13 @@ packages:
uploadthing:
optional: true
+ url-template@3.1.1:
+ resolution:
+ {
+ integrity: sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==,
+ }
+ engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 }
+
util-deprecate@1.0.2:
resolution:
{
@@ -3197,10 +3495,10 @@ packages:
}
engines: { node: ">=18" }
- wrap-ansi@9.0.0:
+ wrap-ansi@9.0.2:
resolution:
{
- integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==,
+ integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==,
}
engines: { node: ">=18" }
@@ -3217,10 +3515,10 @@ packages:
}
engines: { node: ">=12" }
- yocto-queue@1.2.1:
+ yocto-queue@1.2.2:
resolution:
{
- integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==,
+ integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==,
}
engines: { node: ">=12.20" }
@@ -3268,9 +3566,12 @@ packages:
}
snapshots:
- "@astrojs/compiler@2.13.1": {}
+ "@apidevtools/json-schema-ref-parser@13.0.5":
+ dependencies:
+ "@types/json-schema": 7.0.15
+ js-yaml: 4.1.1
- "@astrojs/internal-helpers@0.7.2": {}
+ "@astrojs/compiler@2.13.1": {}
"@astrojs/internal-helpers@0.7.5": {}
@@ -3294,53 +3595,27 @@ snapshots:
smol-toml: 1.6.0
unified: 11.0.5
unist-util-remove-position: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
unist-util-visit-parents: 6.0.2
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
- "@astrojs/markdown-remark@6.3.6":
+ "@astrojs/mdx@4.3.13(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))":
dependencies:
- "@astrojs/internal-helpers": 0.7.2
- "@astrojs/prism": 3.3.0
- github-slugger: 2.0.0
- hast-util-from-html: 2.0.3
- hast-util-to-text: 4.0.2
- import-meta-resolve: 4.1.0
- js-yaml: 4.1.0
- mdast-util-definitions: 6.0.0
- rehype-raw: 7.0.0
- rehype-stringify: 10.0.1
- remark-gfm: 4.0.1
- remark-parse: 11.0.0
- remark-rehype: 11.1.2
- remark-smartypants: 3.0.2
- shiki: 3.11.0
- smol-toml: 1.4.2
- unified: 11.0.5
- unist-util-remove-position: 5.0.0
- unist-util-visit: 5.0.0
- unist-util-visit-parents: 6.0.1
- vfile: 6.0.3
- transitivePeerDependencies:
- - supports-color
-
- "@astrojs/mdx@4.3.4(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))":
- dependencies:
- "@astrojs/markdown-remark": 6.3.6
- "@mdx-js/mdx": 3.1.0(acorn@8.15.0)
+ "@astrojs/markdown-remark": 6.3.10
+ "@mdx-js/mdx": 3.1.1
acorn: 8.15.0
- astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
+ astro: 5.17.2(rollup@4.57.1)(typescript@5.9.3)
es-module-lexer: 1.7.0
estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5
- kleur: 4.1.5
+ piccolore: 0.1.3
rehype-raw: 7.0.0
remark-gfm: 4.0.1
remark-smartypants: 3.0.2
source-map: 0.7.6
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -3349,42 +3624,42 @@ snapshots:
dependencies:
prismjs: 1.30.0
- "@astrojs/sitemap@3.5.1":
+ "@astrojs/sitemap@3.7.0":
dependencies:
- sitemap: 8.0.0
+ sitemap: 8.0.2
stream-replace-string: 2.0.0
zod: 3.25.76
- "@astrojs/starlight@0.37.6(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))":
+ "@astrojs/starlight@0.37.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))":
dependencies:
- "@astrojs/markdown-remark": 6.3.6
- "@astrojs/mdx": 4.3.4(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
- "@astrojs/sitemap": 3.5.1
- "@pagefind/default-ui": 1.3.0
+ "@astrojs/markdown-remark": 6.3.10
+ "@astrojs/mdx": 4.3.13(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))
+ "@astrojs/sitemap": 3.7.0
+ "@pagefind/default-ui": 1.4.0
"@types/hast": 3.0.4
"@types/js-yaml": 4.0.9
"@types/mdast": 4.0.4
- astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
- astro-expressive-code: 0.41.3(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2))
+ astro: 5.17.2(rollup@4.57.1)(typescript@5.9.3)
+ astro-expressive-code: 0.41.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))
bcp-47: 2.1.0
hast-util-from-html: 2.0.3
hast-util-select: 6.0.4
hast-util-to-string: 3.0.1
hastscript: 9.0.1
i18next: 23.16.8
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
klona: 2.0.6
- magic-string: 0.30.18
+ magic-string: 0.30.21
mdast-util-directive: 3.1.0
mdast-util-to-markdown: 2.1.2
mdast-util-to-string: 4.0.0
- pagefind: 1.3.0
+ pagefind: 1.4.0
rehype: 13.0.2
rehype-format: 5.0.1
remark-directive: 3.0.1
ultrahtml: 1.6.0
unified: 11.0.5
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -3396,11 +3671,17 @@ snapshots:
dlv: 1.1.3
dset: 3.1.4
is-docker: 3.0.0
- is-wsl: 3.1.0
+ is-wsl: 3.1.1
which-pm-runs: 1.1.0
transitivePeerDependencies:
- supports-color
+ "@babel/code-frame@7.29.0":
+ dependencies:
+ "@babel/helper-validator-identifier": 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
"@babel/helper-string-parser@7.27.1": {}
"@babel/helper-validator-identifier@7.28.5": {}
@@ -3409,7 +3690,7 @@ snapshots:
dependencies:
"@babel/types": 7.29.0
- "@babel/runtime@7.28.3": {}
+ "@babel/runtime@7.28.6": {}
"@babel/types@7.29.0":
dependencies:
@@ -3420,120 +3701,200 @@ snapshots:
dependencies:
fontkitten: 1.0.2
- "@ctrl/tinycolor@4.1.0": {}
+ "@ctrl/tinycolor@4.2.0": {}
"@emnapi/runtime@1.8.1":
dependencies:
tslib: 2.8.1
optional: true
- "@esbuild/aix-ppc64@0.25.9":
+ "@esbuild/aix-ppc64@0.25.12":
optional: true
- "@esbuild/android-arm64@0.25.9":
+ "@esbuild/aix-ppc64@0.27.3":
optional: true
- "@esbuild/android-arm@0.25.9":
+ "@esbuild/android-arm64@0.25.12":
optional: true
- "@esbuild/android-x64@0.25.9":
+ "@esbuild/android-arm64@0.27.3":
optional: true
- "@esbuild/darwin-arm64@0.25.9":
+ "@esbuild/android-arm@0.25.12":
optional: true
- "@esbuild/darwin-x64@0.25.9":
+ "@esbuild/android-arm@0.27.3":
optional: true
- "@esbuild/freebsd-arm64@0.25.9":
+ "@esbuild/android-x64@0.25.12":
optional: true
- "@esbuild/freebsd-x64@0.25.9":
+ "@esbuild/android-x64@0.27.3":
optional: true
- "@esbuild/linux-arm64@0.25.9":
+ "@esbuild/darwin-arm64@0.25.12":
optional: true
- "@esbuild/linux-arm@0.25.9":
+ "@esbuild/darwin-arm64@0.27.3":
optional: true
- "@esbuild/linux-ia32@0.25.9":
+ "@esbuild/darwin-x64@0.25.12":
optional: true
- "@esbuild/linux-loong64@0.25.9":
+ "@esbuild/darwin-x64@0.27.3":
optional: true
- "@esbuild/linux-mips64el@0.25.9":
+ "@esbuild/freebsd-arm64@0.25.12":
optional: true
- "@esbuild/linux-ppc64@0.25.9":
+ "@esbuild/freebsd-arm64@0.27.3":
optional: true
- "@esbuild/linux-riscv64@0.25.9":
+ "@esbuild/freebsd-x64@0.25.12":
optional: true
- "@esbuild/linux-s390x@0.25.9":
+ "@esbuild/freebsd-x64@0.27.3":
optional: true
- "@esbuild/linux-x64@0.25.9":
+ "@esbuild/linux-arm64@0.25.12":
optional: true
- "@esbuild/netbsd-arm64@0.25.9":
+ "@esbuild/linux-arm64@0.27.3":
optional: true
- "@esbuild/netbsd-x64@0.25.9":
+ "@esbuild/linux-arm@0.25.12":
optional: true
- "@esbuild/openbsd-arm64@0.25.9":
+ "@esbuild/linux-arm@0.27.3":
optional: true
- "@esbuild/openbsd-x64@0.25.9":
+ "@esbuild/linux-ia32@0.25.12":
optional: true
- "@esbuild/openharmony-arm64@0.25.9":
+ "@esbuild/linux-ia32@0.27.3":
optional: true
- "@esbuild/sunos-x64@0.25.9":
+ "@esbuild/linux-loong64@0.25.12":
optional: true
- "@esbuild/win32-arm64@0.25.9":
+ "@esbuild/linux-loong64@0.27.3":
optional: true
- "@esbuild/win32-ia32@0.25.9":
+ "@esbuild/linux-mips64el@0.25.12":
optional: true
- "@esbuild/win32-x64@0.25.9":
+ "@esbuild/linux-mips64el@0.27.3":
optional: true
- "@expressive-code/core@0.41.3":
+ "@esbuild/linux-ppc64@0.25.12":
+ optional: true
+
+ "@esbuild/linux-ppc64@0.27.3":
+ optional: true
+
+ "@esbuild/linux-riscv64@0.25.12":
+ optional: true
+
+ "@esbuild/linux-riscv64@0.27.3":
+ optional: true
+
+ "@esbuild/linux-s390x@0.25.12":
+ optional: true
+
+ "@esbuild/linux-s390x@0.27.3":
+ optional: true
+
+ "@esbuild/linux-x64@0.25.12":
+ optional: true
+
+ "@esbuild/linux-x64@0.27.3":
+ optional: true
+
+ "@esbuild/netbsd-arm64@0.25.12":
+ optional: true
+
+ "@esbuild/netbsd-arm64@0.27.3":
+ optional: true
+
+ "@esbuild/netbsd-x64@0.25.12":
+ optional: true
+
+ "@esbuild/netbsd-x64@0.27.3":
+ optional: true
+
+ "@esbuild/openbsd-arm64@0.25.12":
+ optional: true
+
+ "@esbuild/openbsd-arm64@0.27.3":
+ optional: true
+
+ "@esbuild/openbsd-x64@0.25.12":
+ optional: true
+
+ "@esbuild/openbsd-x64@0.27.3":
+ optional: true
+
+ "@esbuild/openharmony-arm64@0.25.12":
+ optional: true
+
+ "@esbuild/openharmony-arm64@0.27.3":
+ optional: true
+
+ "@esbuild/sunos-x64@0.25.12":
+ optional: true
+
+ "@esbuild/sunos-x64@0.27.3":
+ optional: true
+
+ "@esbuild/win32-arm64@0.25.12":
+ optional: true
+
+ "@esbuild/win32-arm64@0.27.3":
+ optional: true
+
+ "@esbuild/win32-ia32@0.25.12":
+ optional: true
+
+ "@esbuild/win32-ia32@0.27.3":
+ optional: true
+
+ "@esbuild/win32-x64@0.25.12":
+ optional: true
+
+ "@esbuild/win32-x64@0.27.3":
+ optional: true
+
+ "@expressive-code/core@0.41.6":
dependencies:
- "@ctrl/tinycolor": 4.1.0
+ "@ctrl/tinycolor": 4.2.0
hast-util-select: 6.0.4
hast-util-to-html: 9.0.5
hast-util-to-text: 4.0.2
hastscript: 9.0.1
postcss: 8.5.6
postcss-nested: 6.2.0(postcss@8.5.6)
- unist-util-visit: 5.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-visit: 5.1.0
+ unist-util-visit-parents: 6.0.2
- "@expressive-code/plugin-frames@0.41.3":
+ "@expressive-code/plugin-frames@0.41.6":
dependencies:
- "@expressive-code/core": 0.41.3
+ "@expressive-code/core": 0.41.6
- "@expressive-code/plugin-shiki@0.41.3":
+ "@expressive-code/plugin-shiki@0.41.6":
dependencies:
- "@expressive-code/core": 0.41.3
- shiki: 3.11.0
+ "@expressive-code/core": 0.41.6
+ shiki: 3.22.0
- "@expressive-code/plugin-text-markers@0.41.3":
+ "@expressive-code/plugin-text-markers@0.41.6":
dependencies:
- "@expressive-code/core": 0.41.3
+ "@expressive-code/core": 0.41.6
"@fontsource/inter@5.2.8": {}
"@fontsource/rubik@5.2.8": {}
+ "@humanwhocodes/momoa@2.0.4": {}
+
"@img/colour@1.0.0": {}
"@img/sharp-darwin-arm64@0.34.5":
@@ -3632,12 +3993,13 @@ snapshots:
"@jridgewell/sourcemap-codec@1.5.5": {}
- "@mdx-js/mdx@3.1.0(acorn@8.15.0)":
+ "@mdx-js/mdx@3.1.1":
dependencies:
"@types/estree": 1.0.8
"@types/estree-jsx": 1.0.5
"@types/hast": 3.0.4
"@types/mdx": 2.0.13
+ acorn: 8.15.0
collapse-white-space: 2.1.0
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
@@ -3649,112 +4011,144 @@ snapshots:
recma-jsx: 1.0.1(acorn@8.15.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
- remark-mdx: 3.1.0
+ remark-mdx: 3.1.1
remark-parse: 11.0.0
remark-rehype: 11.1.2
source-map: 0.7.6
unified: 11.0.5
unist-util-position-from-estree: 2.0.0
unist-util-stringify-position: 4.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
transitivePeerDependencies:
- - acorn
- supports-color
"@oslojs/encoding@1.1.0": {}
- "@pagefind/darwin-arm64@1.3.0":
+ "@pagefind/darwin-arm64@1.4.0":
optional: true
- "@pagefind/darwin-x64@1.3.0":
+ "@pagefind/darwin-x64@1.4.0":
optional: true
- "@pagefind/default-ui@1.3.0": {}
+ "@pagefind/default-ui@1.4.0": {}
- "@pagefind/linux-arm64@1.3.0":
+ "@pagefind/freebsd-x64@1.4.0":
optional: true
- "@pagefind/linux-x64@1.3.0":
+ "@pagefind/linux-arm64@1.4.0":
optional: true
- "@pagefind/windows-x64@1.3.0":
+ "@pagefind/linux-x64@1.4.0":
optional: true
- "@rollup/pluginutils@5.3.0(rollup@4.48.1)":
+ "@pagefind/windows-x64@1.4.0":
+ optional: true
+
+ "@readme/better-ajv-errors@2.4.0(ajv@8.18.0)":
+ dependencies:
+ "@babel/code-frame": 7.29.0
+ "@babel/runtime": 7.28.6
+ "@humanwhocodes/momoa": 2.0.4
+ ajv: 8.18.0
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+ picocolors: 1.1.1
+
+ "@readme/openapi-parser@4.1.2(openapi-types@12.1.3)":
+ dependencies:
+ "@apidevtools/json-schema-ref-parser": 13.0.5
+ "@readme/better-ajv-errors": 2.4.0(ajv@8.18.0)
+ "@readme/openapi-schemas": 3.1.0
+ "@types/json-schema": 7.0.15
+ ajv: 8.18.0
+ ajv-draft-04: 1.0.0(ajv@8.18.0)
+ openapi-types: 12.1.3
+
+ "@readme/openapi-schemas@3.1.0": {}
+
+ "@rollup/pluginutils@5.3.0(rollup@4.57.1)":
dependencies:
"@types/estree": 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.48.1
+ rollup: 4.57.1
- "@rollup/rollup-android-arm-eabi@4.48.1":
+ "@rollup/rollup-android-arm-eabi@4.57.1":
optional: true
- "@rollup/rollup-android-arm64@4.48.1":
+ "@rollup/rollup-android-arm64@4.57.1":
optional: true
- "@rollup/rollup-darwin-arm64@4.48.1":
+ "@rollup/rollup-darwin-arm64@4.57.1":
optional: true
- "@rollup/rollup-darwin-x64@4.48.1":
+ "@rollup/rollup-darwin-x64@4.57.1":
optional: true
- "@rollup/rollup-freebsd-arm64@4.48.1":
+ "@rollup/rollup-freebsd-arm64@4.57.1":
optional: true
- "@rollup/rollup-freebsd-x64@4.48.1":
+ "@rollup/rollup-freebsd-x64@4.57.1":
optional: true
- "@rollup/rollup-linux-arm-gnueabihf@4.48.1":
+ "@rollup/rollup-linux-arm-gnueabihf@4.57.1":
optional: true
- "@rollup/rollup-linux-arm-musleabihf@4.48.1":
+ "@rollup/rollup-linux-arm-musleabihf@4.57.1":
optional: true
- "@rollup/rollup-linux-arm64-gnu@4.48.1":
+ "@rollup/rollup-linux-arm64-gnu@4.57.1":
optional: true
- "@rollup/rollup-linux-arm64-musl@4.48.1":
+ "@rollup/rollup-linux-arm64-musl@4.57.1":
optional: true
- "@rollup/rollup-linux-loongarch64-gnu@4.48.1":
+ "@rollup/rollup-linux-loong64-gnu@4.57.1":
optional: true
- "@rollup/rollup-linux-ppc64-gnu@4.48.1":
+ "@rollup/rollup-linux-loong64-musl@4.57.1":
optional: true
- "@rollup/rollup-linux-riscv64-gnu@4.48.1":
+ "@rollup/rollup-linux-ppc64-gnu@4.57.1":
optional: true
- "@rollup/rollup-linux-riscv64-musl@4.48.1":
+ "@rollup/rollup-linux-ppc64-musl@4.57.1":
optional: true
- "@rollup/rollup-linux-s390x-gnu@4.48.1":
+ "@rollup/rollup-linux-riscv64-gnu@4.57.1":
optional: true
- "@rollup/rollup-linux-x64-gnu@4.48.1":
+ "@rollup/rollup-linux-riscv64-musl@4.57.1":
optional: true
- "@rollup/rollup-linux-x64-musl@4.48.1":
+ "@rollup/rollup-linux-s390x-gnu@4.57.1":
optional: true
- "@rollup/rollup-win32-arm64-msvc@4.48.1":
+ "@rollup/rollup-linux-x64-gnu@4.57.1":
optional: true
- "@rollup/rollup-win32-ia32-msvc@4.48.1":
+ "@rollup/rollup-linux-x64-musl@4.57.1":
optional: true
- "@rollup/rollup-win32-x64-msvc@4.48.1":
+ "@rollup/rollup-openbsd-x64@4.57.1":
optional: true
- "@shikijs/core@3.11.0":
- dependencies:
- "@shikijs/types": 3.11.0
- "@shikijs/vscode-textmate": 10.0.2
- "@types/hast": 3.0.4
- hast-util-to-html: 9.0.5
+ "@rollup/rollup-openharmony-arm64@4.57.1":
+ optional: true
+
+ "@rollup/rollup-win32-arm64-msvc@4.57.1":
+ optional: true
+
+ "@rollup/rollup-win32-ia32-msvc@4.57.1":
+ optional: true
+
+ "@rollup/rollup-win32-x64-gnu@4.57.1":
+ optional: true
+
+ "@rollup/rollup-win32-x64-msvc@4.57.1":
+ optional: true
"@shikijs/core@3.22.0":
dependencies:
@@ -3763,49 +4157,25 @@ snapshots:
"@types/hast": 3.0.4
hast-util-to-html: 9.0.5
- "@shikijs/engine-javascript@3.11.0":
- dependencies:
- "@shikijs/types": 3.11.0
- "@shikijs/vscode-textmate": 10.0.2
- oniguruma-to-es: 4.3.3
-
"@shikijs/engine-javascript@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
oniguruma-to-es: 4.3.4
- "@shikijs/engine-oniguruma@3.11.0":
- dependencies:
- "@shikijs/types": 3.11.0
- "@shikijs/vscode-textmate": 10.0.2
-
"@shikijs/engine-oniguruma@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
"@shikijs/vscode-textmate": 10.0.2
- "@shikijs/langs@3.11.0":
- dependencies:
- "@shikijs/types": 3.11.0
-
"@shikijs/langs@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
- "@shikijs/themes@3.11.0":
- dependencies:
- "@shikijs/types": 3.11.0
-
"@shikijs/themes@3.22.0":
dependencies:
"@shikijs/types": 3.22.0
- "@shikijs/types@3.11.0":
- dependencies:
- "@shikijs/vscode-textmate": 10.0.2
- "@types/hast": 3.0.4
-
"@shikijs/types@3.22.0":
dependencies:
"@shikijs/vscode-textmate": 10.0.2
@@ -3829,6 +4199,8 @@ snapshots:
"@types/js-yaml@4.0.9": {}
+ "@types/json-schema@7.0.15": {}
+
"@types/mdast@4.0.4":
dependencies:
"@types/unist": 3.0.3
@@ -3843,13 +4215,9 @@ snapshots:
"@types/node@17.0.45": {}
- "@types/node@24.3.0":
- dependencies:
- undici-types: 7.10.0
-
"@types/sax@1.2.7":
dependencies:
- "@types/node": 24.3.0
+ "@types/node": 17.0.45
"@types/unist@2.0.11": {}
@@ -3863,15 +4231,26 @@ snapshots:
acorn@8.15.0: {}
+ ajv-draft-04@1.0.0(ajv@8.18.0):
+ optionalDependencies:
+ ajv: 8.18.0
+
+ ajv@8.18.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
ansi-regex@5.0.1: {}
- ansi-regex@6.2.0: {}
+ ansi-regex@6.2.2: {}
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
anymatch@3.1.3:
dependencies:
@@ -3888,12 +4267,12 @@ snapshots:
astring@1.9.0: {}
- astro-expressive-code@0.41.3(astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)):
+ astro-expressive-code@0.41.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3)):
dependencies:
- astro: 5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2)
- rehype-expressive-code: 0.41.3
+ astro: 5.17.2(rollup@4.57.1)(typescript@5.9.3)
+ rehype-expressive-code: 0.41.6
- astro@5.17.1(@types/node@24.3.0)(rollup@4.48.1)(typescript@5.9.2):
+ astro@5.17.2(rollup@4.57.1)(typescript@5.9.3):
dependencies:
"@astrojs/compiler": 2.13.1
"@astrojs/internal-helpers": 0.7.5
@@ -3901,7 +4280,7 @@ snapshots:
"@astrojs/telemetry": 3.3.0
"@capsizecss/unpack": 4.0.0
"@oslojs/encoding": 1.1.0
- "@rollup/pluginutils": 5.3.0(rollup@4.48.1)
+ "@rollup/pluginutils": 5.3.0(rollup@4.57.1)
acorn: 8.15.0
aria-query: 5.3.2
axobject-query: 4.1.0
@@ -3918,7 +4297,7 @@ snapshots:
dlv: 1.1.3
dset: 3.1.4
es-module-lexer: 1.7.0
- esbuild: 0.25.9
+ esbuild: 0.27.3
estree-walker: 3.0.3
flattie: 1.1.1
fontace: 0.4.1
@@ -3944,20 +4323,20 @@ snapshots:
svgo: 4.0.0
tinyexec: 1.0.2
tinyglobby: 0.2.15
- tsconfck: 3.1.6(typescript@5.9.2)
+ tsconfck: 3.1.6(typescript@5.9.3)
ultrahtml: 1.6.0
- unifont: 0.7.3
- unist-util-visit: 5.0.0
+ unifont: 0.7.4
+ unist-util-visit: 5.1.0
unstorage: 1.17.4
vfile: 6.0.3
- vite: 6.4.1(@types/node@24.3.0)
- vitefu: 1.1.1(vite@6.4.1(@types/node@24.3.0))
+ vite: 6.4.1
+ vitefu: 1.1.1(vite@6.4.1)
xxhash-wasm: 1.1.0
yargs-parser: 21.1.1
yocto-spinner: 0.2.3
zod: 3.25.76
zod-to-json-schema: 3.25.1(zod@3.25.76)
- zod-to-ts: 1.2.0(typescript@5.9.2)(zod@3.25.76)
+ zod-to-ts: 1.2.0(typescript@5.9.3)(zod@3.25.76)
optionalDependencies:
sharp: 0.34.5
transitivePeerDependencies:
@@ -4015,18 +4394,18 @@ snapshots:
dependencies:
ansi-align: 3.0.1
camelcase: 8.0.0
- chalk: 5.6.0
+ chalk: 5.6.2
cli-boxes: 3.0.0
string-width: 7.2.0
type-fest: 4.41.0
widest-line: 5.0.0
- wrap-ansi: 9.0.0
+ wrap-ansi: 9.0.2
camelcase@8.0.0: {}
ccount@2.0.1: {}
- chalk@5.6.0: {}
+ chalk@5.6.2: {}
character-entities-html4@2.1.0: {}
@@ -4070,7 +4449,7 @@ snapshots:
domutils: 3.2.2
nth-check: 2.1.1
- css-selector-parser@3.1.3: {}
+ css-selector-parser@3.3.0: {}
css-tree@2.2.1:
dependencies:
@@ -4090,15 +4469,11 @@ snapshots:
dependencies:
css-tree: 2.2.1
- debug@4.4.1:
- dependencies:
- ms: 2.1.3
-
debug@4.4.3:
dependencies:
ms: 2.1.3
- decode-named-character-reference@1.2.0:
+ decode-named-character-reference@1.3.0:
dependencies:
character-entities: 2.0.2
@@ -4146,7 +4521,7 @@ snapshots:
dset@3.1.4: {}
- emoji-regex@10.4.0: {}
+ emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
@@ -4170,34 +4545,63 @@ snapshots:
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
- esbuild@0.25.9:
+ esbuild@0.25.12:
optionalDependencies:
- "@esbuild/aix-ppc64": 0.25.9
- "@esbuild/android-arm": 0.25.9
- "@esbuild/android-arm64": 0.25.9
- "@esbuild/android-x64": 0.25.9
- "@esbuild/darwin-arm64": 0.25.9
- "@esbuild/darwin-x64": 0.25.9
- "@esbuild/freebsd-arm64": 0.25.9
- "@esbuild/freebsd-x64": 0.25.9
- "@esbuild/linux-arm": 0.25.9
- "@esbuild/linux-arm64": 0.25.9
- "@esbuild/linux-ia32": 0.25.9
- "@esbuild/linux-loong64": 0.25.9
- "@esbuild/linux-mips64el": 0.25.9
- "@esbuild/linux-ppc64": 0.25.9
- "@esbuild/linux-riscv64": 0.25.9
- "@esbuild/linux-s390x": 0.25.9
- "@esbuild/linux-x64": 0.25.9
- "@esbuild/netbsd-arm64": 0.25.9
- "@esbuild/netbsd-x64": 0.25.9
- "@esbuild/openbsd-arm64": 0.25.9
- "@esbuild/openbsd-x64": 0.25.9
- "@esbuild/openharmony-arm64": 0.25.9
- "@esbuild/sunos-x64": 0.25.9
- "@esbuild/win32-arm64": 0.25.9
- "@esbuild/win32-ia32": 0.25.9
- "@esbuild/win32-x64": 0.25.9
+ "@esbuild/aix-ppc64": 0.25.12
+ "@esbuild/android-arm": 0.25.12
+ "@esbuild/android-arm64": 0.25.12
+ "@esbuild/android-x64": 0.25.12
+ "@esbuild/darwin-arm64": 0.25.12
+ "@esbuild/darwin-x64": 0.25.12
+ "@esbuild/freebsd-arm64": 0.25.12
+ "@esbuild/freebsd-x64": 0.25.12
+ "@esbuild/linux-arm": 0.25.12
+ "@esbuild/linux-arm64": 0.25.12
+ "@esbuild/linux-ia32": 0.25.12
+ "@esbuild/linux-loong64": 0.25.12
+ "@esbuild/linux-mips64el": 0.25.12
+ "@esbuild/linux-ppc64": 0.25.12
+ "@esbuild/linux-riscv64": 0.25.12
+ "@esbuild/linux-s390x": 0.25.12
+ "@esbuild/linux-x64": 0.25.12
+ "@esbuild/netbsd-arm64": 0.25.12
+ "@esbuild/netbsd-x64": 0.25.12
+ "@esbuild/openbsd-arm64": 0.25.12
+ "@esbuild/openbsd-x64": 0.25.12
+ "@esbuild/openharmony-arm64": 0.25.12
+ "@esbuild/sunos-x64": 0.25.12
+ "@esbuild/win32-arm64": 0.25.12
+ "@esbuild/win32-ia32": 0.25.12
+ "@esbuild/win32-x64": 0.25.12
+
+ esbuild@0.27.3:
+ optionalDependencies:
+ "@esbuild/aix-ppc64": 0.27.3
+ "@esbuild/android-arm": 0.27.3
+ "@esbuild/android-arm64": 0.27.3
+ "@esbuild/android-x64": 0.27.3
+ "@esbuild/darwin-arm64": 0.27.3
+ "@esbuild/darwin-x64": 0.27.3
+ "@esbuild/freebsd-arm64": 0.27.3
+ "@esbuild/freebsd-x64": 0.27.3
+ "@esbuild/linux-arm": 0.27.3
+ "@esbuild/linux-arm64": 0.27.3
+ "@esbuild/linux-ia32": 0.27.3
+ "@esbuild/linux-loong64": 0.27.3
+ "@esbuild/linux-mips64el": 0.27.3
+ "@esbuild/linux-ppc64": 0.27.3
+ "@esbuild/linux-riscv64": 0.27.3
+ "@esbuild/linux-s390x": 0.27.3
+ "@esbuild/linux-x64": 0.27.3
+ "@esbuild/netbsd-arm64": 0.27.3
+ "@esbuild/netbsd-x64": 0.27.3
+ "@esbuild/openbsd-arm64": 0.27.3
+ "@esbuild/openbsd-x64": 0.27.3
+ "@esbuild/openharmony-arm64": 0.27.3
+ "@esbuild/sunos-x64": 0.27.3
+ "@esbuild/win32-arm64": 0.27.3
+ "@esbuild/win32-ia32": 0.27.3
+ "@esbuild/win32-x64": 0.27.3
escape-string-regexp@5.0.0: {}
@@ -4236,17 +4640,21 @@ snapshots:
dependencies:
"@types/estree": 1.0.8
- eventemitter3@5.0.1: {}
+ eventemitter3@5.0.4: {}
- expressive-code@0.41.3:
+ expressive-code@0.41.6:
dependencies:
- "@expressive-code/core": 0.41.3
- "@expressive-code/plugin-frames": 0.41.3
- "@expressive-code/plugin-shiki": 0.41.3
- "@expressive-code/plugin-text-markers": 0.41.3
+ "@expressive-code/core": 0.41.6
+ "@expressive-code/plugin-frames": 0.41.6
+ "@expressive-code/plugin-shiki": 0.41.6
+ "@expressive-code/plugin-text-markers": 0.41.6
extend@3.0.2: {}
+ fast-deep-equal@3.1.3: {}
+
+ fast-uri@3.1.0: {}
+
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
@@ -4264,7 +4672,7 @@ snapshots:
fsevents@2.3.3:
optional: true
- get-east-asian-width@1.3.0: {}
+ get-east-asian-width@1.4.0: {}
github-slugger@2.0.0: {}
@@ -4293,7 +4701,7 @@ snapshots:
hast-util-phrasing: 3.0.1
hast-util-whitespace: 3.0.0
html-whitespace-sensitive-tag-names: 3.0.1
- unist-util-visit-parents: 6.0.1
+ unist-util-visit-parents: 6.0.2
hast-util-from-html@2.0.3:
dependencies:
@@ -4333,7 +4741,7 @@ snapshots:
hast-util-embedded: 3.0.0
hast-util-is-element: 3.0.0
hast-util-whitespace: 3.0.0
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
hast-util-parse-selector@4.0.0:
dependencies:
@@ -4353,12 +4761,12 @@ snapshots:
"@types/unist": 3.0.3
"@ungap/structured-clone": 1.3.0
hast-util-from-parse5: 8.0.3
- hast-util-to-parse5: 8.0.0
+ hast-util-to-parse5: 8.0.1
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
parse5: 7.3.0
unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
web-namespaces: 2.0.1
zwitch: 2.0.4
@@ -4369,7 +4777,7 @@ snapshots:
"@types/unist": 3.0.3
bcp-47-match: 2.0.3
comma-separated-tokens: 2.0.3
- css-selector-parser: 3.1.3
+ css-selector-parser: 3.3.0
devlop: 1.1.0
direction: 2.0.1
hast-util-has-property: 3.0.0
@@ -4378,7 +4786,7 @@ snapshots:
nth-check: 2.1.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
zwitch: 2.0.4
hast-util-to-estree@3.1.3:
@@ -4396,7 +4804,7 @@ snapshots:
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-js: 1.1.17
+ style-to-js: 1.1.21
unist-util-position: 5.0.0
zwitch: 2.0.4
transitivePeerDependencies:
@@ -4410,7 +4818,7 @@ snapshots:
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
@@ -4430,18 +4838,18 @@ snapshots:
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-js: 1.1.17
+ style-to-js: 1.1.21
unist-util-position: 5.0.0
vfile-message: 4.0.3
transitivePeerDependencies:
- supports-color
- hast-util-to-parse5@8.0.0:
+ hast-util-to-parse5@8.0.1:
dependencies:
"@types/hast": 3.0.4
comma-separated-tokens: 2.0.3
devlop: 1.1.0
- property-information: 6.5.0
+ property-information: 7.1.0
space-separated-tokens: 2.0.2
web-namespaces: 2.0.1
zwitch: 2.0.4
@@ -4479,13 +4887,11 @@ snapshots:
i18next@23.16.8:
dependencies:
- "@babel/runtime": 7.28.3
-
- import-meta-resolve@4.1.0: {}
+ "@babel/runtime": 7.28.6
import-meta-resolve@4.2.0: {}
- inline-style-parser@0.2.4: {}
+ inline-style-parser@0.2.7: {}
iron-webcrypto@1.2.1: {}
@@ -4510,31 +4916,29 @@ snapshots:
is-plain-obj@4.1.0: {}
- is-wsl@3.1.0:
+ is-wsl@3.1.1:
dependencies:
is-inside-container: 1.0.0
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
+ js-tokens@4.0.0: {}
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
- kleur@3.0.3: {}
+ json-schema-traverse@1.0.0: {}
- kleur@4.1.5: {}
+ jsonpointer@5.0.1: {}
+
+ kleur@3.0.3: {}
klona@2.0.6: {}
+ leven@3.1.0: {}
+
longest-streak@3.1.0: {}
- lru-cache@11.2.5: {}
-
- magic-string@0.30.18:
- dependencies:
- "@jridgewell/sourcemap-codec": 1.5.5
+ lru-cache@11.2.6: {}
magic-string@0.30.21:
dependencies:
@@ -4554,7 +4958,7 @@ snapshots:
dependencies:
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
mdast-util-directive@3.1.0:
dependencies:
@@ -4566,7 +4970,7 @@ snapshots:
mdast-util-to-markdown: 2.1.2
parse-entities: 4.0.2
stringify-entities: 4.0.4
- unist-util-visit-parents: 6.0.1
+ unist-util-visit-parents: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -4574,14 +4978,14 @@ snapshots:
dependencies:
"@types/mdast": 4.0.4
escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
mdast-util-from-markdown@2.0.2:
dependencies:
"@types/mdast": 4.0.4
"@types/unist": 3.0.3
- decode-named-character-reference: 1.2.0
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.2
@@ -4703,9 +5107,9 @@ snapshots:
mdast-util-phrasing@4.1.0:
dependencies:
"@types/mdast": 4.0.4
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- mdast-util-to-hast@13.2.0:
+ mdast-util-to-hast@13.2.1:
dependencies:
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
@@ -4714,7 +5118,7 @@ snapshots:
micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
vfile: 6.0.3
mdast-util-to-markdown@2.1.2:
@@ -4726,7 +5130,7 @@ snapshots:
mdast-util-to-string: 4.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
@@ -4739,7 +5143,7 @@ snapshots:
micromark-core-commonmark@2.0.3:
dependencies:
- decode-named-character-reference: 1.2.0
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
@@ -4945,7 +5349,7 @@ snapshots:
micromark-util-decode-string@2.0.1:
dependencies:
- decode-named-character-reference: 1.2.0
+ decode-named-character-reference: 1.3.0
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
@@ -4992,8 +5396,8 @@ snapshots:
micromark@4.0.2:
dependencies:
"@types/debug": 4.1.12
- debug: 4.4.1
- decode-named-character-reference: 1.2.0
+ debug: 4.4.3
+ decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
@@ -5037,51 +5441,48 @@ snapshots:
dependencies:
destr: 2.0.5
node-fetch-native: 1.6.7
- ufo: 1.6.1
+ ufo: 1.6.3
ohash@2.0.11: {}
oniguruma-parser@0.12.1: {}
- oniguruma-to-es@4.3.3:
- dependencies:
- oniguruma-parser: 0.12.1
- regex: 6.0.1
- regex-recursion: 6.0.2
-
oniguruma-to-es@4.3.4:
dependencies:
oniguruma-parser: 0.12.1
- regex: 6.0.1
+ regex: 6.1.0
regex-recursion: 6.0.2
+ openapi-types@12.1.3: {}
+
p-limit@6.2.0:
dependencies:
- yocto-queue: 1.2.1
+ yocto-queue: 1.2.2
p-queue@8.1.1:
dependencies:
- eventemitter3: 5.0.1
+ eventemitter3: 5.0.4
p-timeout: 6.1.4
p-timeout@6.1.4: {}
package-manager-detector@1.6.0: {}
- pagefind@1.3.0:
+ pagefind@1.4.0:
optionalDependencies:
- "@pagefind/darwin-arm64": 1.3.0
- "@pagefind/darwin-x64": 1.3.0
- "@pagefind/linux-arm64": 1.3.0
- "@pagefind/linux-x64": 1.3.0
- "@pagefind/windows-x64": 1.3.0
+ "@pagefind/darwin-arm64": 1.4.0
+ "@pagefind/darwin-x64": 1.4.0
+ "@pagefind/freebsd-x64": 1.4.0
+ "@pagefind/linux-arm64": 1.4.0
+ "@pagefind/linux-x64": 1.4.0
+ "@pagefind/windows-x64": 1.4.0
parse-entities@4.0.2:
dependencies:
"@types/unist": 2.0.11
character-entities-legacy: 3.0.0
character-reference-invalid: 2.0.1
- decode-named-character-reference: 1.2.0
+ decode-named-character-reference: 1.3.0
is-alphanumerical: 2.0.1
is-decimal: 2.0.1
is-hexadecimal: 2.0.1
@@ -5130,8 +5531,6 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
- property-information@6.5.0: {}
-
property-information@7.1.0: {}
radix3@1.1.2: {}
@@ -5173,13 +5572,13 @@ snapshots:
regex-utilities@2.3.0: {}
- regex@6.0.1:
+ regex@6.1.0:
dependencies:
regex-utilities: 2.3.0
- rehype-expressive-code@0.41.3:
+ rehype-expressive-code@0.41.6:
dependencies:
- expressive-code: 0.41.3
+ expressive-code: 0.41.6
rehype-format@5.0.1:
dependencies:
@@ -5239,7 +5638,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- remark-mdx@3.1.0:
+ remark-mdx@3.1.1:
dependencies:
mdast-util-mdx: 3.0.0
micromark-extension-mdxjs: 3.0.0
@@ -5259,7 +5658,7 @@ snapshots:
dependencies:
"@types/hast": 3.0.4
"@types/mdast": 4.0.4
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
unified: 11.0.5
vfile: 6.0.3
@@ -5268,7 +5667,7 @@ snapshots:
retext: 9.0.0
retext-smartypants: 6.2.0
unified: 11.0.5
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
remark-stringify@11.0.0:
dependencies:
@@ -5276,6 +5675,8 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
+ require-from-string@2.0.2: {}
+
retext-latin@4.0.0:
dependencies:
"@types/nlcst": 2.0.3
@@ -5286,7 +5687,7 @@ snapshots:
dependencies:
"@types/nlcst": 2.0.3
nlcst-to-string: 4.0.0
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
retext-stringify@4.0.0:
dependencies:
@@ -5301,33 +5702,38 @@ snapshots:
retext-stringify: 4.0.0
unified: 11.0.5
- rollup@4.48.1:
+ rollup@4.57.1:
dependencies:
"@types/estree": 1.0.8
optionalDependencies:
- "@rollup/rollup-android-arm-eabi": 4.48.1
- "@rollup/rollup-android-arm64": 4.48.1
- "@rollup/rollup-darwin-arm64": 4.48.1
- "@rollup/rollup-darwin-x64": 4.48.1
- "@rollup/rollup-freebsd-arm64": 4.48.1
- "@rollup/rollup-freebsd-x64": 4.48.1
- "@rollup/rollup-linux-arm-gnueabihf": 4.48.1
- "@rollup/rollup-linux-arm-musleabihf": 4.48.1
- "@rollup/rollup-linux-arm64-gnu": 4.48.1
- "@rollup/rollup-linux-arm64-musl": 4.48.1
- "@rollup/rollup-linux-loongarch64-gnu": 4.48.1
- "@rollup/rollup-linux-ppc64-gnu": 4.48.1
- "@rollup/rollup-linux-riscv64-gnu": 4.48.1
- "@rollup/rollup-linux-riscv64-musl": 4.48.1
- "@rollup/rollup-linux-s390x-gnu": 4.48.1
- "@rollup/rollup-linux-x64-gnu": 4.48.1
- "@rollup/rollup-linux-x64-musl": 4.48.1
- "@rollup/rollup-win32-arm64-msvc": 4.48.1
- "@rollup/rollup-win32-ia32-msvc": 4.48.1
- "@rollup/rollup-win32-x64-msvc": 4.48.1
+ "@rollup/rollup-android-arm-eabi": 4.57.1
+ "@rollup/rollup-android-arm64": 4.57.1
+ "@rollup/rollup-darwin-arm64": 4.57.1
+ "@rollup/rollup-darwin-x64": 4.57.1
+ "@rollup/rollup-freebsd-arm64": 4.57.1
+ "@rollup/rollup-freebsd-x64": 4.57.1
+ "@rollup/rollup-linux-arm-gnueabihf": 4.57.1
+ "@rollup/rollup-linux-arm-musleabihf": 4.57.1
+ "@rollup/rollup-linux-arm64-gnu": 4.57.1
+ "@rollup/rollup-linux-arm64-musl": 4.57.1
+ "@rollup/rollup-linux-loong64-gnu": 4.57.1
+ "@rollup/rollup-linux-loong64-musl": 4.57.1
+ "@rollup/rollup-linux-ppc64-gnu": 4.57.1
+ "@rollup/rollup-linux-ppc64-musl": 4.57.1
+ "@rollup/rollup-linux-riscv64-gnu": 4.57.1
+ "@rollup/rollup-linux-riscv64-musl": 4.57.1
+ "@rollup/rollup-linux-s390x-gnu": 4.57.1
+ "@rollup/rollup-linux-x64-gnu": 4.57.1
+ "@rollup/rollup-linux-x64-musl": 4.57.1
+ "@rollup/rollup-openbsd-x64": 4.57.1
+ "@rollup/rollup-openharmony-arm64": 4.57.1
+ "@rollup/rollup-win32-arm64-msvc": 4.57.1
+ "@rollup/rollup-win32-ia32-msvc": 4.57.1
+ "@rollup/rollup-win32-x64-gnu": 4.57.1
+ "@rollup/rollup-win32-x64-msvc": 4.57.1
fsevents: 2.3.3
- sax@1.4.1: {}
+ sax@1.4.4: {}
semver@7.7.4: {}
@@ -5362,17 +5768,6 @@ snapshots:
"@img/sharp-win32-ia32": 0.34.5
"@img/sharp-win32-x64": 0.34.5
- shiki@3.11.0:
- dependencies:
- "@shikijs/core": 3.11.0
- "@shikijs/engine-javascript": 3.11.0
- "@shikijs/engine-oniguruma": 3.11.0
- "@shikijs/langs": 3.11.0
- "@shikijs/themes": 3.11.0
- "@shikijs/types": 3.11.0
- "@shikijs/vscode-textmate": 10.0.2
- "@types/hast": 3.0.4
-
shiki@3.22.0:
dependencies:
"@shikijs/core": 3.22.0
@@ -5386,14 +5781,12 @@ snapshots:
sisteransi@1.0.5: {}
- sitemap@8.0.0:
+ sitemap@8.0.2:
dependencies:
"@types/node": 17.0.45
"@types/sax": 1.2.7
arg: 5.0.2
- sax: 1.4.1
-
- smol-toml@1.4.2: {}
+ sax: 1.4.4
smol-toml@1.6.0: {}
@@ -5403,6 +5796,17 @@ snapshots:
space-separated-tokens@2.0.2: {}
+ starlight-openapi@0.22.0(@astrojs/markdown-remark@6.3.10)(@astrojs/starlight@0.37.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3)))(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))(openapi-types@12.1.3):
+ dependencies:
+ "@astrojs/markdown-remark": 6.3.10
+ "@astrojs/starlight": 0.37.6(astro@5.17.2(rollup@4.57.1)(typescript@5.9.3))
+ "@readme/openapi-parser": 4.1.2(openapi-types@12.1.3)
+ astro: 5.17.2(rollup@4.57.1)(typescript@5.9.3)
+ github-slugger: 2.0.0
+ url-template: 3.1.1
+ transitivePeerDependencies:
+ - openapi-types
+
stream-replace-string@2.0.0: {}
string-width@4.2.3:
@@ -5413,9 +5817,9 @@ snapshots:
string-width@7.2.0:
dependencies:
- emoji-regex: 10.4.0
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
stringify-entities@4.0.4:
dependencies:
@@ -5426,17 +5830,17 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
dependencies:
- ansi-regex: 6.2.0
+ ansi-regex: 6.2.2
- style-to-js@1.1.17:
+ style-to-js@1.1.21:
dependencies:
- style-to-object: 1.0.9
+ style-to-object: 1.0.14
- style-to-object@1.0.9:
+ style-to-object@1.0.14:
dependencies:
- inline-style-parser: 0.2.4
+ inline-style-parser: 0.2.7
svgo@4.0.0:
dependencies:
@@ -5446,7 +5850,7 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.4.1
+ sax: 1.4.4
tiny-inflate@1.0.3: {}
@@ -5461,18 +5865,16 @@ snapshots:
trough@2.2.0: {}
- tsconfck@3.1.6(typescript@5.9.2):
+ tsconfck@3.1.6(typescript@5.9.3):
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
tslib@2.8.1:
optional: true
type-fest@4.41.0: {}
- typescript@5.9.2: {}
-
- ufo@1.6.1: {}
+ typescript@5.9.3: {}
ufo@1.6.3: {}
@@ -5480,8 +5882,6 @@ snapshots:
uncrypto@0.1.3: {}
- undici-types@7.10.0: {}
-
unified@11.0.5:
dependencies:
"@types/unist": 3.0.3
@@ -5492,7 +5892,7 @@ snapshots:
trough: 2.2.0
vfile: 6.0.3
- unifont@0.7.3:
+ unifont@0.7.4:
dependencies:
css-tree: 3.1.0
ofetch: 1.5.1
@@ -5501,9 +5901,9 @@ snapshots:
unist-util-find-after@5.0.0:
dependencies:
"@types/unist": 3.0.3
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
dependencies:
"@types/unist": 3.0.3
@@ -5523,7 +5923,7 @@ snapshots:
unist-util-remove-position@5.0.0:
dependencies:
"@types/unist": 3.0.3
- unist-util-visit: 5.0.0
+ unist-util-visit: 5.1.0
unist-util-stringify-position@4.0.0:
dependencies:
@@ -5533,21 +5933,16 @@ snapshots:
dependencies:
"@types/unist": 3.0.3
- unist-util-visit-parents@6.0.1:
- dependencies:
- "@types/unist": 3.0.3
- unist-util-is: 6.0.0
-
unist-util-visit-parents@6.0.2:
dependencies:
"@types/unist": 3.0.3
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
- unist-util-visit@5.0.0:
+ unist-util-visit@5.1.0:
dependencies:
"@types/unist": 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
unstorage@1.17.4:
dependencies:
@@ -5555,11 +5950,13 @@ snapshots:
chokidar: 5.0.0
destr: 2.0.5
h3: 1.15.5
- lru-cache: 11.2.5
+ lru-cache: 11.2.6
node-fetch-native: 1.6.7
ofetch: 1.5.1
ufo: 1.6.3
+ url-template@3.1.1: {}
+
util-deprecate@1.0.2: {}
vfile-location@5.0.3:
@@ -5577,21 +5974,20 @@ snapshots:
"@types/unist": 3.0.3
vfile-message: 4.0.3
- vite@6.4.1(@types/node@24.3.0):
+ vite@6.4.1:
dependencies:
- esbuild: 0.25.9
+ esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.48.1
+ rollup: 4.57.1
tinyglobby: 0.2.15
optionalDependencies:
- "@types/node": 24.3.0
fsevents: 2.3.3
- vitefu@1.1.1(vite@6.4.1(@types/node@24.3.0)):
+ vitefu@1.1.1(vite@6.4.1):
optionalDependencies:
- vite: 6.4.1(@types/node@24.3.0)
+ vite: 6.4.1
web-namespaces@2.0.1: {}
@@ -5601,17 +5997,17 @@ snapshots:
dependencies:
string-width: 7.2.0
- wrap-ansi@9.0.0:
+ wrap-ansi@9.0.2:
dependencies:
- ansi-styles: 6.2.1
+ ansi-styles: 6.2.3
string-width: 7.2.0
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
xxhash-wasm@1.1.0: {}
yargs-parser@21.1.1: {}
- yocto-queue@1.2.1: {}
+ yocto-queue@1.2.2: {}
yocto-spinner@0.2.3:
dependencies:
@@ -5623,9 +6019,9 @@ snapshots:
dependencies:
zod: 3.25.76
- zod-to-ts@1.2.0(typescript@5.9.2)(zod@3.25.76):
+ zod-to-ts@1.2.0(typescript@5.9.3)(zod@3.25.76):
dependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
zod: 3.25.76
zod@3.25.76: {}
diff --git a/docs/src/.i18n-filter b/docs/src/.i18n-filter
index f113dae9..9871cee8 100644
--- a/docs/src/.i18n-filter
+++ b/docs/src/.i18n-filter
@@ -1,6 +1,6 @@
+en
ca
de
-en
es
fr
nn-no
diff --git a/docs/src/content/docs/ar/getting-started/auth.mdx b/docs/src/content/docs/ar/getting-started/auth.mdx
index c5f2040e..3c8978ab 100644
--- a/docs/src/content/docs/ar/getting-started/auth.mdx
+++ b/docs/src/content/docs/ar/getting-started/auth.mdx
@@ -13,24 +13,25 @@ níveis:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -39,13 +40,13 @@ níveis:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Por cargos de podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ níveis:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Por permissões de podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ níveis:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ar/getting-started/docker.mdx b/docs/src/content/docs/ar/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/ar/getting-started/docker.mdx
+++ b/docs/src/content/docs/ar/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ar/getting-started/install.mdx b/docs/src/content/docs/ar/getting-started/install.mdx
index 393ead8d..170fef0f 100644
--- a/docs/src/content/docs/ar/getting-started/install.mdx
+++ b/docs/src/content/docs/ar/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ar/index.mdx b/docs/src/content/docs/ar/index.mdx
index 4d6bced7..7cf1a592 100644
--- a/docs/src/content/docs/ar/index.mdx
+++ b/docs/src/content/docs/ar/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/br/getting-started/auth.mdx b/docs/src/content/docs/br/getting-started/auth.mdx
index aea953e5..4ec2be83 100644
--- a/docs/src/content/docs/br/getting-started/auth.mdx
+++ b/docs/src/content/docs/br/getting-started/auth.mdx
@@ -12,73 +12,74 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podkaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| --------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Dreistmerour·ez | Ur c'hontroll klok en deus war Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Merour·ez | Merañ a ra endalc'had Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podkaster | Implijerien·ezed kustum Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
-| permission | description |
-| ----------------------- | ------------------------------------------------------------------ |
-| admin.access | Can access the Castopod admin area. |
-| admin.settings | Can access the Castopod settings. |
-| users.manage | Can manage Castopod users. |
-| persons.manage | Can manage persons. |
-| pages.manage | Can manage pages. |
-| podcasts.view | Can view all podcasts. |
-| podcasts.create | Can create new podcasts. |
-| podcasts.import | Can import podcasts. |
-| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
+| permission | description |
+| ----------------------- | ------------------------------------------------------------------------------------------------- |
+| admin.access | Gallout a ra gwelet taolenn-stur Castopod. |
+| admin.settings | Gallout a ra gwelet arventennoù Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
+| users.manage | Gallout a ra ober war-dro implijerien·ezed Castopod. |
+| persons.manage | Gallout a ra merañ an emellerien·ezed. |
+| pages.manage | Gallout a ra merañ ar pajennoù. |
+| podcasts.view | Gallout a ra gwelet an holl bodkastoù. |
+| podcasts.create | Gallout a ra krouiñ podkastoù nevez. |
+| podcasts.import | Gallout a ra enporzhiañ podkastoù. |
+| fediverse.manage-blocks | Gallout a ra mirout aktourien·ezed pe domanioù ar Fediverse ouzh kaout darempredoù gant Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Admin | Has complete control of podcast #\{id\}. | \* |
-| Editor | Manages content and publications of podcast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
-| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
-| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
+| role | description | permissions |
+| ---------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Merour·ez | Ur c'hontroll klok en deus war ar podkast #\{id\}. | \* |
+| Embanner | Merañ a ra endalc'had hag embannadurioù ar podkast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
+| Aozer·ez | Merañ a ra endalc'had ar podkast #\{id\} met ne c'hall ket embann anezho. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
+| Kouviad·ez | Perzhiad·ez eus ar podkast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
-| permission | description |
-| ---------------------------- | -------------------------------------------------------------------------- |
-| view | Can view dashboard and analytics of podcast #\{id\}. |
-| edit | Can edit podcast #\{id\}. |
-| delete | Can delete podcast #\{id\}. |
-| manage-import | Can synchronize imported podcast #\{id\}. |
-| manage-persons | Can manage subscriptions of podcast #\{id\}. |
-| manage-subscriptions | Can manage subscriptions of podcast #\{id\}. |
-| manage-contributors | Can manage contributors of podcast #\{id\}. |
-| manage-platforms | Can set/remove platform links of podcast #\{id\}. |
-| manage-publications | Can publish podcast #\{id\}. |
-| manage-notifications | Can view and mark notifications as read for podcast #\{id\}. |
-| interact-as | Can interact as the podcast #\{id\} to favourite, share or reply to posts. |
-| episodes.view | Can view dashboards and analytics of podcast #\{id\}'s episodes. |
-| episodes.create | Can create episodes for podcast #\{id\}. |
-| episodes.edit | Can edit episodes of podcast #\{id\}. |
-| episodes.delete | Can delete episodes of podcast #\{id\}. |
-| episodes.manage-persons | Can manage episode persons of podcast #\{id\}. |
-| episodes.manage-clips | Can manage video clips or soundbites of podcast #\{id\}. |
-| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
-| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
+| permission | description |
+| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| view | Gallout a ra gwelet taolenn-stur ha muzulioù heklev ar podkast #\{id\}. |
+| edit | Gallout a ra kemmañ ar podkast #\{id\}. |
+| delete | Gallout a ra lemel ar podkast #\{id\}. |
+| manage-import | Gallout a ra sinkronekaat ar podkast enporzhiet #\{id\}. |
+| manage-persons | Gallout a ra merañ koumanantoù ar podkast #\{id\}. |
+| manage-subscriptions | Gallout a ra merañ koumanantoù ar podkast #\{id\}. |
+| manage-contributors | Gallout a ra merañ perzhidi ha perzhiadezed ar podkast #\{id\}. |
+| manage-platforms | Gallout a ra ouzhpennañ pe lemel liammoù etrezek savennoù diavaez evit ar podkast #\{id\}. |
+| manage-publications | Gallout a ra embann ar podkast #\{id\}. |
+| manage-notifications | Gallout a ra gwelet kemennoù ar podkast #\{id\} ha lakaat anezho evel lennet. |
+| interact-as | Gallout a ra ober traoù gant identelezh ar podkast #\{id\}: ouzhpennañ ur gemennadenn d'ar re garetañ, rannañ anezhi pe respont dezhi. |
+| episodes.view | Gallout a ra gwelet taolennoù-stur ha muzulioù heklev rannoù ar podkast #\{id\}. |
+| episodes.create | Gallout a ra krouiñ rannoù evit podkast #\{id\}. |
+| episodes.edit | Gallout a ra kemmañ rannoù ar podkast #\{id\}. |
+| episodes.delete | Gallout a ra lemel rannoù ar podkast #\{id\}. |
+| episodes.manage-persons | Gallout a ra merañ emellerien·ezed ar podkast #\{id\}. |
+| episodes.manage-clips | Gallout a ra merañ klipoù video pe tennadoù son ar podkast #\{id\}. |
+| episodes.manage-publications | Gallout a ra embann pe diembann rannoù ha kemennadennoù ar podkast #\{id\}. |
+| episodes.manage-comments | Gallout a ra krouiñ/lemel evezhiadennoù evit rannoù ar podkast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/br/getting-started/docker.mdx b/docs/src/content/docs/br/getting-started/docker.mdx
index 6304854e..a171367c 100644
--- a/docs/src/content/docs/br/getting-started/docker.mdx
+++ b/docs/src/content/docs/br/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/br/getting-started/install.mdx b/docs/src/content/docs/br/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/br/getting-started/install.mdx
+++ b/docs/src/content/docs/br/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/br/index.mdx b/docs/src/content/docs/br/index.mdx
index d0c45c04..1b0f1806 100644
--- a/docs/src/content/docs/br/index.mdx
+++ b/docs/src/content/docs/br/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivácia
diff --git a/docs/src/content/docs/ca/getting-started/auth.mdx b/docs/src/content/docs/ca/getting-started/auth.mdx
index a1ef11fd..017c9ddf 100644
--- a/docs/src/content/docs/ca/getting-started/auth.mdx
+++ b/docs/src/content/docs/ca/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------ |
-| Super administrador | Té control complet sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Administrador | Administra el contingut de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Usos generals de Castopod. | admin.access |
+| role | description | permissions |
+| ------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| Super administrador | Té control complet sobre Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Administrador | Administra el contingut de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Usos generals de Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | -------------------------------------------------------------------- |
| admin.access | Pot accedir a l'àrea d'administració de Castopod. |
| admin.settings | Pot accedir a la configuració de Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Pot administrar els usuaris de Castopod. |
| persons.manage | Pot administrar persones. |
| pages.manage | Pot administrar pàgines. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Pot importar pòdcasts. |
| fediverse.manage-blocks | Pot evitar que actors/dominis del fedivers interactuen amb Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Autor | Administra el contingut del podcast #\{id\} però no el pot publicar. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Convidat | Col·laborador general del podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Pot publicar/anul·lar la publicació d'episodis i publicacions del pòdcast #\{id\}. |
| episodes.manage-comments | Pot crear/eliminar comentaris d'episodi del pòdcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ca/getting-started/docker.mdx b/docs/src/content/docs/ca/getting-started/docker.mdx
index fbab23ad..6880d206 100644
--- a/docs/src/content/docs/ca/getting-started/docker.mdx
+++ b/docs/src/content/docs/ca/getting-started/docker.mdx
@@ -7,8 +7,8 @@ process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an all
in one castopod image using nginx unit
-- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el
- paquet incloent Castopod i totes les dependències
+- [**`castopod/app`**](https://hub.docker.com/r/castopod/app): el paquet
+ incloent Castopod i totes les dependències
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuració de Nginx per a Castopod
@@ -88,13 +88,12 @@ can be added as a cache handler.
```
Heu d'adaptar algunes variables a les vostres necessitats (per exemple,
- `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i
- `CP_ANALYTICS_SALT`).
+ `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` i `CP_ANALYTICS_SALT`).
3. Configureu un `reverse proxy` per a TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ca/getting-started/install.mdx b/docs/src/content/docs/ca/getting-started/install.mdx
index c62ea41d..3788694b 100644
--- a/docs/src/content/docs/ca/getting-started/install.mdx
+++ b/docs/src/content/docs/ca/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ca/index.mdx b/docs/src/content/docs/ca/index.mdx
index 0a485990..73265ee0 100644
--- a/docs/src/content/docs/ca/index.mdx
+++ b/docs/src/content/docs/ca/index.mdx
@@ -16,14 +16,14 @@ molt petita.
## Característiques
- 🌱 Gratis i de codi obert (llicència AGPL v3)
-- 🔐 Centrat en la sobirania de les dades: el vostre contingut, audiència
- i estadístiques us pertanyen, i només a vosaltres
-- 🪄 Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions,
- finançament, capítols, geo-localització, persones, fragments d'àudio, …
+- 🔐 Centrat en la sobirania de les dades: el vostre contingut, audiència i
+ estadístiques us pertanyen, i només a vosaltres
+- 🪄 Funcions de podcasting 2.0: GUID, bloqueigos, transcripcions, finançament,
+ capítols, geo-localització, persones, fragments d'àudio, …
- 💬 Xarxa social integrada:
- 🚀 Castopod forma part de Fediverse, una xarxa social descentralitzada
- - ❤️ Creeu publicacions, compartiu-les, afegiu-hi com a preferits i
- comenteu episodis
+ - ❤️ Creeu publicacions, compartiu-les, afegiu-hi com a preferits i comenteu
+ episodis
- 📈 Estadístiques integrades:
- ⚖️ Complint amb GDPR / CCPA / LGPD
- 🪙 Mesura d'audiència segons l'estàndard IABv2
@@ -34,8 +34,7 @@ molt petita.
- 🎨 Colors del tema personalitzables
- 🎬 Genereu videoclips d'episodis preparats per compartir
- 🔉 Genera fragments d'àudio de cada episodi
- - ▶️ Reproductor incrustable, per incrustar els episodis a qualsevol
- lloc web
+ - ▶️ Reproductor incrustable, per incrustar els episodis a qualsevol lloc web
- 💸 Monetització:
- 🔗 Enllaços de finançament
- 📲 Anuncis per escoltar-fent-clic
@@ -49,8 +48,8 @@ molt petita.
- 📤 Traieu el vostre podcast fora de Castopod
- 🔀 Multi-podcast: allotgeu tants programes com vulgueu en un mateix lloc
- 👥 Multi-usuari: afegiu col·laboradors i definiu rols
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivació
diff --git a/docs/src/content/docs/da/getting-started/auth.mdx b/docs/src/content/docs/da/getting-started/auth.mdx
index 4bca1389..c4853b74 100644
--- a/docs/src/content/docs/da/getting-started/auth.mdx
+++ b/docs/src/content/docs/da/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Rolloù an istañs
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Aotreoù war an istañs
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/da/getting-started/docker.mdx b/docs/src/content/docs/da/getting-started/docker.mdx
index 0a9f23af..4adf4250 100644
--- a/docs/src/content/docs/da/getting-started/docker.mdx
+++ b/docs/src/content/docs/da/getting-started/docker.mdx
@@ -90,8 +90,8 @@ can be added as a cache handler.
3. Podesite obrnuti proksi za TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/da/getting-started/install.mdx b/docs/src/content/docs/da/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/da/getting-started/install.mdx
+++ b/docs/src/content/docs/da/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/da/index.mdx b/docs/src/content/docs/da/index.mdx
index 75532de1..d4e9db42 100644
--- a/docs/src/content/docs/da/index.mdx
+++ b/docs/src/content/docs/da/index.mdx
@@ -18,12 +18,11 @@ otiskom (footprint).
- 🌱 Besplatan i otvorenog koda (AGPL v3 License)
- 🔐 Fokusiran an suverenitet podataka: vaš sadržaj, publika i analitika pripada
vama i samo vama
-- 🪄 Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti,
- podrška, poglavlja, lokacija, posobe, zvučni isečci, …
+- 🪄 Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti, podrška,
+ poglavlja, lokacija, posobe, zvučni isečci, …
- 💬 Ugrađena društvena mreža:
- 🚀 Castopod je deo Fediversa, decentralizovane društvene mreže
- - ❤️ Napravite objave, delite, dodajte u omiljene i komentarišite
- epizode
+ - ❤️ Napravite objave, delite, dodajte u omiljene i komentarišite epizode
- 📈 Ugrađena analitika:
- ⚖️ U skladu sa GDPR / CCPA / LGPD
- 🪙 Merenje publike putem IABv2 standarda
@@ -48,8 +47,8 @@ otiskom (footprint).
- 📤 Prebacite svoj podkast sa Castopod-a
- 🔀 Mreža: hostujte koliko god želite podkasta
- 👥 Više korisnika: dodajte saradnike i odredite njihove uloge
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivacija
diff --git a/docs/src/content/docs/de/getting-started/auth.mdx b/docs/src/content/docs/de/getting-started/auth.mdx
index ec8d4637..87c45ed0 100644
--- a/docs/src/content/docs/de/getting-started/auth.mdx
+++ b/docs/src/content/docs/de/getting-started/auth.mdx
@@ -13,24 +13,25 @@ definiert:
### Instanz Rollen
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super-Administrator | Hat die vollständige Kontrolle über Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Verwaltet Castopods Inhalte. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Allgemeine Benutzer von Castopod. | admin.access |
+| role | description | permissions |
+| ------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super-Administrator | Hat die vollständige Kontrolle über Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Verwaltet Castopods Inhalte. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Allgemeine Benutzer von Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instanz Berechtigungen
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ---------------------------------------------------------------------------- |
| admin.access | Kann auf den Admin-Bereich von Castopod zugreifen. |
| admin.settings | Kann auf die Einstellungen von Castopod zugreifen. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Kann Castopod-Benutzer verwalten. |
| persons.manage | Kann Mitwirkende verwalten. |
| pages.manage | Kann Seiten verwalten. |
@@ -39,13 +40,13 @@ definiert:
| podcasts.import | Kann Podcasts importieren. |
| fediverse.manage-blocks | Kann föderierte Nutzer/Domains davon abhalten, mit Castopod zu interagieren. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Pro Podcast Rollen und Berechtigungen
### Pro Podcast Rollen
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ definiert:
| Autor | Verwaltet Inhalte von Podcast #\{id\}, kann diese aber nicht veröffentlichen. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Allgemeiner Mitwirkender des Podcasts #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Pro Podcast Berechtigung
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ definiert:
| episodes.manage-publications | Kann Episoden und Posts von Podcast #\{id\} veröffentlichen/zurückziehen. |
| episodes.manage-comments | Kann Kommentare von Folgen des Podcasts #\{id\} erstellen und löschen. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/de/getting-started/docker.mdx b/docs/src/content/docs/de/getting-started/docker.mdx
index 68db48b6..e56d430b 100644
--- a/docs/src/content/docs/de/getting-started/docker.mdx
+++ b/docs/src/content/docs/de/getting-started/docker.mdx
@@ -87,7 +87,8 @@ kann als Cache-Handler hinzugefügt werden.
castopod-db:
```
- Es müssen einige Variablen an deine Bedürfnisse angepasst werden (z.B. `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` und
+ Es müssen einige Variablen an deine Bedürfnisse angepasst werden (z.B.
+ `CP_BASEURL`, `MYSQL_ROOT_PASSWORD`, `MYSQL_PASSWORD` und
`CP_ANALYTICS_SALT`).
3. Einen Reverse-Proxy für TLS (SSL/HTTPS) einrichten
@@ -104,8 +105,8 @@ kann als Cache-Handler hinzugefügt werden.
```
4. Führe `docker-compose up -d` aus, warte darauf, dass es initialisiert wird
- und gehe auf `https://castopod.example.com/cp-install` um die Einrichtung
- von Castopod abzuschließen!
+ und gehe auf `https://castopod.example.com/cp-install` um die Einrichtung von
+ Castopod abzuschließen!
5. Ist alles da? Dann kann das Podcasten beginnen! 🎙️🚀
diff --git a/docs/src/content/docs/de/getting-started/install.mdx b/docs/src/content/docs/de/getting-started/install.mdx
index 05e9d26f..997705b5 100644
--- a/docs/src/content/docs/de/getting-started/install.mdx
+++ b/docs/src/content/docs/de/getting-started/install.mdx
@@ -10,15 +10,15 @@ installieren.
## Voraussetzungen
-- PHP v8.1 oder höher
-- MySQL Version 5.7 oder höher oder MariaDB Version 10.2 oder höher
+- PHP v8.5 oder höher
+- MySQL Version 8.4 oder höher oder MariaDB Version 11.4 oder höher
- HTTPS-Unterstützung
- Eine [ntp-synchronisierte Uhr](https://wiki.debian.org/NTP) um die eingehenden
Anfragen zu überprüfen
-### PHP v8.1 oder höher
+### PHP v8.5 oder höher
-PHP Version 8.1 oder höher ist erforderlich, mit folgenden Erweiterungen
+PHP version 8.5 oder höher ist erforderlich, mit folgenden Erweiterungen
installiert:
- [intl](https://php.net/manual/en/intl.requirements.php)
@@ -161,8 +161,7 @@ email.SMTPPass="your_smtp_password"
### Media storage
Standardmäßig werden Dateien im Ordner `public/media` über das Dateisystem
-gespeichert.
-Wenn Sie den Ordner `media` an einen anderen Ort verlegen müssen,
+gespeichert. Wenn Sie den Ordner `media` an einen anderen Ort verlegen müssen,
können Sie es in Ihrer `.env` Datei angeben wie unten gezeigt:
```ini
@@ -172,7 +171,8 @@ media.root="media"
media.storage="/mnt/storage"
```
-In diesem Beispiel werden die Dateien im Ordner /mnt/storage/media gespeichert. Stellen Sie sicher, dass Sie auch Ihre Webserver-Konfiguration aktualisieren, um
+In diesem Beispiel werden die Dateien im Ordner /mnt/storage/media gespeichert.
+Stellen Sie sicher, dass Sie auch Ihre Webserver-Konfiguration aktualisieren, um
diese Änderung wiederzugeben.
### S3
diff --git a/docs/src/content/docs/de/getting-started/update.mdx b/docs/src/content/docs/de/getting-started/update.mdx
index 2f863450..048b065b 100644
--- a/docs/src/content/docs/de/getting-started/update.mdx
+++ b/docs/src/content/docs/de/getting-started/update.mdx
@@ -34,8 +34,7 @@ improvements ⚡.
diff --git a/docs/src/content/docs/de/index.mdx b/docs/src/content/docs/de/index.mdx
index 77eb0595..5bc2e0ca 100644
--- a/docs/src/content/docs/de/index.mdx
+++ b/docs/src/content/docs/de/index.mdx
@@ -21,8 +21,7 @@ mit einem sehr kleinen Fußabdruck.
- 🪄 Podcasting 2.0 Features: GUID, gesperrt, Transkripte, Finanzierung,
Kapitel, Standort, Personen, Soundbites, …
- 💬 Integriertes soziales Netzwerk:
- - 🚀 Castopod ist Teil des Fediversums, einem dezentralen sozialen
- Netzwerk
+ - 🚀 Castopod ist Teil des Fediversums, einem dezentralen sozialen Netzwerk
- ❤️ Erstelle Beiträge, teile, favorisiere und kommentiere Episoden
- 📈 Integrierte Analyse:
- ⚖️ GDPR / CCPA / LGPD konform
@@ -41,16 +40,15 @@ mit einem sehr kleinen Fußabdruck.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/el/getting-started/auth.mdx b/docs/src/content/docs/el/getting-started/auth.mdx
index 704d4368..30b0ee8d 100644
--- a/docs/src/content/docs/el/getting-started/auth.mdx
+++ b/docs/src/content/docs/el/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Ρόλοι εμφάνισης
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Υπερδιαχειριστής | Έχει πλήρη έλεγχο του Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Διαχειριστής | Διαχείριση περιεχομένου του Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Γενικοί χρήστες του Castopod. | admin.access |
+| role | description | permissions |
+| ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Υπερδιαχειριστής | Έχει πλήρη έλεγχο του Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Διαχειριστής | Διαχείριση περιεχομένου του Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Γενικοί χρήστες του Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | -------------------------------------------------------------------------------------- |
| admin.access | Μπορεί να έχει πρόσβαση στην περιοχή διαχείρισης Castopod. |
| admin.settings | Μπορεί να έχει πρόσβαση στις ρυθμίσεις Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Μπορεί να διαχειριστεί τους χρήστες Castopod. |
| persons.manage | Μπορεί να διαχειριστεί τα άτομα. |
| pages.manage | Μπορεί να διαχειριστεί τις σελίδες. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Μπορεί να εισάγει podcasts. |
| fediverse.manage-blocks | Μπορεί να εμποδίσει τους ψευτογενείς ηθοποιούς/τομείς να αλληλεπιδρούν με το Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Συντάκτης | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Επισκέπτης | Γενικός συντελεστής του podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/el/getting-started/docker.mdx b/docs/src/content/docs/el/getting-started/docker.mdx
index e1755437..54176d7e 100644
--- a/docs/src/content/docs/el/getting-started/docker.mdx
+++ b/docs/src/content/docs/el/getting-started/docker.mdx
@@ -93,8 +93,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/el/getting-started/install.mdx b/docs/src/content/docs/el/getting-started/install.mdx
index 11665b74..c9afd649 100644
--- a/docs/src/content/docs/el/getting-started/install.mdx
+++ b/docs/src/content/docs/el/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/el/index.mdx b/docs/src/content/docs/el/index.mdx
index 068c3c88..432b8f0d 100644
--- a/docs/src/content/docs/el/index.mdx
+++ b/docs/src/content/docs/el/index.mdx
@@ -17,10 +17,10 @@ import { LinkCard } from "@astrojs/starlight/components";
## Χαρακτηριστικά
- 🌱 Δωρεάν & open-source (AGPL v3 License)
-- 🔐 Εστιάζει στην κυριαρχία των δεδομένων: το περιεχόμενο, το κοινό και
- τα αναλυτικά στοιχεία ανήκουν σε εσάς μόνο
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Εστιάζει στην κυριαρχία των δεδομένων: το περιεχόμενο, το κοινό και τα
+ αναλυτικά στοιχεία ανήκουν σε εσάς μόνο
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Ενσωματωμένο κοινωνικό δίκτυο:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -41,15 +41,15 @@ import { LinkCard } from "@astrojs/starlight/components";
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Κίνητρα
diff --git a/docs/src/content/docs/en/getting-started/auth.mdx b/docs/src/content/docs/en/getting-started/auth.mdx
index d4dd4dd5..8282b972 100644
--- a/docs/src/content/docs/en/getting-started/auth.mdx
+++ b/docs/src/content/docs/en/getting-started/auth.mdx
@@ -14,11 +14,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
{/* AUTH-INSTANCE-ROLES-LIST:END */}
@@ -30,6 +30,7 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
diff --git a/docs/src/content/docs/en/getting-started/create-episode.mdx b/docs/src/content/docs/en/getting-started/create-episode.mdx
index 045b660f..3fd353be 100644
--- a/docs/src/content/docs/en/getting-started/create-episode.mdx
+++ b/docs/src/content/docs/en/getting-started/create-episode.mdx
@@ -2,33 +2,37 @@
title: Create your first episode
---
-To add an episode to your podcast, choose Podcasts -> All podcasts from your instance management left hand sidebar.
-Then choose Podcast dashboard and press the Add an episode button in the upper right hand corner and fill out the
+To add an episode to your podcast, choose Podcasts -> All podcasts from your
+instance management left hand sidebar. Then choose Podcast dashboard and press
+the Add an episode button in the upper right hand corner and fill out the
following fields.
## Episode Info
### Audio file
-Press the `Choose File` button to select the audio file to upload to Castopod. The audio file must be an mp3 or m4a
-file and cannot be larger than 512 megabytes.
+Press the `Choose File` button to select the audio file to upload to Castopod.
+The audio file must be an mp3 or m4a file and cannot be larger than 512
+megabytes.
### Episode cover
-You can optionally add a different podcast cover / artwork. Press `Choose File` and select an image from your computer
-that must be at least 1400px wide and tall and no larger than 3000px wide and tall. If you do not choose an
-episode cover, your default podcast artwork will be used.
+You can optionally add a different podcast cover / artwork. Press `Choose File`
+and select an image from your computer that must be at least 1400px wide and
+tall and no larger than 3000px wide and tall. If you do not choose an episode
+cover, your default podcast artwork will be used.
### Title
-Enter the name for your new episode. Do not add the season or episode number in the **Title** field. Choose a clear
-and concise episode name to help your listeners.
+Enter the name for your new episode. Do not add the season or episode number in
+the **Title** field. Choose a clear and concise episode name to help your
+listeners.
### Permalink
-The permalink is the link to the public episode page. This will be automatically filled out based on the title
-you entered above. If you wish to have a different permalink, press the edit button to the right of the
-displayed permalink.
+The permalink is the link to the public episode page. This will be automatically
+filled out based on the title you entered above. If you wish to have a different
+permalink, press the edit button to the right of the displayed permalink.
### Season and Episode
@@ -36,46 +40,54 @@ You can optionally add a season and / or episode number to your episode.
## Show Notes
-Describe your episode in detail. You can use up to 4000 characters, and you can use Markdown to style your show
-notes. You can expand the text box by pressing and holding the bottom right corner of the text box.
+Describe your episode in detail. You can use up to 4000 characters, and you can
+use Markdown to style your show notes. You can expand the text box by pressing
+and holding the bottom right corner of the text box.
-When your show notes are complete, press `Preview` to view how your show notes will be displayed.
+When your show notes are complete, press `Preview` to view how your show notes
+will be displayed.
## Additional Files
### Transcripts
-You can add a transcript to your episode by choosing a file in SRT or VTT format to upload. Transcripts will be
-shown in a tab on the episode page and some podcast apps such as Apple Podcasts can display the transcript.
-Transcripts help users who may have a hearing disability and can also help with search engine optimization.
+You can add a transcript to your episode by choosing a file in SRT or VTT format
+to upload. Transcripts will be shown in a tab on the episode page and some
+podcast apps such as Apple Podcasts can display the transcript.
+Transcripts help users who may have a hearing disability and can also help with
+search engine optimization.
### Chapters
-You can optionally upload a chapters file in JSON format. To learn more about chapters and for an example of the
-correct format, visit the [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md).
+You can optionally upload a chapters file in JSON format. To learn more about
+chapters and for an example of the correct format, visit the
+[Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md).
-!!! note
-Not all podcast players natively support chapters in JSON format. More modern players, such as Fountain and
-Apple Podcasts, do support chapters in JSON format.
+!!! note Not all podcast players natively support chapters in JSON format. More
+modern players, such as Fountain and Apple Podcasts, do support chapters in JSON
+format.
## Publish your episode
-When complete, press the `Create episode` button at the bottom of the page. You will be automatically directed to
-the next step to publish your episode. Your episode is in draft mode and is not yet published. You can preview
-how your episode will look when published or publish your episode. To publish your episode, press the `Publish` button
-in the upper right hand corner.
+When complete, press the `Create episode` button at the bottom of the page. You
+will be automatically directed to the next step to publish your episode. Your
+episode is in draft mode and is not yet published. You can preview how your
+episode will look when published or publish your episode. To publish your
+episode, press the `Publish` button in the upper right hand corner.
### Create your announcement post
-After pressing `Publish` you will be directed to the next page to draft your announcement post. Write your message
-in the text box provided. This will be the message broadcast to the Fediverse and published on your podcast's home
-page.
+After pressing `Publish` you will be directed to the next page to draft your
+announcement post. Write your message in the text box provided. This will be the
+message broadcast to the Fediverse and published on your podcast's home page.
### Publication date
-Choose `Now` or `Schedule` to publish your episode. If you choose `Now`, your episode will be live. Or you can
-schedule the day and time to publish your episode by choosing the `Schedule` radio button and choosing the day and
-time. Press `Publish` to finish.
+Choose `Now` or `Schedule` to publish your episode. If you choose `Now`, your
+episode will be live. Or you can schedule the day and time to publish your
+episode by choosing the `Schedule` radio button and choosing the day and time.
+Press `Publish` to finish.
-Your RSS feed will be automatically updated with your episode information and listeners who subscribe will be
-notified of a new episode. Congratulations on publishing your first episode!
+Your RSS feed will be automatically updated with your episode information and
+listeners who subscribe will be notified of a new episode. Congratulations on
+publishing your first episode!
diff --git a/docs/src/content/docs/en/getting-started/create-podcast.mdx b/docs/src/content/docs/en/getting-started/create-podcast.mdx
index 65645f89..f36e101d 100644
--- a/docs/src/content/docs/en/getting-started/create-podcast.mdx
+++ b/docs/src/content/docs/en/getting-started/create-podcast.mdx
@@ -2,15 +2,16 @@
title: Create your first podcast
---
-From the left hand navigation sidebar, press the `+` sign to the right of Podcasts to create your first podcast.
+From the left hand navigation sidebar, press the `+` sign to the right of
+Podcasts to create your first podcast.
## Podcast Identity
### Podcast Cover
-To upload your podcast cover art, press the `Choose File` button and choose your cover art from your computer. The
-cover art needs to be in JPG or PNG format and a minimum of 1400px wide and tall with a maximum of 3000px wide and
-tall.
+To upload your podcast cover art, press the `Choose File` button and choose your
+cover art from your computer. The cover art needs to be in JPG or PNG format and
+a minimum of 1400px wide and tall with a maximum of 3000px wide and tall.
### Title
@@ -18,13 +19,15 @@ Enter the name of your podcast in the **Title** field.
### Description
-Describe what your podcast is about. You can use Markdown to style the text and you can resize the text box by
-pressing and holding the bottom right hand corner of the text box.
+Describe what your podcast is about. You can use Markdown to style the text and
+you can resize the text box by pressing and holding the bottom right hand corner
+of the text box.
### Type
-Choose how your listeners should listen to your podcast. **Episodic** lets listeners know they can consume your podcast
-in any order, such as an interview podcast. Choose **Serial** if your episodes are meant to be listened to in
+Choose how your listeners should listen to your podcast. **Episodic** lets
+listeners know they can consume your podcast in any order, such as an interview
+podcast. Choose **Serial** if your episodes are meant to be listened to in
sequential order.
### Medium
@@ -32,8 +35,10 @@ sequential order.
Choose the type of audio for your podcast:
- **Podcast**: a standard podcast.
-- **Music**: A feed of music organized into an "album" with each item a song within the album.
-- **Audiobook**: A specific type of audio with one item per feed, or where items represent chapters within a book.
+- **Music**: A feed of music organized into an "album" with each item a song
+ within the album.
+- **Audiobook**: A specific type of audio with one item per feed, or where items
+ represent chapters within a book.
## Classification
@@ -43,7 +48,8 @@ From the dropdown menu, choose which language is spoken in your podcast.
### Category
-Choose the category that represents your podcast, such as Arts, Comedy, Sports, Technology, etc.
+Choose the category that represents your podcast, such as Arts, Comedy, Sports,
+Technology, etc.
### Other categories (optional)
@@ -51,21 +57,25 @@ You can choose a second category in addition to the main category you set up.
### Parental advisory
-Choose if your podcast has explicit content or swearing or choose Clean if your podcast is suitable for everyone. You
-can also choose to leave this category as undefined. When [creating a new episode](../podcast/episodes),
-you will also have the opportunity to choose clean, explicit, or undefined on a per episode basis.
+Choose if your podcast has explicit content or swearing or choose Clean if your
+podcast is suitable for everyone. You can also choose to leave this category as
+undefined. When [creating a new episode](../podcast/episodes), you will also
+have the opportunity to choose clean, explicit, or undefined on a per episode
+basis.
## Author
### Owner name and email
-Enter the owner name and email in the provided fields. This is only visible in the RSS feed and is used by other
-podcasting platforms to verify your ownership of your podcast. You can choose to remove the owner email
-from the public RSS feed by using the provided toggle.
+Enter the owner name and email in the provided fields. This is only visible in
+the RSS feed and is used by other podcasting platforms to verify your ownership
+of your podcast. You can choose to remove the owner email from the public RSS
+feed by using the provided toggle.
### Publisher
-If your podcast is part of a podcast network or is produced by a company, enter the publisher here.
+If your podcast is part of a podcast network or is produced by a company, enter
+the publisher here.
### Copyright
@@ -73,40 +83,47 @@ You can optionally add the copyright holder in this field.
### Fediverse identity
-Enter the handle (or nickname) for your podcast. This will allow people on Mastodon and other Fediverse services
-to follow your podcast. Your handle will be shown as @yourdomain.com@handle on the Fediverse.
+Enter the handle (or nickname) for your podcast. This will allow people on
+Mastodon and other Fediverse services to follow your podcast. Your handle will
+be shown as @yourdomain.com@handle on the Fediverse.
-To learn more about Fediverse integration, visit the [Fediverse documentation page](../instance/fediverse).
+To learn more about Fediverse integration, visit the
+[Fediverse documentation page](../instance/fediverse).
### Podcast banner
-Upload a banner image to be displayed at the top of your podcast's home page. The banner must have a 3:1 ration and
-be at least 1500px wide.
+Upload a banner image to be displayed at the top of your podcast's home page.
+The banner must have a 3:1 ration and be at least 1500px wide.
### Premium
-Toggle this setting to set all episodes by default as premium. When creating an episode, it will default to premium,
-and you can still choose to make some episodes, trailers, or bonus content as free and public.
+Toggle this setting to set all episodes by default as premium. When creating an
+episode, it will default to premium, and you can still choose to make some
+episodes, trailers, or bonus content as free and public.
## Open Podcast Prefix Project (OP3)
-The [Open Podcast Prefix Project](https://op3.dev) is an open source and trusted third party analytics service. If
-you toggle this to enabled, you will be able to view analytics for your podcast over time including the number of
-listens over time, episode comparison charts, and more.
+The [Open Podcast Prefix Project](https://op3.dev) is an open source and trusted
+third party analytics service. If you toggle this to enabled, you will be able
+to view analytics for your podcast over time including the number of listens
+over time, episode comparison charts, and more.
## Location
You can optionally add a real or fictitious location name in this field. When
-[creating a new episode](../podcast/episodes) you also can add a location to an individual episode.
+[creating a new episode](../podcast/episodes) you also can add a location to an
+individual episode.
## Advanced Parameters
You can optionally toggle the following settings:
-- **Prevent podcast from being copied**: this locks your podcast and does not allow other podcast platforms to import
- your podcast. If you decide in the future to migrate away from Castopod to a new platform, this toggle will need to be
- unchecked.
-- **Podcast should be hidden from public catalogues**: If toggled, a best effort is made to hide the entire podcast from
- appearing in Apple Podcasts, YouTube Music, and any other third party podcast apps. (Not guaranteed)
-- **Podcast will not be having new episodes**: If your podcast comes to an end, you can toggle this to let listeners
- know there will not be new episodes.
+- **Prevent podcast from being copied**: this locks your podcast and does not
+ allow other podcast platforms to import your podcast. If you decide in the
+ future to migrate away from Castopod to a new platform, this toggle will need
+ to be unchecked.
+- **Podcast should be hidden from public catalogues**: If toggled, a best effort
+ is made to hide the entire podcast from appearing in Apple Podcasts, YouTube
+ Music, and any other third party podcast apps. (Not guaranteed)
+- **Podcast will not be having new episodes**: If your podcast comes to an end,
+ you can toggle this to let listeners know there will not be new episodes.
diff --git a/docs/src/content/docs/en/getting-started/docker.mdx b/docs/src/content/docs/en/getting-started/docker.mdx
index e129904d..ff3c1234 100644
--- a/docs/src/content/docs/en/getting-started/docker.mdx
+++ b/docs/src/content/docs/en/getting-started/docker.mdx
@@ -9,8 +9,9 @@ its automated build process:
- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod): an
all-in-one image integrating [FrankenPHP](https://frankenphp.dev/) and
- [Caddy](https://caddyserver.com/), optimized for production environments.
- It is based on [serversideup/php](https://serversideup.net/open-source/docker-php/docs/image-variations/frankenphp).
+ [Caddy](https://caddyserver.com/), optimized for production environments. It
+ is based on
+ [serversideup/php](https://serversideup.net/open-source/docker-php/docs/image-variations/frankenphp).
Castopod requires a MySQL-compatible database to function. Optionally, a Redis
service can be configured as the caching layer.
@@ -22,8 +23,9 @@ service can be configured as the caching layer.
- `latest`, latest version build
- `develop` [unstable], latest development branch build
-Other unstable channels (e.g., `beta`, `next`, `2-next`) may be actively pushed during development phases.
-See [all tags in the docker hub](https://hub.docker.com/r/castopod/castopod/tags).
+Other unstable channels (e.g., `beta`, `next`, `2-next`) may be actively pushed
+during development phases. See
+[all tags in the docker hub](https://hub.docker.com/r/castopod/castopod/tags).
+
+### Plugin README
+
+The `README.md` file should contain with any additional information to help
+guide the user in using the plugin.
+
+It is loaded on Castopod's admin area when the plugin is installed.
+
+### Plugin LICENSE
+
+In addition to specifying [the license in the manifest](./manifest#license), you
+may add a `LICENSE.md` file.
+
+Just like the `README.md` file, its contents will be loaded into Castopod's
+admin area, in the plugin's view page for the user to read.
+
+### Plugin icon
+
+Generally, the plugin icon is displayed next to its title, it is an SVG file
+intended to give a graphical representation of the plugin.
+
+The icon should be squared, and be legible in a 64px by 64px circle.
+
+### Internationalization (i18n)
+
+Plugins can be translated. Translation strings live inside the `i18n` folder.
+Translation files are JSON files named as locale keys:
+
+
+
+- **i18n**
+ - en.json // default locale
+ - fr.json
+ - de.json
+ - …
+
+
+
+Supported locales are:
+`br`,`ca`,`de`,`en`,`es`,`fr`,`nn-no`,`pl`,`pt-br`,`sr-latn`,`zh-hans`.
+
+The translation strings allow you to translate the title, description and
+settings keys (ie. labels, hints, helpers, etc.).
+
+
+
+ ```json
+ // i18n/en.json
+ {
+ "title": "Hello, World!",
+ "description": "A Castopod plugin to greet the world!",
+ "settings": {
+ "general": {
+ "field-key": {
+ "label": "Enter a text",
+ "hint": "You can enter any type of character."
+ }
+ },
+ "podcast": {},
+ "episode": {}
+ }
+ }
+ ```
+
+
+ ```json
+ // i18n/fr.json
+ {
+ "title": "Bonjour, le Monde !",
+ "description": "Un plugin castopod pour saluer le monde !",
+ "settings": {
+ "general": {
+ "field-key": {
+ "label": "Saisissez un texte",
+ "hint": "Vous pouvez saisir n'importe quel type de caractère."
+ }
+ },
+ "podcast": {},
+ "episode": {}
+ }
+ }
+ ```
+
+
diff --git a/docs/src/content/docs/en/plugins/install.mdx b/docs/src/content/docs/en/plugins/install.mdx
new file mode 100644
index 00000000..9f179850
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/install.mdx
@@ -0,0 +1,88 @@
+---
+title: Install plugins
+---
+
+import { Aside, Badge } from "@astrojs/starlight/components";
+
+The recommended way to add and maintain plugins is via the CLI for speed,
+reliability, and reproducible setups. A manual file-based method is also
+available if terminal access isn’t possible.
+
+- [CLI](#cli): install, update, remove, or sync all plugins from a configuration
+ file for consistent environments.
+
+- [Manual](#install-manually-drag-and-drop): place the plugin folder in the
+ correct path; Castopod detects valid plugins automatically.
+
+## CLI
+
+Use the CLI when server access is available; it supports version pinning and
+reproducible setups via configuration files.
+
+With that, plugins are automatically tracked in two writable configuration files
+whenever you run the commands:
+
+- [`plugins.json`](./reference/plugins-json): lists the plugins you want to use,
+ along with their version requirements. Think of it as a _wish list_ of
+ plugins.
+
+- [`plugins-lock.json`](./reference/plugins-lock-json): records the exact
+ versions that were actually installed, along with extra metadata. This ensures
+ that even if a plugin is updated later, Castopod can reproduce the same
+ working setup you had before.
+
+### Commands
+
+- Install the latest compatible version of a plugin:
+
+ ```sh
+ php spark plugins:add acme/hello-world
+ ```
+
+- Install a specific version in order to pin environments:
+
+ ```sh
+ php spark plugins:add acme/hello-world@1.0.0
+ ```
+
+- Update a plugin to the latest available release:
+
+ ```sh
+ php spark plugins:update acme/hello-world
+ ```
+
+- Completely remove an installed plugin:
+
+ ```sh
+ php spark plugins:remove acme/hello-world
+ ```
+
+- Install all plugins listed in [`plugins.json`](./reference/plugins-json):
+
+ ```sh
+ php spark plugins:install
+ ```
+
+
+
+## Install manually (drag-and-drop)
+
+If you only have FTP access or prefer a simple approach:
+
+1. Download the plugin from
+ [**plugins.castopod.org**](https://plugins.castopod.org/).
+
+2. Place the plugin folder inside your Castopod installation at:
+ `plugins/{vendor}/{plugin-name}/`
diff --git a/docs/src/content/docs/en/plugins/reference/hooks.mdx b/docs/src/content/docs/en/plugins/reference/hooks.mdx
new file mode 100644
index 00000000..54a65f1e
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/reference/hooks.mdx
@@ -0,0 +1,86 @@
+---
+title: Hooks reference
+---
+
+Hooks are methods of the Plugin class, they are executed in parts of the
+Castopod codebase.
+
+## List
+
+| Hooks | Executes in |
+| ---------------- | ----------- |
+| rssBeforeChannel | RSS Feed |
+| rssAfterChannel | RSS Feed |
+| rssBeforeItem | RSS Feed |
+| rssAfterItem | RSS Feed |
+| siteHead | Website |
+
+### `rssBeforeChannel`
+
+This hook is executed just before rendering the `` tag in the Podcast
+RSS feed using the given Podcast object.
+
+Here is a good place to alter the Podcast object.
+
+```php
+public function rssBeforeChannel(Podcast $podcast): void
+{
+ // …
+}
+```
+
+### `rssAfterChannel`
+
+This hook is executed after rendering all of the `` tags in the Podcast
+RSS feed.
+
+Here is a good place to add new tags to the generated channel.
+
+```php
+public function rssAfterChannel(Podcast $podcast, RssFeed $channel): void
+{
+ // …
+}
+```
+
+### `rssBeforeItem`
+
+This hook is executed before rendering an `` tag in the Podcast RSS feed
+using the given Episode object.
+
+Here is a good place to alter the Episode object.
+
+```php
+public function rssBeforeItem(Episode $episode): void
+{
+ // …
+}
+```
+
+### `rssAfterItem`
+
+This hook is executed after rendering an ``'s tags in the Podcast RSS
+feed.
+
+Here is a good place to add new tags to the generated item.
+
+```php
+public function rssAfterItem(Epsiode $episode, RssFeed $item): void
+{
+ // …
+}
+```
+
+### siteHead
+
+This hook is executed in the public pages' `` tag.
+
+Here is a good place to add meta tags, custom styles, and third-party scripts to
+Castopod's public pages.
+
+```php
+public function siteHead(HtmlHead $head): void
+{
+ // …
+}
+```
diff --git a/docs/src/content/docs/en/plugins/reference/manifest-json.mdx b/docs/src/content/docs/en/plugins/reference/manifest-json.mdx
new file mode 100644
index 00000000..364e6e57
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/reference/manifest-json.mdx
@@ -0,0 +1,189 @@
+---
+title: manifest.json reference
+---
+
+import { Aside } from "@astrojs/starlight/components";
+
+This page details the attributes of a
+[Castopod Plugin's manifest](../../../../../pages/plugin-manifest.schema.json.ts),
+which must be a JSON file.
+
+### `name` (required)
+
+The plugin name, including 'vendor-name/' prefix. Examples:
+
+- acme/hello-world
+- adaures/click
+
+The name must be lowercase and consist of words separated by `-`, `.` or `_`.
+The complete name should match
+`^[a-z0-9]([_.-]?[a-z0-9]+)*\/[a-z0-9]([_.-]?[a-z0-9]+)*$`.
+
+### `version` (required)
+
+The plugin's semantic version (eg. 1.0.0) - see https://semver.org/
+
+### `minCastopodVersion` (required)
+
+The minimal version of Castopod with which the plugin is compatible.
+
+### `description`
+
+The plugin's description. This helps people discover your plugin when listed in
+repositories.
+
+### `authors`
+
+Array of one or more persons having authored the plugin. A person is represented
+by object with a required "name" field and optional "email" and "url" fields:
+
+```json
+{
+ "name": "Jean Deau",
+ "email": "jean.deau@example.com",
+ "url": "https://example.com/"
+}
+```
+
+
+
+### `homepage`
+
+The URL to the plugin's homepage.
+
+### `license`
+
+**Default:** `"UNLICENSED"`
+
+Specify a license for your plugin so that people know how they are permitted to
+use it, and any restrictions you're placing on it.
+
+### `private`
+
+**Default:** `false`
+
+Whether or not to publish the plugin in public directories. If set to `true`,
+directories should refuse to publish the plugin.
+
+### `submodule`
+
+**Default:** `false`
+
+Indicates whether the plugin is part of a monorepo (a single Git repository
+containing multiple plugins). If `true`, the plugin shares its repository with
+other plugins. In this case, releases should be tagged using the format
+`@` (eg. `acme/hello-world@1.0.0`) to ensure proper
+version indexing by plugin repositories.
+
+### `keywords`
+
+Array of strings to help your plugin get discovered when listed in repositories.
+
+### `hooks`
+
+List of hooks used by the plugin. If the hook is not specified, Castopod will
+not run it.
+
+### `settings`
+
+Declare settings forms for persisting user data. The plugin's settings forms can
+be declared at three levels: `general`, `podcast`, and `episode`.
+
+Each level accepts one or more fields, identified by a key.
+
+```json
+{
+ "settings": {
+ "general": { // general settings form
+ "field-key": {
+ "type": "text", // default field type: a text input
+ "label": "Enter a text"
+ },
+ …
+ },
+ "podcast": {…}, // settings form for each podcast
+ "episode": {…}, // settings form for each episode
+ }
+}
+```
+
+The `general`, `podcast`, and `episode` settings are maps with each key being a
+field key and the value being a `Field` object.
+
+#### Field object
+
+A field is a form element:
+
+| Property | Type | Note |
+| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
+| `type` | `checkbox`, `datetime`, `email`, `group`, `html`, `markdown`, `number`, `radio-group`, `rss`, `select-multiple`, `select`, `text`, `textarea`, `toggler`, `url` | Default is `text` |
+| `label` (required) | `string` | Can be translated (see i18n) |
+| `hint` | `string` | Can be translated (see i18n) |
+| `helper` | `string` | Can be translated (see i18n) |
+| `defaultValue` | `string` | You can specify multiple comma separated values for `select-multiple` |
+| `validationRules` | `string` \| `array` | See [available validation rules](#available-validation-rules) |
+| `optional` | `boolean` | Default is `false` |
+| `options` | `Options` | Required for `radio-group`, `select-multiple`, and `select` types. |
+| `multiple` | `boolean` | Default is `false` |
+| `fields` | `Array` | Required for `group` type |
+
+#### Options object
+
+The `Options` object properties are option keys and the value is an `Option`.
+
+##### Option object
+
+| Property | Type | Note |
+| ------------------ | -------- | ---------------------------- |
+| `label` (required) | `string` | Can be translated (see i18n) |
+| `description` | `string` | Can be translated (see i18n) |
+
+### `files`
+
+Array of file patterns that describes the entries to be included when your
+plugin is installed.
+
+### `repository`
+
+Repository where the plugin's code lives. Helpful for people who want to
+contribute.
+
+#### Available validation rules
+
+The following rules are a subset of
+[CodeIgniter4's validation rules](https://codeigniter.com/user_guide/libraries/validation.html#available-rules).
+
+| Rule | Parameter | Description | Example |
+| --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
+| alpha | No | Fails if field has anything other than alphabetic characters in ASCII. | |
+| alpha_dash | No | Fails if field contains anything other than alphanumeric characters, underscores or dashes in ASCII. | |
+| alpha_numeric | No | Fails if field contains anything other than alphanumeric characters in ASCII. | |
+| alpha_numeric_punct | No | Fails if field contains anything other than alphanumeric, space, or this limited set of punctuation characters: `~` (tilde), `!` (exclamation), `#` (number), `$` (dollar), `%` (percent), `&` (ampersand), `*` (asterisk), `-` (dash), `_` (underscore), `+` (plus), `=` (equals), `\|` (vertical bar),`:`(colon),`.` (period). | |
+| alpha_numeric_space | No | Fails if field contains anything other than alphanumeric or space characters in ASCII. | |
+| alpha_space | No | Fails if field contains anything other than alphabetic characters or spaces in ASCII. | |
+| decimal | No | Fails if field contains anything other than a decimal number. Also accepts a `+` or `-` sign for the number. | |
+| differs | Yes | Fails if field does not differ from the one in the parameter. | `differs[field_name]` |
+| exact_length | Yes | Fails if field length is not exactly the parameter value. One or more comma-separated values are possible. | `exact_length[5]` or `exact_length[5,8,12]` |
+| greater_than | Yes | Fails if field is less than or equal to the parameter value or not numeric. | `greater_than[8]` |
+| greater_than_equal_to | Yes | Fails if field is less than the parameter value, or not numeric. | `greater_than_equal_to[5]` |
+| hex | No | Fails if field contains anything other than hexadecimal characters. | |
+| in_list | Yes | Fails if field is not within a predetermined list. | `in_list[red,blue,green]` |
+| integer | No | Fails if field contains anything other than an integer. | |
+| is_natural | No | Fails if field contains anything other than a natural number: `0`, `1`, `2`, `3`, etc. | |
+| is_natural_no_zero | No | Fails if field contains anything other than a natural number, except zero: `1`, `2`, `3`, etc. | |
+| less_than | Yes | Fails if field is greater than or equal to the parameter value or not numeric. | `less_than[8]` |
+| less_than_equal_to | Yes | Fails if field is greater than the parameter value or not numeric. | `less_than_equal_to[8]` |
+| max_length | Yes | Fails if field is longer than the parameter value. | `max_length[8]` |
+| min_length | Yes | Fails if field is shorter than the parameter value. | `min_length[3]` |
+| not_in_list | Yes | Fails if field is within a predetermined list. | `not_in_list[red,blue,green]` |
+| regex_match | Yes | Fails if field does not match the regular expression. | `regex_match[/regex/]` |
+| valid_base64 | No | Fails if field contains anything other than valid Base64 characters. | |
+| valid_date | Yes | Fails if field does not contain a valid date. Any string that `strtotime()` accepts is valid if you don't specify an optional parameter that matches a date format. | `valid_date[d/m/Y]` |
diff --git a/docs/src/content/docs/en/plugins/reference/plugins-json.mdx b/docs/src/content/docs/en/plugins/reference/plugins-json.mdx
new file mode 100644
index 00000000..e767c330
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/reference/plugins-json.mdx
@@ -0,0 +1,35 @@
+---
+title: plugins.json
+---
+
+`plugins.json` declares which plugins are intended for installation and the
+version ranges they have to satisfy. It is human-edited, concise, and designed
+for sharing intent across environments.
+
+## Example
+
+```json
+// writable/plugins.json
+{
+ "plugins": {
+ "acme/hello-world": "2.1.0",
+ "ad-aures/custom-rss": "^1.0.0",
+ "ad-aures/show-notes-signature": "dev-main"
+ },
+ "repositories": {}
+}
+```
+
+## Properties
+
+### `plugins`
+
+A mapping of plugin identifiers to version ranges, expressing intent for what to
+install. Keys use the vendor/plugin naming convention; values accept semantic
+version ranges or development versions like `dev-main`.
+
+### `repositories`
+
+An array of additional plugin sources to consult when resolving versions.
+
+> Not yet implemented.
diff --git a/docs/src/content/docs/en/plugins/reference/plugins-lock-json.mdx b/docs/src/content/docs/en/plugins/reference/plugins-lock-json.mdx
new file mode 100644
index 00000000..14d73e48
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/reference/plugins-lock-json.mdx
@@ -0,0 +1,57 @@
+---
+title: plugins-lock.json
+---
+
+`plugins-lock.json` records the exact versions and artifact locations that were
+resolved and installed, ensuring repeatable environments across machines and
+deployments. It is generated and updated by tooling, not hand-edited.
+
+## Example
+
+```json
+// manifest-lock.json
+{
+ "version": "1.0",
+ "plugins": {
+ "ad-aures/custom-rss": {
+ "version": "dev-main",
+ "source": {
+ "url": "https://github.com/ad-aures/castopod-plugins.git",
+ "reference": "20433933ab4e42bb44f8367ab72ee1ffae723019"
+ },
+ "dist": {
+ "url": "https://plugins.castopod.org/static/plugins/db/cf/15/ad-aures_custom-rss_dev-main.zip",
+ "path": "",
+ "checksum": "dbcf153694f09c5788e6cccbca2db4cb9605faa7c1399d59960edee00fa9f853"
+ }
+ }
+ // ...
+ }
+}
+```
+
+## Properties
+
+### `version`
+
+The lockfile schema version, used by tooling to parse and validate the file
+across releases; not related to any plugin version. Changing schema may alter
+field shapes or semantics.
+
+### `plugins`
+
+A mapping from a plugin identifier to a locked entry that captures the exact
+resolved version, the source and distribution details. This section is the
+authoritative record for reinstalls.
+
+Each plugin entry contains:
+
+ - `version`: The exact version (or branch reference such as dev-main) that was resolved and installed for this plugin, guaranteeing consistent reinstallation.
+
+ - `source`: Describes the canonical source of the plugin’s code used to produce the distribution artifact.
+ - `url`: The upstream Git repository.
+ - `path`: The root path of the plugin.
+ - `reference`: The exact commit or revision used, for provenance and reproducibility.
+ - `dist`: Points to the installable artifact and verifies its integrity.
+ - `url`: A direct link to the packaged plugin archive that the installer downloads.
+ - `checksum`: A cryptographic hash of the archive used to validate integrity and prevent tampering during install.
diff --git a/docs/src/content/docs/en/plugins/share.mdx b/docs/src/content/docs/en/plugins/share.mdx
new file mode 100644
index 00000000..c5c5f077
--- /dev/null
+++ b/docs/src/content/docs/en/plugins/share.mdx
@@ -0,0 +1,82 @@
+---
+title: Share your plugin
+---
+
+import { Aside } from "@astrojs/starlight/components";
+
+After taking some time to create your plugin, you may want to share it with the
+community for other podcasters to enjoy!
+
+You can choose to make your plugin discoverable by submitting it to the
+[official Castopod plugin repository](https://plugins.castopod.org/) so that
+other podcasters can install it in a few clicks or with one
+[CLI command](./install#cli).
+
+## Before submitting
+
+The official Castopod plugin repository has stricter requirements than than the
+ones needed for a plugin to merely load in Castopod; it also requires rich
+metadata to improve search, categorization, and discovery.
+
+
+
+### Requirements for the official repository
+
+**Your plugin must be hosted in a public Git repository.** Private or local
+repositories cannot be crawled or indexed by the official repository.
+
+Having said that, make sure to go through the following list to check that
+everything is ready for indexing.
+
+#### Required files
+
+- `manifest.json` with the following required properties:
+ - `name` (vendor/plugin)
+ - `version` (semantic version; must match a Git tag to be listed)
+ - `description` (one concise sentence)
+ - `minCastopodVersion` (minimum compatible Castopod version)
+ - `hooks` (declared hooks the plugin implements)
+ - `license` (SPDX identifier or license name, matching the LICENSE file)
+- `Plugin.php` (main class; implementing the declared hooks)
+- `LICENSE.md` (matches the license declared in the manifest)
+
+#### Optional (recommended)
+
+- `README.md` (what it does, install/config steps, usage examples, changelog,
+ etc.)
+- `icon.svg` (squared, readable at small sizes; displayed as a ~64x64 circle)
+
+#### Encouraged
+
+- `i18n/` translations (e.g., `en.json`, `fr.json`) to reach more users across
+ the globe!
+
+## Submit
+
+When everything is ready, submit at:
+[plugins.castopod.org/submit](https://plugins.castopod.org/submit)
+
+Provide the plugin’s Git repository URL and the path to its `manifest.json` if
+needed (the plugin’s root directory).
+
+## After submission
+
+The repository is queued for crawling; within a few moments, the plugin should
+be indexed.
+
+During crawling, automated checks validate structure and metadata; all Git tags
+are scanned and each release is bundled as a zip file and listed as a version.
+
+
diff --git a/docs/src/content/docs/en/user-guide/instance/fediverse.mdx b/docs/src/content/docs/en/user-guide/instance/fediverse.mdx
index 00b83a21..2f0a3a47 100644
--- a/docs/src/content/docs/en/user-guide/instance/fediverse.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/fediverse.mdx
@@ -6,30 +6,35 @@ title: Fediverse
Wikipedia defines the Fediverse as:
-> The fediverse is a collection of social networking services that can communicate with each other using a common
-> protocol, ActivityPub. Users of different websites can send and receive status updates, multimedia files and other
-> data across the network.
+> The fediverse is a collection of social networking services that can
+> communicate with each other using a common protocol, ActivityPub. Users of
+> different websites can send and receive status updates, multimedia files and
+> other data across the network.
-Your podcast is connected to the Fediverse and, for example, Mastodon users can subscribe to your handle and will
-receive a message every time your podcast publishes a new episode. You can also broadcast messages to your followers
-on the Fediverse from your [home page](../website#home). Mastodon users can like and share your posts.
+Your podcast is connected to the Fediverse and, for example, Mastodon users can
+subscribe to your handle and will receive a message every time your podcast
+publishes a new episode. You can also broadcast messages to your followers on
+the Fediverse from your [home page](../website#home). Mastodon users can like
+and share your posts.
## Manage Fediverse Blocks
-You can block a Fediverse user or an entire domain to help stop harassment or spam.
+You can block a Fediverse user or an entire domain to help stop harassment or
+spam.
### Blocked Accounts
-To block a specific Fediverse user, enter the user's handle in the **Account Handle** text box. It should be in
-the format of `@user@domain.com`. Press `Block` to block the user from following your podcast.
+To block a specific Fediverse user, enter the user's handle in the **Account
+Handle** text box. It should be in the format of `@user@domain.com`. Press
+`Block` to block the user from following your podcast.
-A list of all blocked accounts is shown below the **Account Handle** text box. You can choose to unblock a user
-by pressing the `Unblock` button.
+A list of all blocked accounts is shown below the **Account Handle** text box.
+You can choose to unblock a user by pressing the `Unblock` button.
### Blocked Domains
-To block an entire domain, enter the domain name such as `www.example.com` in the **Domain Name** field and press
-`Block`.
+To block an entire domain, enter the domain name such as `www.example.com` in
+the **Domain Name** field and press `Block`.
-A list of all blocked domains is shown below the **Domain Name** text box. You can choose to unblock a domain
-by pressing the `Unblock` button.
+A list of all blocked domains is shown below the **Domain Name** text box. You
+can choose to unblock a domain by pressing the `Unblock` button.
diff --git a/docs/src/content/docs/en/user-guide/instance/index.mdx b/docs/src/content/docs/en/user-guide/instance/index.mdx
index 0e55012d..4764871d 100644
--- a/docs/src/content/docs/en/user-guide/instance/index.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/index.mdx
@@ -6,15 +6,17 @@ import { LinkCard, CardGrid } from "@astrojs/starlight/components";
## What is an instance?
-Your podcast is hosted on your sever and connected to the [Fediverse](fediverse) in what is called an _instance_.
-Your instance can manage multiple podcasts, people and users, and host additional pages found on all of your podcasts.
+Your podcast is hosted on your sever and connected to the [Fediverse](fediverse)
+in what is called an _instance_. Your instance can manage multiple podcasts,
+people and users, and host additional pages found on all of your podcasts.
-Managing your instance, including podcasts, people, and users is separate from the settings for each
-individual podcast.
+Managing your instance, including podcasts, people, and users is separate from
+the settings for each individual podcast.
## Ready to get started?
-Learn more about adding podcasts, users, and more by clicking one of the links below.
+Learn more about adding podcasts, users, and more by clicking one of the links
+below.
diff --git a/docs/src/content/docs/en/user-guide/instance/pages.mdx b/docs/src/content/docs/en/user-guide/instance/pages.mdx
index e2a83265..b1e76248 100644
--- a/docs/src/content/docs/en/user-guide/instance/pages.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/pages.mdx
@@ -4,8 +4,8 @@ title: Pages
## Add Pages
-You can add static pages linked from your podcast's home page. From the left hand navigation, choose the `+` sign or
-click `Pages` -> `New Page`.
+You can add static pages linked from your podcast's home page. From the left
+hand navigation, choose the `+` sign or click `Pages` -> `New Page`.
### Title
@@ -13,16 +13,19 @@ In the **Title** text box, enter the name for the page you are adding.
### Permalink
-In the `Permalink` text box, enter the permalink if you want it different than the title.
+In the `Permalink` text box, enter the permalink if you want it different than
+the title.
### Content
-You can add your page content in the **Content** text box. You can use Markdown to style your text.
+You can add your page content in the **Content** text box. You can use Markdown
+to style your text.
-When finished, press the `Create page` button. You can view your page from your podcast's home page. It will be
-linked in the right hand side bar navigation.
+When finished, press the `Create page` button. You can view your page from your
+podcast's home page. It will be linked in the right hand side bar navigation.
## Delete or Edit a Page
-After adding a page, you can delete the page or edit it by choosing `Pages` -> `All Pages` from the instance
-navigation sidebar on the left. Press the corresponding button to view the page, edit it, or delete it.
+After adding a page, you can delete the page or edit it by choosing `Pages` ->
+`All Pages` from the instance navigation sidebar on the left. Press the
+corresponding button to view the page, edit it, or delete it.
diff --git a/docs/src/content/docs/en/user-guide/instance/persons.mdx b/docs/src/content/docs/en/user-guide/instance/persons.mdx
index ce17ec1d..7adb60da 100644
--- a/docs/src/content/docs/en/user-guide/instance/persons.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/persons.mdx
@@ -2,21 +2,29 @@
title: Manage Podcast contributors
---
-The **Persons** section allows you to add podcast contributors. It is needed in the Podcast section to assign
-roles and is also used on the **Credits** page linked from your podcast's homepage.
+The **Persons** section allows you to add podcast contributors. It is needed in
+the Podcast section to assign roles and is also used on the **Credits** page
+linked from your podcast's homepage. When Persons are assigned to a specific
+episode, there will be a link on the episode's page to list all persons
+assigned.
-From the left hand navigation, press `Persons` to expand the menu. To view a list of all people that have been
-added to Castopod, press `All Persons`.
+A Person must be created in the **Persons** section before it can be
+[assigned to an episode](../podcast/episodes#persons).
+
+From the left hand navigation, press `Persons` to expand the menu. To view a
+list of all people that have been added to Castopod, press `All Persons`.
## Add a person
-To add a person, press `New Person` from the left hand sidebar or press `Create a person` from the upper right hand
-corner of the **All Persons** page and fill out the following fields:
+To add a person, press `New Person` from the left hand sidebar or press
+`Create a person` from the upper right hand corner of the **All Persons** page
+and fill out the following fields:
-- **Avatar**: You can optionally add a picture or avatar of the person. Press `Choose File` and upload a picture
- from your computer. It must be at least 400px wide and tall.
+- **Avatar**: You can optionally add a picture or avatar of the person. Press
+ `Choose File` and upload a picture from your computer. It must be at least
+ 400px wide and tall.
- **Full Name**: Enter the name as you want it displayed on your website.
-- **Unique Name**: Enter a unique username for the person you are adding. This will be displayed in the Podcasts
- secton when assigning this person a role.
-- **Information URL**: Enter a URL for the person's homepage, profile, or social media account to be linked from the
- [Credits page](../website/credits).
+- **Unique Name**: Enter a unique username for the person you are adding. This
+ will be displayed in the Podcasts secton when assigning this person a role.
+- **Information URL**: Enter a URL for the person's homepage, profile, or social
+ media account to be linked from the [Credits page](../website/credits).
diff --git a/docs/src/content/docs/en/user-guide/instance/podcast.mdx b/docs/src/content/docs/en/user-guide/instance/podcast.mdx
index 8b9fd8fe..554c8d70 100644
--- a/docs/src/content/docs/en/user-guide/instance/podcast.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/podcast.mdx
@@ -2,19 +2,23 @@
title: Create or import a podcast
---
-You can create a new podcast or import an existing podcast into Castopod in the Podcasts section. If you are adding
-a second podcast to Castopod, see the [Home page documentation](../website#home-page) for how that will change your
+import { Aside } from "@astrojs/starlight/components";
+
+You can create a new podcast or import an existing podcast into Castopod in the
+Podcasts section. If you are adding a second podcast to Castopod, see the
+[Home page documentation](../website#home-page) for how that will change your
home page.
-From the left hand navigation sidebar, press the `+` sign to the right of Podcasts to create your first podcast.
+From the left hand navigation sidebar, press the `+` sign to the right of
+Podcasts to create your first podcast.
## Podcast Identity
### Podcast Cover
-To upload your podcast cover art, press the `Choose File` button and choose your cover art from your computer. The
-cover art needs to be in JPG or PNG format and a minimum of 1400px wide and tall with a maximum of 3000px wide and
-tall.
+To upload your podcast cover art, press the `Choose File` button and choose your
+cover art from your computer. The cover art needs to be in JPG or PNG format and
+a minimum of 1400px wide and tall with a maximum of 3000px wide and tall.
### Title
@@ -22,13 +26,15 @@ Enter the name of your podcast in the **Title** field.
### Description
-Describe what your podcast is about. You can use Markdown to style the text and you can resize the text box by
-pressing and holding the bottom right hand corner of the text box.
+Describe what your podcast is about. You can use Markdown to style the text and
+you can resize the text box by pressing and holding the bottom right hand corner
+of the text box.
### Type
-Choose how your listeners should listen to your podcast. **Episodic** lets listeners know they can consume your podcast
-in any order, such as an interview podcast. Choose **Serial** if your episodes are meant to be listened to in
+Choose how your listeners should listen to your podcast. **Episodic** lets
+listeners know they can consume your podcast in any order, such as an interview
+podcast. Choose **Serial** if your episodes are meant to be listened to in
sequential order.
### Medium
@@ -36,8 +42,10 @@ sequential order.
Choose the type of audio for your podcast:
- **Podcast**: a standard podcast.
-- **Music**: A feed of music organized into an "album" with each item a song within the album.
-- **Audiobook**: A specific type of audio with one item per feed, or where items represent chapters within a book.
+- **Music**: A feed of music organized into an "album" with each item a song
+ within the album.
+- **Audiobook**: A specific type of audio with one item per feed, or where items
+ represent chapters within a book.
## Classification
@@ -47,7 +55,8 @@ From the dropdown menu, choose which language is spoken in your podcast.
### Category
-Choose the category that represents your podcast, such as Arts, Comedy, Technology, etc.
+Choose the category that represents your podcast, such as Arts, Comedy,
+Technology, etc.
### Other categories (optional)
@@ -55,21 +64,25 @@ You can choose a second category in addition to the main category you set up.
### Parental advisory
-Choose if your podcast has explicit content or swearing or choose Clean if your podcast is suitable for everyone. You
-can also choose to leave this category as undefined. When [creating a new episode](../podcast/episodes),
-you will also have the opportunity to choose clean, explicit, or undefined on a per episode basis.
+Choose if your podcast has explicit content or swearing or choose Clean if your
+podcast is suitable for everyone. You can also choose to leave this category as
+undefined. When [creating a new episode](../podcast/episodes), you will also
+have the opportunity to choose clean, explicit, or undefined on a per episode
+basis.
## Author
### Owner name and email
-Enter the owner name and email in the provided fields. This is only visible in the RSS feed and is used by other
-podcasting platforms to verify your ownership of your podcast. You can choose to remove the owner email
-from the public RSS feed by using the provided toggle.
+Enter the owner name and email in the provided fields. This is only visible in
+the RSS feed and is used by other podcasting platforms to verify your ownership
+of your podcast. You can choose to remove the owner email from the public RSS
+feed by using the provided toggle.
### Publisher
-If your podcast is part of a podcast network or is produced by a company, enter the publisher here.
+If your podcast is part of a podcast network or is produced by a company, enter
+the publisher here.
### Copyright
@@ -77,69 +90,86 @@ You can optionally add the copyright holder in this field.
### Fediverse identity
-Enter the handle (or nickname) for your podcast. This will allow people on Mastodon and other Fediverse services
-to follow your podcast. Your handle will be shown as @yourdomain.com@handle on the Fediverse.
+Enter the handle (or nickname) for your podcast. This will allow people on
+Mastodon and other Fediverse services to follow your podcast. Your handle will
+be shown as @yourdomain.com@handle on the Fediverse.
-To learn more about Fediverse integration, visit the [Fediverse documentation page](../instance/fediverse).
+To learn more about Fediverse integration, visit the
+[Fediverse documentation page](../instance/fediverse).
### Podcast banner
-Upload a banner image to be displayed at the top of your podcast's home page. The banner must have a 3:1 ration and
-be at least 1500px wide.
+Upload a banner image to be displayed at the top of your podcast's home page.
+The banner must have a 3:1 ratio and be at least 1500px wide.
### Premium
-Toggle this setting to set all episodes by default as premium. When creating an episode, it will default to premium,
-and you can still choose to make some episodes, trailers, or bonus content as free and public.
+Toggle this setting to set all episodes by default as premium. When creating an
+episode, it will default to premium, and you can still choose to make some
+episodes, trailers, or bonus content as free and public.
## Open Podcast Prefix Project (OP3)
-The [Open Podcast Prefix Project](https://op3.dev) is an open source and trusted third party analytics service. If
-you toggle this to enabled, you will be able to view analytics for your podcast over time including the number of
-listens over time, episode comparison charts, and more.
+The [Open Podcast Prefix Project](https://op3.dev) is an open source and trusted
+third party analytics service. If you toggle this to enabled, you will be able
+to view analytics for your podcast over time including the number of listens
+over time, episode comparison charts, and more.
## Location
You can optionally add a real or fictitious location name in this field. When
-[creating a new episode](../podcast/episodes) you also can add a location to an individual episode.
+[creating a new episode](../podcast/episodes) you also can add a location to an
+individual episode.
## Advanced Parameters
You can optinally toggle the following settings:
-- **Prevent podcast from being copied**: this locks your podcast and does not allow other podcast platforms to import
- your podcast. If you decide in the future to migrate away from Castopod to a new platform, this toggle will need to be
- unchecked.
-- **Podcast should be hidden from public catalogues**: If toggled, a best effort is made to hide the entire podcast from
- appearing in Apple Podcasts, YouTube Music, and any other third party podcast apps. (Not guaranteed)
-- **Podcast will not be having new episodes**: If your podcast comes to an end, you can toggle this to let listeners
- know there will not be new episodes.
+- **Prevent podcast from being copied**: this locks your podcast and does not
+ allow other podcast platforms to import your podcast. If you decide in the
+ future to migrate away from Castopod to a new platform, this toggle will need
+ to be unchecked.
+- **Podcast should be hidden from public catalogues**: If toggled, a best effort
+ is made to hide the entire podcast from appearing in Apple Podcasts, YouTube
+ Music, and any other third party podcast apps. (Not guaranteed)
+- **Podcast will not be having new episodes**: If your podcast comes to an end,
+ you can toggle this to let listeners know there will not be new episodes.
## Import an existing podcast
-When importing a podcast, make sure you own the rights for this podcast before importing it.
-Copying and broadcasting a podcast without the proper rights is piracy and is liable to prosecution.
+When importing a podcast, make sure you own the rights for this podcast before
+importing it. Copying and broadcasting a podcast without the proper rights is
+piracy and is liable to prosecution.
### Import the podcast
-To import a podcast, enter the podcast's **Feed URL**. The feed must be in XML or RSS format. You may want to validate
-the feed to make sure there are no errors in the RSS or XML feed prior to importing as errors may cause the import
-to fail. One popular feed validator is [Cast Feed Validator](https://www.castfeedvalidator.com) from
-Blubrry Podcasting.
+To import a podcast, enter the podcast's **Feed URL**. The feed must be in XML
+or RSS format. You may want to validate the feed to make sure there are no
+errors in the RSS or XML feed prior to importing as errors may cause the import
+to fail. One popular feed validator is
+[Cast Feed Validator](https://www.castfeedvalidator.com) from Blubrry
+Podcasting.
### Podcast information
-Enter the handle for your podcast. This will be part of the URL for others to interact with your podcast on the
-Fediverse. It will be yourdomain.com@nameofyourpodcast.
+Enter the handle for your podcast. This will be part of the URL for others to
+interact with your podcast on the Fediverse. It will be
+yourdomain.com@nameofyourpodcast.
Choose the language your podcast is recorded in from the drop down box.
-Lastly, choose the Category of your podcast, such as Sports, Technology, Arts, etc.
+Lastly, choose the Category of your podcast, such as Sports, Technology, Arts,
+etc.
-When complete, click Add import to queue. You will then be redirected to a Podcast imports page to view the status
-of the import. You can refresh the page to see the status of the import including the import duration and how many
+When complete, click Add import to queue. You will then be redirected to a
+Podcast imports page to view the status of the import. You can refresh the page
+to see the status of the import including the import duration and how many
episodes were imported when complete.
-!!! note
-If your import times out, check your `max_execution_time` in your `PHP.ini` file. You may need to increase it
-from 30 seconds (the default) to add more time, such as 300 seconds (5 minutes) for larger podcasts.
+
diff --git a/docs/src/content/docs/en/user-guide/instance/settings.mdx b/docs/src/content/docs/en/user-guide/instance/settings.mdx
index 9ab8845c..91c1d911 100644
--- a/docs/src/content/docs/en/user-guide/instance/settings.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/settings.mdx
@@ -2,7 +2,8 @@
title: Settings
---
-To change or update the settings for your instance, choose `Settings` from the left hand navigation.
+To change or update the settings for your instance, choose `Settings` from the
+left hand navigation.
## General settings
@@ -18,21 +19,26 @@ Update description of your instance in the `Site description` text box.
#### Site icon
-You can upload a site icon, also known as a favicon, by pressing `Choose file`. Site icons are what you see
-on your browser tabs, bookmarks, and shortcuts on mobile devices. The image must be at least 500px tall and wide.
+You can upload a site icon, also known as a favicon, by pressing `Choose file`.
+Site icons are what you see on your browser tabs, bookmarks, and shortcuts on
+mobile devices. The image must be at least 500px tall and wide.
### Images
-If you come across broken or missing images on your site, press `Regenerate images`. This process may take time.
+If you come across broken or missing images on your site, press
+`Regenerate images`. This process may take time.
### Housekeeping
You can run various tasks for your instance:
-- **Reset counts**: This will reset and recalculate counts for followers, posts, and comments.
-- **Rename episode files**: This option renames all episodes files to a random name. If one of your private
- episodes leaks, toggle this setting to effectively hide the episode.
-- **Clear all cache**: This option will flush the Redis cache or writable / cache files.
+- **Reset counts**: This will reset and recalculate counts for followers, posts,
+ and comments.
+- **Rename episode files**: This option renames all episodes files to a random
+ name. If one of your private episodes leaks, toggle this setting to
+ effectively hide the episode.
+- **Clear all cache**: This option will flush the Redis cache or writable /
+ cache files.
## Theme
diff --git a/docs/src/content/docs/en/user-guide/instance/users.mdx b/docs/src/content/docs/en/user-guide/instance/users.mdx
index 1c48d32d..6592d64a 100644
--- a/docs/src/content/docs/en/user-guide/instance/users.mdx
+++ b/docs/src/content/docs/en/user-guide/instance/users.mdx
@@ -2,15 +2,19 @@
title: Users
---
-Roles and permissions in Castopod are defined in two ways, **Instance** users and
-[**Podcast**. contributors](../podcast/contributors). For a detailed list of permissions, view
-he [Auth](../../getting-started/auth) page.
+Roles and permissions in Castopod are defined in two ways, **Instance** users
+and [**Podcast**. contributors](../podcast/contributors). For a detailed list of
+permissions, view the [Auth](../../getting-started/auth) page.
## Adding a User to the instance
-You can add a user to your instance by choosing `Users` -> `New User` from the left hand navigation menu. There
-are three roles you can assign to an instance user:
+You can add a user to your instance by choosing `Users` -> `New User` from the
+left hand navigation menu. There are three roles you can assign to an instance
+user:
-- **Super Admin**: This user has complete control over Castopod including adding or removing podcasts or users.
-- **Manager**: This user can manage Castopod's content, such as adding or importing a new podcast and managing people.
-- **Podcaster**: This is for general users of Castopod who can access the admin interface.
+- **Super Admin**: This user has complete control over Castopod including adding
+ or removing podcasts or users.
+- **Manager**: This user can manage Castopod's content, such as adding or
+ importing a new podcast and managing people.
+- **Podcaster**: This is for general users of Castopod who can access the admin
+ interface.
diff --git a/docs/src/content/docs/en/user-guide/podcast/analytics.mdx b/docs/src/content/docs/en/user-guide/podcast/analytics.mdx
index bab83578..30228427 100644
--- a/docs/src/content/docs/en/user-guide/podcast/analytics.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/analytics.mdx
@@ -2,22 +2,24 @@
title: Analytics
---
-Castopod comes with a number of different analytics and statistics about your podcast(s). From the left hand
-navigation, choose `Analytics` to view the various options.
+Castopod comes with a number of different analytics and statistics about your
+podcast(s). From the left hand navigation, choose `Analytics` to view the
+various options.
## Audience overview
-This page provides an overview of your episode's daily downloads, monthly downloads, and daily bandwidth used.
+This page provides an overview of your episode's daily downloads, monthly
+downloads, and daily bandwidth used.
## Unique listeners
-View graphs of the number of daily and monthly users of your podcast. Use the zoom function at the top of each
-graph to zoom in or out.
+View graphs of the number of daily and monthly users of your podcast. Use the
+zoom function at the top of each graph to zoom in or out.
## Listening time
-View graphs of your listener's daily and monthly cumulative listening time. Use the zoom function at the top of each
-graph to zoom in or out.
+View graphs of your listener's daily and monthly cumulative listening time. Use
+the zoom function at the top of each graph to zoom in or out.
## Players
@@ -28,8 +30,9 @@ This page provides four pie charts to view statistics for the last week:
- Episode downloads by device
- Episode downloads by operating system
-You can hover over each graph and press the three dots to download statistics for the graph you are hovering over.
-You can interact with the graphs to download or print:
+You can hover over each graph and press the three dots to download statistics
+for the graph you are hovering over. You can interact with the graphs to
+download or print:
- Image (PNG, JPG, SVG, or PDF)
- Data (JSON, CSV, XLSX, HTML, or PDF)
@@ -37,13 +40,15 @@ You can interact with the graphs to download or print:
## Locations
-You can view where your listeners are located by choosing _Locations_. Two pie charts are available showing
-episode downloads by country for the past week and past year. At the bottom of the page, you can view a world map
-showing your listener's locations.
+You can view where your listeners are located by choosing _Locations_. Two pie
+charts are available showing episode downloads by country for the past week and
+past year. At the bottom of the page, you can view a world map showing your
+listener's locations.
## Time periods
-Two bar graphs displaying the week day and time of day your listeners listen to your podcsat.
+Two bar graphs displaying the week day and time of day your listeners listen to
+your podcsat.
## Web pages visits
diff --git a/docs/src/content/docs/en/user-guide/podcast/broadcast.mdx b/docs/src/content/docs/en/user-guide/podcast/broadcast.mdx
index f54cb499..9d37d3bc 100644
--- a/docs/src/content/docs/en/user-guide/podcast/broadcast.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/broadcast.mdx
@@ -4,31 +4,35 @@ title: Broadcast your podcast
## Add your podcast to podcast directories
-Listeners can add your RSS feed to their podcast app of choice to subscribe to your podcast. Most listeners will
-find your podcast in a podcast directory, such as Apple Podcasts, YouTube Music, Spotify, or the Podcast Index.
-These four are the most popular podcast directories and a number of other directories pull their data from Apple
-Podcasts.
+Listeners can add your RSS feed to their podcast app of choice to subscribe to
+your podcast. Most listeners will find your podcast in a podcast directory, such
+as Apple Podcasts, YouTube Music, Spotify, or the Podcast Index. These four are
+the most popular podcast directories and a number of other directories pull
+their data from Apple Podcasts.
-Visit [Podnews](https://podnews.net/article/all-the-podcast-directories) to learn how to add your podcast to
-most of the podcast directories.
+Visit [Podnews](https://podnews.net/article/all-the-podcast-directories) to
+learn how to add your podcast to most of the podcast directories.
-Once your podcast is listed in the podcast directories, you can link to them on your home page by choosing
-`Broadcast` from the left hand navigation.
+Once your podcast is listed in the podcast directories, you can link to them on
+your home page by choosing `Broadcast` from the left hand navigation.
### Podcasting Apps
-Castopod provides the ability to link to a majority of podcast directories where users can find your podcast.
-For each directory listed fill out the link to your podcast in a specific directory and the ID. If you want
-an icon displayed on your home page, toggle `Display in podcast homepage?`.
+Castopod provides the ability to link to a majority of podcast directories where
+users can find your podcast. For each directory listed fill out the link to your
+podcast in a specific directory and the ID. If you want an icon displayed on
+your home page, toggle `Display in podcast homepage?`.
-After pressing `Save` in the upper right hand corner, visit your home page to see the icons with hyperlinks
-on the right hand side of your home page under _Listen on_.
+After pressing `Save` in the upper right hand corner, visit your home page to
+see the icons with hyperlinks on the right hand side of your home page under
+_Listen on_.
### Social Networks
-If your podcast has a presence on social networks, Castopod provides the ability to link to your social network
-profiles. Add the link to your profile page in the text field and toggle if you want it displayed on your
-home page.
+If your podcast has a presence on social networks, Castopod provides the ability
+to link to your social network profiles. Add the link to your profile page in
+the text field and toggle if you want it displayed on your home page.
-After pressing `Save` in the upper right hand corner, visit your home page to see the icons with hyperlinks
-on the right hand side of your home page under _Find your podcast on_.
+After pressing `Save` in the upper right hand corner, visit your home page to
+see the icons with hyperlinks on the right hand side of your home page under
+_Find your podcast on_.
diff --git a/docs/src/content/docs/en/user-guide/podcast/contributors.mdx b/docs/src/content/docs/en/user-guide/podcast/contributors.mdx
index e57971ee..2bb44016 100644
--- a/docs/src/content/docs/en/user-guide/podcast/contributors.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/contributors.mdx
@@ -2,8 +2,9 @@
title: Contributors
---
-From the podcast dashboard, click **Contributors** to add or edit users to have access to the podcast and its settings.
-For a detailed list of permissions, view the [Auth](../../getting-started/auth) page.
+From the podcast dashboard, click **Contributors** to add or edit users to have
+access to the podcast and its settings. For a detailed list of permissions, view
+the [Auth](../../getting-started/auth) page.
## Roles
@@ -15,14 +16,15 @@ The admin user has complete control over the individual podcast.
### Editor
-The editor has access to management functions including podcast import, managing persons, creating or deleting
-episodes, and managing clips.
+The editor has access to management functions including podcast import, managing
+persons, creating or deleting episodes, and managing clips.
### Author
-The autorh can manage content of the podcast, but cannot publish an episode. They can manage
-[contributors](contributors), create clips, and create episodes.
+The autorh can manage content of the podcast, but cannot publish an episode.
+They can manage [contributors](contributors), create clips, and create episodes.
### Guest
-The guest can view the podcast dashboard and view episodes. They cannot edit or add any content.
+The guest can view the podcast dashboard and view episodes. They cannot edit or
+add any content.
diff --git a/docs/src/content/docs/en/user-guide/podcast/dashboard.mdx b/docs/src/content/docs/en/user-guide/podcast/dashboard.mdx
index 4ec7e608..309cb354 100644
--- a/docs/src/content/docs/en/user-guide/podcast/dashboard.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/dashboard.mdx
@@ -2,49 +2,59 @@
title: Podcast Dashboard
---
-When you choose your podcast from the Admin dashboard you will be redirected to the Podcast dashboard page.
+When you choose your podcast from the Admin dashboard you will be redirected to
+the Podcast dashboard page.
-The Podcast dashboard shows you up to five of the latest episodes, both those published and scheduled. You can click
-on any of these episodes to view them or click `See all episodes` to see a list of every episode.
+The Podcast dashboard shows you up to five of the latest episodes, both those
+published and scheduled. You can click on any of these episodes to view them or
+click `See all episodes` to see a list of every episode.
## Edit your podcast
-To edit your podcast, press `Edit podcast` in the upper right hand corner or `Edit podcast` in the left hand side
-navigation.
+To edit your podcast, press `Edit podcast` in the upper right hand corner or
+`Edit podcast` in the left hand side navigation.
-You can edit any of the [fields you filled out when creating your podcast](../instance/podcast).
+You can edit any of the
+[fields you filled out when creating your podcast](../instance/podcast).
When finished press the `Save podcast` button in the upper right hand corner.
-You can also choose to delete your podcast by pressing `Delete podcast` at the bottom of the Edit podcast page.
+You can also choose to delete your podcast by pressing `Delete podcast` at the
+bottom of the Edit podcast page.
## Manage persons
-If you have added people to Persons in the Admin dashboard, you can assign them a role here. People assigned roles
-will show up on the [Credits page](../website/credits) linked from your home page to give them
+If you have added people to Persons in the Admin dashboard, you can assign them
+a role here. People assigned roles will show up on the
+[Credits page](../website/credits) linked from your home page to give them
credit for contributing to the podcast.
-Roles include Administration, Audio production, cast, guests, hosts, writing, and more.
+Roles include Administration, Audio production, cast, guests, hosts, writing,
+and more.
-From the **Persons** drop down, choose the person you want to add. Then choose a role from the \*_Roles_ drop down and
-press `Add person(s)`.
+From the **Persons** drop down, choose the person you want to add. Then choose a
+role from the \*_Roles_ drop down and press `Add person(s)`.
-A list of all people assigned roles will be displayed. You can remove them by pressing the `Remove` button.
+A list of all people assigned roles will be displayed. You can remove them by
+pressing the `Remove` button.
Adding persons to your podcast populates the Credits page linked from your
[home page](../website).
## Podcast imports
-Podcast imports show you the status of a feed that you imported into Castopod, including the feed name,
-how long the import took, and how many episodes were imported. Under **Actions** you can try re-import the feed
-if the original import failed or delete the status message for the imported feed.
+Podcast imports show you the status of a feed that you imported into Castopod,
+including the feed name, how long the import took, and how many episodes were
+imported. Under **Actions** you can try re-import the feed if the original
+import failed or delete the status message for the imported feed.
-If the feed you imported has been updated after your import, press `Synchronize Feeds` in the upper right hand
-corner to import the missing episodes.
+If the feed you imported has been updated after your import, press
+`Synchronize Feeds` in the upper right hand corner to import the missing
+episodes.
## Sync feeds
-You can also synchronize missing episode from an imported feed by choosing `Sync Feeds` from the Podcast dashboard
-menu. The **Feed URL** should auto-populate if you have previously imported a feed. Press `Add to queue` to import
-any missing episodes from the feed.
+You can also synchronize missing episode from an imported feed by choosing
+`Sync Feeds` from the Podcast dashboard menu. The **Feed URL** should
+auto-populate if you have previously imported a feed. Press `Add to queue` to
+import any missing episodes from the feed.
diff --git a/docs/src/content/docs/en/user-guide/podcast/episodes.mdx b/docs/src/content/docs/en/user-guide/podcast/episodes.mdx
index 604ee60f..d24ce22f 100644
--- a/docs/src/content/docs/en/user-guide/podcast/episodes.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/episodes.mdx
@@ -2,130 +2,178 @@
title: Episodes
---
-From the left hand navigation, click **Episodes** and the menu will expand to **All Episodes** and **New Episode**.
+import { Aside } from "@astrojs/starlight/components";
+
+From the left hand navigation, click **Episodes** and the menu will expand to
+**All Episodes** and **New Episode**.
## All Episodes
-To view a list of all episodes, click `All Episodes`. Each episode will be displayed in a list with its name and
-notes, Visibility such as published or scheduled, and how many downloads and comments each episode has.
+To view a list of all episodes, click `All Episodes`. Each episode will be
+displayed in a list with its name and notes, Visibility such as published or
+scheduled, and how many downloads and comments each episode has.
### Actions and the Episode Dashboard
-Click the three dots under **Actions** to view a menu of options for an episode or click on an individual episode to
-view the available actions:
+Click the three dots under **Actions** to view a menu of options for an episode
+or click on an individual episode to view the available actions:
-- **Go to page**: This will redirect you to the public page of the episode and display the show notes.
-- **Edit**: This allows you to change the fields you filled when creating the episode (see below).
+- **Go to page**: This will redirect you to the public page of the episode and
+ display the show notes.
+- **Edit**: This allows you to change the fields you filled when creating the
+ episode (see below).
### Embeddable player
-Choose a theme color and press the copy button to the right of the text box to copy the
-code to your clipboard. Insert the code into a web page to display the episode.
+Choose a theme color and press the copy button to the right of the text box to
+copy the code to your clipboard. Insert the code into a web page to display the
+episode.
### Persons
-If you have added people in the Admin interface, you can choose a person and assign them a role, such
-as guest, for a given episode.
+If you have added [people in the Admin interface](../instance/persons), you can
+choose a person and assign them a role, such as guest, for a given episode. When
+persons are assigned to an episode, a link will be displayed on the episode page
+listing the person's name and role and they will be listed in the Credits page.
+Adding persons to an episode page is optional.
### Video clips and Soundbites
-The process to create a video clip and soundbite is the same. It may take a minute for the file to load and you
-will see the waveform.
+The process to create a video clip and soundbite is the same. It may take a
+minute for the file to load and you will see the waveform.
-A video clip will create an MP4 video of the audio with text from the transcript matched to the audio. A soundbite
-will create an audio clip.
+A video clip will create an MP4 video of the audio with text from the transcript
+matched to the audio. A soundbite will create an audio clip.
-Enter the name of the clip you want to create. Then drag the slider to where you want to start and end your
-video clip or soundbite. You can press the `Play` button to preview your clip.
+Enter the name of the clip you want to create. Then drag the slider to where you
+want to start and end your video clip or soundbite. You can press the `Play`
+button to preview your clip.
-For video clips, choose a format, including Landscape, Portrait or Squared and a background theme color.
+For video clips, choose a format, including Landscape, Portrait or Squared and a
+background theme color.
-Then press the `Create` button, you will be redirected to a status page displaying the status of creating the clip.
-Refresh the page to see if it's `Running` or completed. You may need to be patient depending on the length of the clip.
+Then press the `Create` button, you will be redirected to a status page
+displaying the status of creating the clip. Refresh the page to see if it's
+`Running` or completed. You may need to be patient depending on the length of
+the clip.
-:::note
-To create video clips and soundbites, your server must have `FFMPEG` installed and a transcript.
-:::
+
## Create episode
-To add an episode, press the `Add an episode button` in the upper right hand corner of the Episode dashboard or click
-`New episode` in the left hand navigation under `Episodes`.
+To add an episode, press the `Add an episode button` in the upper right hand
+corner of the Episode dashboard or click `New episode` in the left hand
+navigation under `Episodes`.
### Episode Info
#### Audio file
-Press the `Choose File` button to select the audio file to upload to Castopod. The audio file must be an mp3 or m4a
-file and cannot be larger than 512 megabytes.
+Press the `Choose File` button to select the audio file to upload to Castopod.
+The audio file must be an mp3 or m4a file and cannot be larger than 512
+megabytes.
### Episode cover
-You can optionally add a different podcast cover / artwork. Press `Choose File` and select an image from your computer
-that must be at least 1400px wide and tall and no larger than 3000px wide and tall. If you do not choose an
-episode cover, your default podcast artwork will be used.
+You can optionally add a different podcast cover / artwork. Press `Choose File`
+and select an image from your computer that must be at least 1400px wide and
+tall and no larger than 3000px wide and tall. If you do not choose an episode
+cover, your default podcast artwork will be used.
#### Title
-Enter the name for your new episode. Do not add the season or episode number in the **Title** field. Choose a clear
-and concise episode name to help your listeners.
+Enter the name for your new episode. Do not add the season or episode number in
+the **Title** field. Choose a clear and concise episode name to help your
+listeners.
#### Permalink
-The permalink is the link to the public episode page. This will be automatically filled out based on the title
-you entered above. If you wish to have a different permalink, press the edit button to the right of the
-displayed permalink.
+The permalink is the link to the public episode page. This will be automatically
+filled out based on the title you entered above. If you wish to have a different
+permalink, press the edit button to the right of the displayed permalink.
#### Season and Episode
-You can optionally add a season and / or episode number to your episode. If you are adding a new episode and a
-previous episode had a season and /or episode number, the field(s) will be auto filled for you. You can leave it or
-update with a different season and / or episode number.
+You can optionally add a season and / or episode number to your episode. If you
+are adding a new episode and a previous episode had a season and /or episode
+number, the field(s) will be auto filled for you. You can leave it or update
+with a different season and / or episode number.
### Show Notes
-Describe your episode in detail. You can use up to 4000 characters, and you can use Markdown to style your show
-notes. You can expand the text box by pressing and holding the bottom right corner of the text box.
+Describe your episode in detail. You can use up to 4000 characters, and you can
+use Markdown to style your show notes. You can expand the text box by pressing
+and holding the bottom right corner of the text box.
-When your show notes are complete, press `Preview` to view how your show notes will be displayed.
+When your show notes are complete, press `Preview` to view how your show notes
+will be displayed.
### Additional Files
#### Transcripts
-You can add a transcript to your episode by choosing a file in SRT or VTT format to upload. Transcripts will be
-shown in a tab on the episode page and some podcast apps such as Apple Podcasts can display the transcript.
-Transcripts help users who may have a hearing disability and can also help with search engine optimization.
+You can add a transcript to your episode by choosing a file in SRT or VTT format
+to upload. Transcripts will be shown in a tab on the episode page and some
+podcast apps such as Apple Podcasts can display the transcript. Transcripts help
+users who may have a hearing disability and can also help with search engine
+optimization.
#### Chapters
-You can optionally upload a chapters file in JSON format. To learn more about chapters and for an example of the
-correct format, visit the [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/chapters/jsonChapters.md).
+You can optionally upload a chapters file in JSON format. To learn more about
+chapters and for an example of the correct format, visit the
+[Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/examples/chapters/example.json).
-:::note
-Not all podcast players natively support chapters in JSON format. More modern players, such as Fountain and
-Apple Podcasts, do support chapters in JSON format. Chapters do not allow you to click to select the chapter
-in Castopod's embeddable player at this time.
-:::
+
### Publish your episode
-When complete, press the `Create episode` button at the bottom of the page. You will be automatically directed to
-the next step to publish your episode. Your episode is in draft mode and is not yet published. You can preview
-how your episode will look when published or publish your episode. To publish your episode, press the `Publish` button
-in the upper right hand corner.
+When complete, press the `Create episode` button at the bottom of the page. You
+will be automatically directed to the next step to publish your episode. Your
+episode is in draft mode and is not yet published. You can preview how your
+episode will look when published or publish your episode. To publish your
+episode, press the `Publish` button in the upper right hand corner.
### Create your announcement post
-After pressing `Publish` you will be directed to the next page to draft your announcement post. Write your message
-in the text box provided. This will be the message broadcast to the Fediverse and published on your podcast's home
-page.
+After pressing `Publish` you will be directed to the next page to draft your
+announcement post. Write your message in the text box provided. This will be the
+message broadcast to the Fediverse and published on your podcast's home page.
### Publication date
-Choose `Now` or `Schedule` to publish your episode. If you choose `Now`, your episode will be live. Or you can
-schedule the day and time to publish your episode by choosing the `Schedule` radio button and choosing the day and
-time. Press `Publish` to finish.
+Choose `Now` or `Schedule` to publish your episode. If you choose `Now`, your
+episode will be live. Or you can schedule the day and time to publish your
+episode by choosing the `Schedule` radio button and choosing the day and time.
+Press `Publish` to finish.
-Your RSS feed will be automatically updated with your episode information and listeners who subscribe will be
-notified of a new episode. Congratulations on publishing your first episode!
+Your RSS feed will be automatically updated with your episode information and
+listeners who subscribe will be notified of a new episode. Congratulations on
+publishing your first episode!
+
+## Editing an episode
+
+You can edit an episode before or after it is published. You can change any of
+the fields, including uploading a new episode, updating the show notes, or
+updating the transcripts or chapters. Select the episode you want to edit and
+choose `Edit Episode`. You can change just one field or multiple fields at the
+same time. After you have made the changes, press `Save Episode` in the upper
+right corner to finalize the changes.
+
+You can also edit the publication for the episode. Choose the episode again, and
+press `Edit Publication` in the upper right hand corner. Update the announcement
+post or publication date. When complete, press `Edit publication`. You can also
+choose to cancel the publication and it won't be published but will not be
+deleted.
diff --git a/docs/src/content/docs/en/user-guide/podcast/index.mdx b/docs/src/content/docs/en/user-guide/podcast/index.mdx
index 8f8eb2d1..c3482092 100644
--- a/docs/src/content/docs/en/user-guide/podcast/index.mdx
+++ b/docs/src/content/docs/en/user-guide/podcast/index.mdx
@@ -4,11 +4,12 @@ title: Manage Podcasts
import { LinkCard, CardGrid } from "@astrojs/starlight/components";
-From the Castopod admin interface, click **Podcasts** and then **All Podcasts** and you will be redirected to the
-podcast dashboard. This page displays the latest episodes, including any scheduled episodes.
+From the Castopod admin interface, click **Podcasts** and then **All Podcasts**
+and you will be redirected to the podcast dashboard. This page displays the
+latest episodes, including any scheduled episodes.
-From the podcast dashboard, you can add episodes, view analytics, add links to your homepage, and more. Learn more
-by clicking the links below.
+From the podcast dashboard, you can add episodes, view analytics, add links to
+your homepage, and more. Learn more by clicking the links below.
diff --git a/docs/src/content/docs/en/user-guide/website/index.mdx b/docs/src/content/docs/en/user-guide/website/index.mdx
index fe5bdd1d..9b45f749 100644
--- a/docs/src/content/docs/en/user-guide/website/index.mdx
+++ b/docs/src/content/docs/en/user-guide/website/index.mdx
@@ -2,64 +2,81 @@
title: Podcast Home Page
---
-The podcast home page is your landing page for your listeners to view episode announcements, messages, episodes,
-and links to where to find your podcast. If you have only one podcast, your users will be automatically redirected
-from your top level domain, such as `www.yourpodcast.com`, to the podcast page at
-`www.yourpodcast.com/yourpodcasthandle`.
+import { Aside } from "@astrojs/starlight/components";
-If you are hosting multiple podcasts, your top level page will display the artwork for each podcast. Clicking on
-the podcast artwork will take you to your podcast page at `www.yourpodcast.com/yourpodcasthandle`.
+The podcast home page is your landing page for your listeners to view episode
+announcements, messages, episodes, and links to where to find your podcast. If
+you have only one podcast, your users will be automatically redirected from your
+top level domain, such as `www.yourpodcast.com`, to the podcast page at
+`www.yourpodcast.com/@yourpodcasthandle`.
+
+If you are hosting multiple podcasts, your top level page will display the
+artwork for each podcast. Clicking on the podcast artwork will take you to your
+podcast page at `www.yourpodcast.com/@yourpodcasthandle`.
## Home Page
-If you are logged in to your podcast, you will see a strip across the top of the page with a link to the admin
-interface of your podcast, a bell that will show if you have any new notifications, and the user who is logged in.
-You can click on the user for quick access to your account, changing your password, or to log out.
+If you are logged in to your podcast, you will see a strip across the top of the
+page with a link to the admin interface of your podcast, a bell that will show
+if you have any new notifications, and the user who is logged in. You can click
+on the user for quick access to your account, changing your password, or to log
+out.
-:::note
-If you have multiple podcasts, you can click the user dropdown to switch to choose which podcast to interact with.
-If your account has access to two or more podcasts, pay attention to which podcast is broadcasting messages!
-:::
+
+
+Listeners can click the `Follow` button to follow any messages, including
+episode announcements, from a Fediverse app, such as Mastodon. After clicking
+`Follow` a pop-up box will be displayed where the user enterse their Fediverse
handle and then clicks `Proceed to follow`.
### Podcast RSS feed
-On the right hand side is a link to your RSS Podcast feed. Users can copy that and subscribe directly in their
-podcast app.
+On the right hand side is a link to your RSS Podcast feed. Users can copy that
+and subscribe directly in their podcast app.
### Social Networks
-Below the RSS feed is are icons that link to all of the social networks you toggled on in the
-[Broadcast](../podcast/broadcast#podcasting-apps) section of the podcast's admin section.
+Below the RSS feed is are icons that link to all of the social networks you
+toggled on in the [Broadcast](../podcast/broadcast#podcasting-apps) section of
+the podcast's admin section.
### Podcast Directories
-Below the social networking links is **Listen On** which displays icons linked to the podcast directories you
-toggled on in the [Broadcast](../podcast/broadcast#social-networks) section of the podcast's
-admin section.
+Below the social networking links is **Listen On** which displays icons linked
+to the podcast directories you toggled on in the
+[Broadcast](../podcast/broadcast#social-networks) section of the podcast's admin
+section.
## Activity
-The **Activity** tab is located directly under your podcast artwork is the default home page for your podcast. Website
-visitors are presented with a list of messages in chronological order. If you are logged in as a podcast
-administrator, you will see a text box where you can write a message to be broadcasted to your followers. If you
-include the episode URL, a preview of that episode will be included in your message.
+The **Activity** tab is located directly under your podcast artwork is the
+default home page for your podcast. Website visitors are presented with a list
+of messages in chronological order. If you are logged in as a podcast
+administrator, you will see a text box where you can write a message to be
+broadcasted to your followers. If you include the episode URL, a preview of that
+episode will be included in your message.
Below each message there are four icons:
-- **Comments**: This will show you the number of comments on a given message. Clicking this will show you all replies to
- your message. You can click the three dots to block a user or a domain in case of spam.
-- **Shares**: This shows the number of times your message was shared by other users.
+- **Comments**: This will show you the number of comments on a given message.
+ Clicking this will show you all replies to your message. You can click the
+ three dots to block a user or a domain in case of spam.
+- **Shares**: This shows the number of times your message was shared by other
+ users.
- **Favorites**: This shows how many people liked your message.
## Episodes
-The **Episodes** tab shows a list of all episode announcements you have shared. If you are using season numbers, it
-will default to the current season. Users can click the **Season** link above all of the messages for a dropdown menu
-to view past episodes by season.
+The **Episodes** tab shows a list of all episode announcements you have shared.
+If you are using season numbers, it will default to the current season. Users
+can click the **Season** link above all of the messages for a dropdown menu to
+view past episodes by season.
## About
@@ -67,7 +84,8 @@ The About tab shares general information about your podcast, including:
- Podcast description
- Podcast category
-- The [people](../podcast/dashboard#manage-persons) who contribute to the podcast
+- The [people](../podcast/dashboard#manage-persons) who contribute to the
+ podcast
- Statistics
- Number of seasons
- Number of episodes
diff --git a/docs/src/content/docs/es/getting-started/auth.mdx b/docs/src/content/docs/es/getting-started/auth.mdx
index 8862b4b0..208a243d 100644
--- a/docs/src/content/docs/es/getting-started/auth.mdx
+++ b/docs/src/content/docs/es/getting-started/auth.mdx
@@ -13,24 +13,25 @@ niveles:
### Roles de instancia
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super administrador | Tiene control completo sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Administrador | Administrar contenido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Usuarios generales de Castopod. | admin.access |
+| role | description | permissions |
+| ------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super administrador | Tiene control completo sobre Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Administrador | Administrar contenido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Usuarios generales de Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Permisos de instancia
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------------------ |
| admin.access | Puedes acceder al área de administración de Castopod. |
| admin.settings | Puede acceder a la configuración de Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Puede administrar usuarios de Castopod. |
| persons.manage | Puede administrar personas. |
| pages.manage | Puede administrar páginas. |
@@ -39,13 +40,13 @@ niveles:
| podcasts.import | Puede importar podcasts. |
| fediverse.manage-blocks | Puedes bloquear la interacción de actores/dominios del fediverso con Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Permisos y roles por podcast
### Roles por podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ niveles:
| Autor | Gestiona el contenido del podcast #\{id\} pero no puede publicarlo. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Invitado | Colaborador general del podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Permisos por podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ niveles:
| episodes.manage-publications | Puede publicar/despublicar episodios y publicaciones del podcast #\{id\}. |
| episodes.manage-comments | Puede crear/eliminar los comentarios de episodio del podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/es/getting-started/docker.mdx b/docs/src/content/docs/es/getting-started/docker.mdx
index af60d871..2ccfd7d0 100644
--- a/docs/src/content/docs/es/getting-started/docker.mdx
+++ b/docs/src/content/docs/es/getting-started/docker.mdx
@@ -12,7 +12,8 @@ construcción automatizada:
- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server): una
configuración de Nginx para Castopod
-Adicionalmente, Castopod requiere una base de datos compatible con MySQL. También se puede añadir una base de datos Redis como gestor de caché.
+Adicionalmente, Castopod requiere una base de datos compatible con MySQL.
+También se puede añadir una base de datos Redis como gestor de caché.
## Etiquetas admitidas
diff --git a/docs/src/content/docs/es/getting-started/install.mdx b/docs/src/content/docs/es/getting-started/install.mdx
index d2b9b571..688b9562 100644
--- a/docs/src/content/docs/es/getting-started/install.mdx
+++ b/docs/src/content/docs/es/getting-started/install.mdx
@@ -10,15 +10,15 @@ compatibles con PHP-MySQL.
## Requisitos
-- PHP v8.1 or higher
-- MySQL versión 5.7 o superior o MariaDB versión 10.2 o superior
+- PHP v8.5 or higher
+- MySQL versión 8.4 o superior o MariaDB versión 11.4 o superior
- Soporte HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/es/getting-started/update.mdx b/docs/src/content/docs/es/getting-started/update.mdx
index ac804bd5..c4fa9178 100644
--- a/docs/src/content/docs/es/getting-started/update.mdx
+++ b/docs/src/content/docs/es/getting-started/update.mdx
@@ -34,8 +34,7 @@ de errores 🐛 y mejoras de rendimiento ⚡.
@@ -78,9 +77,9 @@ Alternativamente, puedes encontrar la versión en el archivo
### No he actualizado mi instancia en mucho tiempo… ¿Qué debo hacer?
-No problem! Just get the latest release as described above. Simplemente cuando vaya a través de las instrucciones de lanzamiento (4),
-realice la actualización secuencialmente, desde el más antiguo hasta el más
-reciente.
+No problem! Just get the latest release as described above. Simplemente cuando
+vaya a través de las instrucciones de lanzamiento (4), realice la actualización
+secuencialmente, desde el más antiguo hasta el más reciente.
> Puede que quieras hacer una copia de seguridad de tu instancia dependiendo del
> tiempo que no hayas actualizado Castopod.
diff --git a/docs/src/content/docs/es/index.mdx b/docs/src/content/docs/es/index.mdx
index 01d16e2a..576dd341 100644
--- a/docs/src/content/docs/es/index.mdx
+++ b/docs/src/content/docs/es/index.mdx
@@ -15,15 +15,15 @@ Castopod es fácil de instalar y se ha desarrollado sobre
## Características
- 🌱 Gratis & de código abierto (licencia AGPL v3).
-- 🔐 Centrado en la soberanía de los datos: tu contenido, tu audiencia, y
- tus estadísticas te pertenecen a ti y solo a ti.
+- 🔐 Centrado en la soberanía de los datos: tu contenido, tu audiencia, y tus
+ estadísticas te pertenecen a ti y solo a ti.
- 🪄 Funciones de Podcasting 2.0: GUID (interfaz gráfica de usuario),
protección y bloqueo del podcast, transcripciones, monetización, episodios,
geo-localización, personas, fragmentos de audio, …
- 💬 Integración con redes sociales:
- 🚀 Castopod es parte del Fediverso, una red social descentralizada
- - ❤️ Se puede crear mensajes, compartir, agregar a favoritos y comentar
- en episodios
+ - ❤️ Se puede crear mensajes, compartir, agregar a favoritos y comentar en
+ episodios
- 📈 Análisis estadísticos integrados:
- ⚖️ Compatible con GDPR / CCPA / LGPD
- 🪙 Medida de audiencia con el estándar IABv2
@@ -35,8 +35,8 @@ Castopod es fácil de instalar y se ha desarrollado sobre
- 🎬 Generar recortes de vídeo listos para compartir, a partir de tus
episodios
- 🔉 Generate soundbites
- - ▶️ Reproductor incrustable, con el que insertar tus episodios en
- cualquier sitio web!
+ - ▶️ Reproductor incrustable, con el que insertar tus episodios en cualquier
+ sitio web!
- 💸 Monetización:
- 🔗 Enlaces de financiación
- 📲 Anuncios publicitarios del tipo click-para-escuchar
@@ -44,17 +44,17 @@ Castopod es fácil de instalar y se ha desarrollado sobre
contenido).
- 💎 Premium podcasts
- 📡 Publica tus episodios en todas partes con RSS:
- - 📱 En todos los directorios y aplicaciones: Podcast Index, Apple
- Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 En todos los directorios y aplicaciones: Podcast Index, Apple Podcasts,
+ Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Emite tus episodios al instante con WebSub.
-- 📥 Importación de podcasts: mueve tu podcast existente en otro servicio
- a tu servidor Castopod.
+- 📥 Importación de podcasts: mueve tu podcast existente en otro servicio a tu
+ servidor Castopod.
- 📤 Mueve tu podcast fuera de Castopod.
- 🔀 Multi-podcast: aloja tantos podcasts como quieras en una misma
instancia/panel de CASTOPOD.
- 👥 Multi-usuario: añade colaboradores y define roles.
-- 🌎 Soporte multilingüe i18n: traducido al Inglés, Francés, Polaco,
- Alemán, Portugués brasileño, Español, Noruego, … ¡y
+- 🌎 Soporte multilingüe i18n: traducido al Inglés, Francés, Polaco, Alemán,
+ Portugués brasileño, Español, Noruego, … ¡y
[más por venir](https://translate.castopod.org)!
## Motivación
@@ -140,7 +140,8 @@ Each of these solutions differ from one another, you may compare with the
That being said, there are two main differences with other podcasting solutions:
- Castopod puede ser auto-hospedado en tu propio servidor y es la única solución
- que te permite mantener un control completo sobre los contenidos que produces. También, como es de código abierto, puedes incluso personalizarlo como desees
+ que te permite mantener un control completo sobre los contenidos que produces.
+ También, como es de código abierto, puedes incluso personalizarlo como desees
y necesites.
- Castopod es la única solución que hasta el momento integra tanto una red
diff --git a/docs/src/content/docs/eu/getting-started/auth.mdx b/docs/src/content/docs/eu/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/eu/getting-started/auth.mdx
+++ b/docs/src/content/docs/eu/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/eu/getting-started/docker.mdx b/docs/src/content/docs/eu/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/eu/getting-started/docker.mdx
+++ b/docs/src/content/docs/eu/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/eu/getting-started/install.mdx b/docs/src/content/docs/eu/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/eu/getting-started/install.mdx
+++ b/docs/src/content/docs/eu/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/eu/index.mdx b/docs/src/content/docs/eu/index.mdx
index a2747fe8..dc77399c 100644
--- a/docs/src/content/docs/eu/index.mdx
+++ b/docs/src/content/docs/eu/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/fa/getting-started/auth.mdx b/docs/src/content/docs/fa/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/fa/getting-started/auth.mdx
+++ b/docs/src/content/docs/fa/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/fa/getting-started/docker.mdx b/docs/src/content/docs/fa/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/fa/getting-started/docker.mdx
+++ b/docs/src/content/docs/fa/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/fa/getting-started/install.mdx b/docs/src/content/docs/fa/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/fa/getting-started/install.mdx
+++ b/docs/src/content/docs/fa/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/fa/index.mdx b/docs/src/content/docs/fa/index.mdx
index 2f23ff9b..4432a5d8 100644
--- a/docs/src/content/docs/fa/index.mdx
+++ b/docs/src/content/docs/fa/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/fr-ca/getting-started/auth.mdx b/docs/src/content/docs/fr-ca/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/fr-ca/getting-started/auth.mdx
+++ b/docs/src/content/docs/fr-ca/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/fr-ca/getting-started/docker.mdx b/docs/src/content/docs/fr-ca/getting-started/docker.mdx
index 08b0e02b..1f39e0ae 100644
--- a/docs/src/content/docs/fr-ca/getting-started/docker.mdx
+++ b/docs/src/content/docs/fr-ca/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/fr-ca/getting-started/install.mdx b/docs/src/content/docs/fr-ca/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/fr-ca/getting-started/install.mdx
+++ b/docs/src/content/docs/fr-ca/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/fr-ca/index.mdx b/docs/src/content/docs/fr-ca/index.mdx
index d6c18b5d..2efbd0a3 100644
--- a/docs/src/content/docs/fr-ca/index.mdx
+++ b/docs/src/content/docs/fr-ca/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/fr/getting-started/auth.mdx b/docs/src/content/docs/fr/getting-started/auth.mdx
index 627e61d7..2109a120 100644
--- a/docs/src/content/docs/fr/getting-started/auth.mdx
+++ b/docs/src/content/docs/fr/getting-started/auth.mdx
@@ -13,24 +13,25 @@ autorisations sont définis sur deux niveaux :
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| -------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super administrat·rice·eur | A un contrôle complet sur Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Gestionnaire | Gère le contenu de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Utilisateurs généraux de Castopod. | admin.access |
+| role | description | permissions |
+| -------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super administrat·rice·eur | A un contrôle complet sur Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Gestionnaire | Gère le contenu de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcast·rice·eur | Utilisateurs généraux de Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Autorisations dans l'instance
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | -------------------------------------------------------------------- |
| admin.access | Peut accéder à la zone d'administration Castopod. |
| admin.settings | Peut accéder aux paramètres de Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Peut gérer les utilisateurs de Castopod. |
| persons.manage | Permet de gérer les personnes. |
| pages.manage | Permet de gérer les pages. |
@@ -39,13 +40,13 @@ autorisations sont définis sur deux niveaux :
| podcasts.import | Peut importer des podcasts. |
| fediverse.manage-blocks | Peut empêcher des act·rice·eur·s/domaines d'interagir avec Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Rôles et autorisations par podcast
### Rôles par podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ---------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ autorisations sont définis sur deux niveaux :
| Auteur / Autrice | Gère le contenu du podcast #\{id\} , mais ne peut pas le publier. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Invité | Contributeur général du podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Permissions par podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ autorisations sont définis sur deux niveaux :
| episodes.manage-publications | Peut publier/dépublier des épisodes et des messages de podcast #\{id\}. |
| episodes.manage-comments | Peut créer/supprimer les commentaires de l'épisode du podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/fr/getting-started/docker.mdx b/docs/src/content/docs/fr/getting-started/docker.mdx
index fdaaf71c..22270b6a 100644
--- a/docs/src/content/docs/fr/getting-started/docker.mdx
+++ b/docs/src/content/docs/fr/getting-started/docker.mdx
@@ -92,8 +92,8 @@ de données Redis peut être ajoutée en tant que gestionnaire de cache.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/fr/getting-started/install.mdx b/docs/src/content/docs/fr/getting-started/install.mdx
index 6adf243b..9bfe50ff 100644
--- a/docs/src/content/docs/fr/getting-started/install.mdx
+++ b/docs/src/content/docs/fr/getting-started/install.mdx
@@ -10,15 +10,15 @@ serveurs web compatibles avec PHP-MySQL.
## Prérequis
-- PHP v8.1 ou supérieure
-- MySQL version 5.7 ou supérieure ou MariaDB version 10.2 ou supérieure
+- PHP v8.5 ou supérieure
+- MySQL version 8.4 ou supérieure ou MariaDB version 11.4 ou supérieure
- Prise en charge HTTPS
- Une horloge [synchronisée ntp](https://wiki.debian.org/NTP) pour valider les
requêtes fédérés entrantes
-### PHP v8.1 ou supérieure
+### PHP v8.5 ou supérieure
-PHP version 8.1 ou supérieure est requise, avec les extensions suivantes
+PHP version 8.5 ou supérieure est requise, avec les extensions suivantes
installées :
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
diff --git a/docs/src/content/docs/fr/getting-started/update.mdx b/docs/src/content/docs/fr/getting-started/update.mdx
index d8cea00c..096081ca 100644
--- a/docs/src/content/docs/fr/getting-started/update.mdx
+++ b/docs/src/content/docs/fr/getting-started/update.mdx
@@ -35,8 +35,7 @@ corrections de bugs 🐛 et des améliorations de performance ⚡.
diff --git a/docs/src/content/docs/fr/index.mdx b/docs/src/content/docs/fr/index.mdx
index 990cde22..27e42f44 100644
--- a/docs/src/content/docs/fr/index.mdx
+++ b/docs/src/content/docs/fr/index.mdx
@@ -16,11 +16,10 @@ petite taille.
## Fonctionnalités
- 🌱 Libre, gratuit & open-source (Licence AGPL v3)
-- 🔐 focalisé sur la souveraineté des données : votre contenu, votre
- audience et vos statiistiques vous appartiennent, et à vous seulement
-- 🪄 Fonctionnalités du Podcasting 2.0 : GUID, verrouillage,
- transcriptions, financement, chapitres, géo-localisation, intervenants,
- extraits sonores, …
+- 🔐 focalisé sur la souveraineté des données : votre contenu, votre audience
+ et vos statiistiques vous appartiennent, et à vous seulement
+- 🪄 Fonctionnalités du Podcasting 2.0 : GUID, verrouillage, transcriptions,
+ financement, chapitres, géo-localisation, intervenants, extraits sonores, …
- 💬 Réseau social intégré :
- 🚀 Castopod fait partie du Fédivers, un réseau social décentralisé
- ❤️ Créer des publications, partager, mettre en favori et commenter des
@@ -42,15 +41,13 @@ petite taille.
- 🤝 value4value / WebMonetization
- 💎 Podcasts premium
- 📡 Publiez vos épisodes partout avec RSS :
- - 📱 Sur tous les index et toutes les applications : Podcast Index,
- Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
+ - 📱 Sur tous les index et toutes les applications : Podcast Index, Podcasts
+ Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- ⚡ Diffusez instantanément vos épisodes avec WebSub
-- 📥 Importation de Podcast : déménagez votre podcast existant vers
- Castopod
+- 📥 Importation de Podcast : déménagez votre podcast existant vers Castopod
- 📤 Déplacez votre podcast chez un autre hébergeur
- 🔀 Multi-locataire : hébergez autant de podcasts que vous le souhaitez
-- 👥 Multi-utilisateur : ajoutez des contributeurs et définissez leurs
- rôles
+- 👥 Multi-utilisateur : ajoutez des contributeurs et définissez leurs rôles
- 🌎 support de i18n : traduit en anglais, français, polonais, allemand,
portugais, brésilien & espagnol… et
[plus à l'avenir](https://translate.castopod.org)!
@@ -74,26 +71,27 @@ Castopod a été créé dans le but de fournir une alternative ouverte et durabl
pour l'hébergement de vos podcasts, de promouvoir la décentralisation et ainsi
de s'assurer que la créativité des podcasteurs puisse rester libre.
-Ce projet est poussé par la communauté open-source, et plus particulièrement par les mouvements
-[Fediverse](https://fediverse.party/en/fediverse/) et
+Ce projet est poussé par la communauté open-source, et plus particulièrement par
+les mouvements [Fediverse](https://fediverse.party/en/fediverse/) et
[Podcasting 2.0](https://podcastindex.org/).
## Comparaison avec d'autres solutions
-Nous pensons qu'une solution n'est pas nécessairement adaptée à tous, tout dépend vos besoins. Voici donc un comparatif avec d'autres outils qui vous aidera à juger si
-Castopod est fait pour vous.
+Nous pensons qu'une solution n'est pas nécessairement adaptée à tous, tout
+dépend vos besoins. Voici donc un comparatif avec d'autres outils qui vous
+aidera à juger si Castopod est fait pour vous.
### Castopod vs Wordpress
-Castopod est souvent appelé "le Wordpress pour les podcasts" en raison des points
-communs entre les deux. D'une certaine manière, c'est vrai. Castopod a
+Castopod est souvent appelé "le Wordpress pour les podcasts" en raison des
+points communs entre les deux. D'une certaine manière, c'est vrai. Castopod a
d'ailleurs été inspiré par l'écosystème de Wordpress, en raison de la facilité
grâce à laquelle sa communauté l'a adopté et du nombre de sites Web qui
l'utilisent.
-Tout comme Wordpress, Castopod est libre & open source, utilise PHP et une
-base de données MySQL et est fourni en paquet facilement installable sur la
-plupart des serveurs web.
+Tout comme Wordpress, Castopod est libre & open source, utilise PHP et une base
+de données MySQL et est fourni en paquet facilement installable sur la plupart
+des serveurs web.
Wordpress est un excellent outil pour créer votre site web et de l'étendre avec
des plugins pour faire ce que vous souhaitez. C'est un CMS à part entière qui
@@ -156,18 +154,24 @@ documentation suivante pour démarrer.
Castopod a mis en place un Code de Conduite destiné aux personnes souhaitant
participer au projet. Merci de lire le
-[manuel de code de conduite](https://code.castopod.org/adaures/castopod/-/blob/develop/CODE_OF_CONDUCT.md) pour comprendre les actions qui seront tolérées et celles qui ne le seront pas.
+[manuel de code de conduite](https://code.castopod.org/adaures/castopod/-/blob/develop/CODE_OF_CONDUCT.md)
+pour comprendre les actions qui seront tolérées et celles qui ne le seront pas.
### Guide de contribution
-Lisez notre [guide de contribution](https://code.castopod.org/adaures/castopod/-/blob/develop/CONTRIBUTING.md) pour comprendre notre processus de développement, comment proposer des corrections de bug et améliorations, et comment coder et tester vos changements sur Castopod.
+Lisez notre
+[guide de contribution](https://code.castopod.org/adaures/castopod/-/blob/develop/CONTRIBUTING.md)
+pour comprendre notre processus de développement, comment proposer des
+corrections de bug et améliorations, et comment coder et tester vos changements
+sur Castopod.
## Contact
-Vous pouvez nous joindre pour obtenir de l'aide ou poser toute question que vous avez sur :
+Vous pouvez nous joindre pour obtenir de l'aide ou poser toute question que vous
+avez sur :
-- [Discord](https://castopod.org/discord) (pour l'interaction directe avec les développeurs
- et la communauté)
+- [Discord](https://castopod.org/discord) (pour l'interaction directe avec les
+ développeurs et la communauté)
- [Suivi de problèmes](https://code.castopod.org/adaures/castopod/-/issues)
(pour toute demande de nouvelle fonctionnalité ou rapport de bug)
@@ -181,7 +185,8 @@ informations à propos de Castopod :
## Partenaires
-Le développement de Castopod est rendu possible avec le soutien de ses donateurs. Si vous souhaitez aider, pensez à
+Le développement de Castopod est rendu possible avec le soutien de ses
+donateurs. Si vous souhaitez aider, pensez à
[sponsoriser le développement de Castopod](https://opencollective.com/castopod/contribute).
[](https://adaures.com/)
diff --git a/docs/src/content/docs/fr2/getting-started/auth.mdx b/docs/src/content/docs/fr2/getting-started/auth.mdx
index 70eda255..75e300b4 100644
--- a/docs/src/content/docs/fr2/getting-started/auth.mdx
+++ b/docs/src/content/docs/fr2/getting-started/auth.mdx
@@ -13,24 +13,25 @@ autorisations sont définis sur deux niveaux :
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Autorisations dans l'instance
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -39,13 +40,13 @@ autorisations sont définis sur deux niveaux :
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Rôles et autorisations par podcast
### Rôles par podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ autorisations sont définis sur deux niveaux :
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Permissions par podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ autorisations sont définis sur deux niveaux :
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/fr2/getting-started/docker.mdx b/docs/src/content/docs/fr2/getting-started/docker.mdx
index fdaaf71c..22270b6a 100644
--- a/docs/src/content/docs/fr2/getting-started/docker.mdx
+++ b/docs/src/content/docs/fr2/getting-started/docker.mdx
@@ -92,8 +92,8 @@ de données Redis peut être ajoutée en tant que gestionnaire de cache.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/fr2/getting-started/install.mdx b/docs/src/content/docs/fr2/getting-started/install.mdx
index 540dffe4..e5ec96c0 100644
--- a/docs/src/content/docs/fr2/getting-started/install.mdx
+++ b/docs/src/content/docs/fr2/getting-started/install.mdx
@@ -10,15 +10,15 @@ serveurs web compatibles avec PHP-MySQL.
## Prérequis
-- PHP v8.1 or higher
-- MySQL version 5.7 ou supérieure ou MariaDB version 10.2 ou supérieure
+- PHP v8.5 or higher
+- MySQL version 8.4 ou supérieure ou MariaDB version 11.4 ou supérieure
- Prise en charge HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://www.php.net/manual/fr/intl.requirements.php)
- [libcurl](https://www.php.net/manual/fr/curl.requirements.php)
diff --git a/docs/src/content/docs/fr2/getting-started/update.mdx b/docs/src/content/docs/fr2/getting-started/update.mdx
index b2325f44..257593fe 100644
--- a/docs/src/content/docs/fr2/getting-started/update.mdx
+++ b/docs/src/content/docs/fr2/getting-started/update.mdx
@@ -34,8 +34,7 @@ corrections de bugs 🐛 et des améliorations de performance ⚡.
diff --git a/docs/src/content/docs/fr2/index.mdx b/docs/src/content/docs/fr2/index.mdx
index c3dc55e9..e66a8456 100644
--- a/docs/src/content/docs/fr2/index.mdx
+++ b/docs/src/content/docs/fr2/index.mdx
@@ -16,11 +16,10 @@ petite taille.
## Fonctionnalités
- 🌱 Libre, gratuit & open-source (Licence AGPL v3)
-- 🔐 focalisé sur la souveraineté des données : votre contenu, votre
- audience et vos statiistiques vous appartiennent, et à vous seulement
-- 🪄 Fonctionnalités du Podcasting 2.0 : GUID, verrouillage,
- transcriptions, financement, chapitres, géo-localisation, intervenants,
- extraits sonores, …
+- 🔐 focalisé sur la souveraineté des données : votre contenu, votre audience
+ et vos statiistiques vous appartiennent, et à vous seulement
+- 🪄 Fonctionnalités du Podcasting 2.0 : GUID, verrouillage, transcriptions,
+ financement, chapitres, géo-localisation, intervenants, extraits sonores, …
- 💬 Réseau social intégré :
- 🚀 Castopod fait partie du Fédivers, un réseau social décentralisé
- ❤️ Créer des publications, partager, mettre en favori et commenter des
@@ -42,15 +41,13 @@ petite taille.
- 🤝 value4value / WebMonetization
- 💎 Podcasts premium
- 📡 Publiez vos épisodes partout avec RSS :
- - 📱 Sur tous les index et toutes les applications : Podcast Index,
- Podcasts Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
+ - 📱 Sur tous les index et toutes les applications : Podcast Index, Podcasts
+ Apple, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend…
- ⚡ Diffusez instantanément vos épisodes avec WebSub
-- 📥 Importation de Podcast : déménagez votre podcast existant vers
- Castopod
+- 📥 Importation de Podcast : déménagez votre podcast existant vers Castopod
- 📤 Déplacez votre podcast chez un autre hébergeur
- 🔀 Multi-locataire : hébergez autant de podcasts que vous le souhaitez
-- 👥 Multi-utilisateur : ajoutez des contributeurs et définissez leurs
- rôles
+- 👥 Multi-utilisateur : ajoutez des contributeurs et définissez leurs rôles
- 🌎 support de i18n : traduit en anglais, français, polonais, allemand,
portugais, brésilien & espagnol… et
[plus à l'avenir](https://translate.castopod.org)!
diff --git a/docs/src/content/docs/gd/getting-started/auth.mdx b/docs/src/content/docs/gd/getting-started/auth.mdx
index 2c2a15d7..597c408f 100644
--- a/docs/src/content/docs/gd/getting-started/auth.mdx
+++ b/docs/src/content/docs/gd/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Sàr-rianaire | Smachd gu lèir air Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manaidsear | Stiùireadh susbaint Chastopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Pod-chraoladair | Luchd-cleachdaidh coitcheann Chastopod. | admin.access |
+| role | description | permissions |
+| --------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Sàr-rianaire | Smachd gu lèir air Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manaidsear | Stiùireadh susbaint Chastopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Pod-chraoladair | Luchd-cleachdaidh coitcheann Chastopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | --------------------------------------------------------------------------------------------- |
| admin.access | ’S urrainn dhaibh raon rianachd Chastopod inntrigeadh. |
| admin.settings | ’S urrainn dhaibh roghainnean Chastopod inntrigeadh. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | ’S urrainn dhaibh luchdc-leachdaidh Chastopod a stiùireadh. |
| persons.manage | ’S urrainn dhaibh daoine a stiùireadh. |
| pages.manage | ’S urrainn dhaibh duilleagan a stiùireadh. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | ’S urrainn dhaibh pod-chraolaidhean ion-phortadh. |
| fediverse.manage-blocks | ’S urrainn dhaibh actairean/àrainnean a cho-shaoghail a bhacadh o eadar-ghabhail le Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| --------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Ùghdar | A’ stiùireadh susbaint a’ phod-chraolaidh #\{id\} ach gun chomas foillseachaidh. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Aoigh | Neach-cuideachaidh a’ phod-chraolaidh #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | ’S urrainn dhaibh eapasodan is postaichean a’ phod-chraolaidh #\{id\} fhoillseachadh/neo-fhoillseachadh. |
| episodes.manage-comments | ’S urrainn dhaibh beachdan air eapasod a’ phod-chraolaidh #\{id\} a chruthachadh/a thoirt air falbh. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/gd/getting-started/docker.mdx b/docs/src/content/docs/gd/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/gd/getting-started/docker.mdx
+++ b/docs/src/content/docs/gd/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/gd/getting-started/install.mdx b/docs/src/content/docs/gd/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/gd/getting-started/install.mdx
+++ b/docs/src/content/docs/gd/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/gd/index.mdx b/docs/src/content/docs/gd/index.mdx
index 2f23ff9b..4432a5d8 100644
--- a/docs/src/content/docs/gd/index.mdx
+++ b/docs/src/content/docs/gd/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/gl/getting-started/auth.mdx b/docs/src/content/docs/gl/getting-started/auth.mdx
index d5b3011d..1ae56fa0 100644
--- a/docs/src/content/docs/gl/getting-started/auth.mdx
+++ b/docs/src/content/docs/gl/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ------------------------------------ | ------------------------------------------------------------------------------------------ |
-| Super Admin | Ten control completo sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Xestora | Quen xestiona o contido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Usuaria común de Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| Super Admin | Ten control completo sobre Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Xestora | Quen xestiona o contido de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Usuaria común de Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------------------ |
| admin.access | Pode acceder á área de administración. |
| admin.settings | Pode acceder aos axustes de Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Pode xestionar as usuarias de Castopod. |
| persons.manage | Pode xestionar persoas. |
| pages.manage | Pode xestionar páxinas. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Pode importar podcasts. |
| fediverse.manage-blocks | Pode bloquear actores/dominios do fediverso evitando interactuar con Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| --------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Autora | Persoa que xestiona o contido do podcast #\{id\} pero non pode publicalo. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Convidada | Contribuínte básico ao podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ----------------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Pode publicar/retirar episodios e publicacións do podcast #\{id\}. |
| episodes.manage-comments | Pode crear/eliminar comentarios dos episodios do podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/gl/getting-started/docker.mdx b/docs/src/content/docs/gl/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/gl/getting-started/docker.mdx
+++ b/docs/src/content/docs/gl/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/gl/getting-started/install.mdx b/docs/src/content/docs/gl/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/gl/getting-started/install.mdx
+++ b/docs/src/content/docs/gl/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/gl/index.mdx b/docs/src/content/docs/gl/index.mdx
index 2f23ff9b..4432a5d8 100644
--- a/docs/src/content/docs/gl/index.mdx
+++ b/docs/src/content/docs/gl/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/id/getting-started/auth.mdx b/docs/src/content/docs/id/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/id/getting-started/auth.mdx
+++ b/docs/src/content/docs/id/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/id/getting-started/docker.mdx b/docs/src/content/docs/id/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/id/getting-started/docker.mdx
+++ b/docs/src/content/docs/id/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/id/getting-started/install.mdx b/docs/src/content/docs/id/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/id/getting-started/install.mdx
+++ b/docs/src/content/docs/id/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/id/index.mdx b/docs/src/content/docs/id/index.mdx
index 2f8e181f..1fee5963 100644
--- a/docs/src/content/docs/id/index.mdx
+++ b/docs/src/content/docs/id/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Fitur-fitur
- 🌱 Gratis & sumber terbuka (Lisensi AGPL v3)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Jaringan sosial bawaan:
- 🚀 Castopod termasuk bagian dari Fediverse, jaringan sosial
terdesentralisasi
@@ -41,15 +41,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Terbitkan episode-episode Anda dimana pun dengan RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivasi
diff --git a/docs/src/content/docs/it/getting-started/auth.mdx b/docs/src/content/docs/it/getting-started/auth.mdx
index 75922532..bec98a0a 100644
--- a/docs/src/content/docs/it/getting-started/auth.mdx
+++ b/docs/src/content/docs/it/getting-started/auth.mdx
@@ -13,24 +13,25 @@ definiti a due livelli:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Permessi istanza
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -39,13 +40,13 @@ definiti a due livelli:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per i ruoli e le autorizzazioni del podcast
### Per i ruoli del podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ definiti a due livelli:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Autorizzazioni per podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ definiti a due livelli:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/it/getting-started/docker.mdx b/docs/src/content/docs/it/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/it/getting-started/docker.mdx
+++ b/docs/src/content/docs/it/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/it/getting-started/install.mdx b/docs/src/content/docs/it/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/it/getting-started/install.mdx
+++ b/docs/src/content/docs/it/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/it/index.mdx b/docs/src/content/docs/it/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/it/index.mdx
+++ b/docs/src/content/docs/it/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/ja/getting-started/auth.mdx b/docs/src/content/docs/ja/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/ja/getting-started/auth.mdx
+++ b/docs/src/content/docs/ja/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ja/getting-started/docker.mdx b/docs/src/content/docs/ja/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/ja/getting-started/docker.mdx
+++ b/docs/src/content/docs/ja/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ja/getting-started/install.mdx b/docs/src/content/docs/ja/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/ja/getting-started/install.mdx
+++ b/docs/src/content/docs/ja/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ja/index.mdx b/docs/src/content/docs/ja/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/ja/index.mdx
+++ b/docs/src/content/docs/ja/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/kk/getting-started/auth.mdx b/docs/src/content/docs/kk/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/kk/getting-started/auth.mdx
+++ b/docs/src/content/docs/kk/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/kk/getting-started/docker.mdx b/docs/src/content/docs/kk/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/kk/getting-started/docker.mdx
+++ b/docs/src/content/docs/kk/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/kk/getting-started/install.mdx b/docs/src/content/docs/kk/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/kk/getting-started/install.mdx
+++ b/docs/src/content/docs/kk/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/kk/index.mdx b/docs/src/content/docs/kk/index.mdx
index 2f23ff9b..4432a5d8 100644
--- a/docs/src/content/docs/kk/index.mdx
+++ b/docs/src/content/docs/kk/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/ko/getting-started/auth.mdx b/docs/src/content/docs/ko/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/ko/getting-started/auth.mdx
+++ b/docs/src/content/docs/ko/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ko/getting-started/docker.mdx b/docs/src/content/docs/ko/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/ko/getting-started/docker.mdx
+++ b/docs/src/content/docs/ko/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ko/getting-started/install.mdx b/docs/src/content/docs/ko/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/ko/getting-started/install.mdx
+++ b/docs/src/content/docs/ko/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ko/index.mdx b/docs/src/content/docs/ko/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/ko/index.mdx
+++ b/docs/src/content/docs/ko/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/nl/getting-started/auth.mdx b/docs/src/content/docs/nl/getting-started/auth.mdx
index 3f70d363..dfe4af8c 100644
--- a/docs/src/content/docs/nl/getting-started/auth.mdx
+++ b/docs/src/content/docs/nl/getting-started/auth.mdx
@@ -13,24 +13,25 @@ niveaus:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| --------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------ |
-| Super beheerder | Heeft de volledige controle over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Beheerder | Beheert de inhoud van Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Algemene gebruikers van Castopod. | admin.access |
+| role | description | permissions |
+| --------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| Super beheerder | Heeft de volledige controle over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Beheerder | Beheert de inhoud van Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Algemene gebruikers van Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | -------------------------------------------------------------------- |
| admin.access | Kan toegang krijgen tot de beheeromgeving van Castopod. |
| admin.settings | Kan toegang krijgen tot de instellingen van Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Kan Castopod-gebruikers beheren. |
| persons.manage | Kan personen beheren. |
| pages.manage | Kan pagina's beheren. |
@@ -39,13 +40,13 @@ niveaus:
| podcasts.import | Kan podcasts importeren. |
| fediverse.manage-blocks | Kan fediverse actors/domains blokkeren voor interactie met Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast rollen en permissies
### Per podcast rollen
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| --------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -54,11 +55,11 @@ niveaus:
| Auteur | Beheert de inhoud van podcast #\{id\} maar kan deze niet publiceren. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gast | Algemene bijdrager van podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------- |
@@ -82,4 +83,4 @@ niveaus:
| episodes.manage-publications | Kan afleveringen en berichten van podcast #\{id\} publiceren/depubliceren. |
| episodes.manage-comments | Kan opmerkingen van aflevering van podcast van #\{id\} maken of verwijderen. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/nl/getting-started/docker.mdx b/docs/src/content/docs/nl/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/nl/getting-started/docker.mdx
+++ b/docs/src/content/docs/nl/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/nl/getting-started/install.mdx b/docs/src/content/docs/nl/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/nl/getting-started/install.mdx
+++ b/docs/src/content/docs/nl/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/nl/index.mdx b/docs/src/content/docs/nl/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/nl/index.mdx
+++ b/docs/src/content/docs/nl/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/nn-no/getting-started/auth.mdx b/docs/src/content/docs/nn-no/getting-started/auth.mdx
index 50bb8f4d..71f81937 100644
--- a/docs/src/content/docs/nn-no/getting-started/auth.mdx
+++ b/docs/src/content/docs/nn-no/getting-started/auth.mdx
@@ -2,7 +2,8 @@
title: Godkjenning & Autorisasjon
---
-Denne teksten blir sett inn i ein \-knagg. Roller og tilgangar blir laga på to nivå:
+Denne teksten blir sett inn i ein \-knagg. Roller
+og tilgangar blir laga på to nivå:
1. [for heile nettstaden](#1-instance-wide-roles-and-permissions)
2. [for kvar podkast](#2-per-podcast-roles-and-permissions)
@@ -11,24 +12,25 @@ Denne teksten blir sett inn i ein \-knagg. Roller
### Roller på nettstaden
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Ikkje slett eller endre denne delen _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Ikkje slett eller endre denne delen */}
-| rolle | skildring | tilgangar |
-| ----------- | -------------------------------- | ------------------------------------------------------------------------------------------ |
-| Superstyrar | Har full kontroll over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Leiar | Styrer innhaldet på Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podkastar | Vanlege Castopod-brukarar. | admin.access |
+| role | description | permissions |
+| ----------- | -------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Superstyrar | Har full kontroll over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Leiar | Styrer innhaldet på Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podkastar | Vanlege Castopod-brukarar. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Løyve på nettstaden
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ---------------------------------------------------------------------- |
| admin.access | Kan bruka styringspanelet for Castopod. |
| admin.settings | Kan få tilgang til innstillingane for Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Kan handtera Castopod-brukarar. |
| persons.manage | Kan handtera folk. |
| pages.manage | Kan handtera sider. |
@@ -37,13 +39,13 @@ Denne teksten blir sett inn i ein \-knagg. Roller
| podcasts.import | Kan importera podkastar. |
| fediverse.manage-blocks | Kan blokkera folk og domene på allheimen frå å samhandla med Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Roller pr. podkast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -52,11 +54,11 @@ Denne teksten blir sett inn i ein \-knagg. Roller
| Skapar | Styrer innhald for podkasten #\{id\}, men kan ikkje publisera dei. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gjest | Vanleg bidragsytar til podkasten #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Løyve pr. podkast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -80,4 +82,4 @@ Denne teksten blir sett inn i ein \-knagg. Roller
| episodes.manage-publications | Kan publisera og avpublisera episodar og innlegg for podkasten #\{id\}. |
| episodes.manage-comments | Kan skriva og sletta kommentarar til episodane av podkasten #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/nn-no/getting-started/docker.mdx b/docs/src/content/docs/nn-no/getting-started/docker.mdx
index e557943e..01174941 100644
--- a/docs/src/content/docs/nn-no/getting-started/docker.mdx
+++ b/docs/src/content/docs/nn-no/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Set opp ein revers-mellomlagertenar for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/nn-no/getting-started/install.mdx b/docs/src/content/docs/nn-no/getting-started/install.mdx
index ab4b1f24..82bc2dba 100644
--- a/docs/src/content/docs/nn-no/getting-started/install.mdx
+++ b/docs/src/content/docs/nn-no/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/nn-no/index.mdx b/docs/src/content/docs/nn-no/index.mdx
index eb13e2d1..d46c9abf 100644
--- a/docs/src/content/docs/nn-no/index.mdx
+++ b/docs/src/content/docs/nn-no/index.mdx
@@ -17,13 +17,13 @@ systemkrav.
## Funksjonar
- 🌱 Fri og open (AGPL v3-lisens)
-- 🔐 Legg vekt på at du eig dine eigne data: innhaldet, publikum og
- analysedata høyrer deg til, og berre deg
-- 🪄 Podkasting 2.0-funksjonar: GUID, låsing, transkripsjonar,
- finansiering, kapittel, plassering, personar, lydbetar, …
+- 🔐 Legg vekt på at du eig dine eigne data: innhaldet, publikum og analysedata
+ høyrer deg til, og berre deg
+- 🪄 Podkasting 2.0-funksjonar: GUID, låsing, transkripsjonar, finansiering,
+ kapittel, plassering, personar, lydbetar, …
- 💬 Innebygd sosialt nettverk:
- - 🚀 Castopod er ein del av fødiverset, som er eit desentralisert
- sosialt nettverk
+ - 🚀 Castopod er ein del av fødiverset, som er eit desentralisert sosialt
+ nettverk
- ❤️ Skriv innlegg, del dei, favorittmerk dei, og kommenter episodane
- 📈 Innebygde analyseverkty:
- ⚖️ Fylgjer GDPR / CCPA / LGPD
@@ -35,8 +35,7 @@ systemkrav.
- 🎨 Bruk eigne fargar
- 🎬 Lag og del filmklypp frå episodane
- 🔉 Lag lydbetar
- - ▶️ Innbyggbar spelar, så du kan spela episodane dine på ein kvar
- nettstad
+ - ▶️ Innbyggbar spelar, så du kan spela episodane dine på ein kvar nettstad
- 💸 Ten pengar:
- 🔗 Donasjonslenker
- 📲 lytt-for-å-klikka-annonsar
@@ -50,8 +49,8 @@ systemkrav.
- 📤 Flytt podkasten din bort frå Castopod
- 🔀 For fleire: Ver vertskap for så mange podkastar du vil
- 👥 Fleirbrukar: legg til bidragsytarar og lag roller for dei
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Kvifor Castopod?
diff --git a/docs/src/content/docs/oc/getting-started/auth.mdx b/docs/src/content/docs/oc/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/oc/getting-started/auth.mdx
+++ b/docs/src/content/docs/oc/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/oc/getting-started/docker.mdx b/docs/src/content/docs/oc/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/oc/getting-started/docker.mdx
+++ b/docs/src/content/docs/oc/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/oc/getting-started/install.mdx b/docs/src/content/docs/oc/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/oc/getting-started/install.mdx
+++ b/docs/src/content/docs/oc/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/oc/index.mdx b/docs/src/content/docs/oc/index.mdx
index a2747fe8..dc77399c 100644
--- a/docs/src/content/docs/oc/index.mdx
+++ b/docs/src/content/docs/oc/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/pl/getting-started/auth.mdx b/docs/src/content/docs/pl/getting-started/auth.mdx
index 180ea476..831596ba 100644
--- a/docs/src/content/docs/pl/getting-started/auth.mdx
+++ b/docs/src/content/docs/pl/getting-started/auth.mdx
@@ -12,73 +12,74 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ------------------ | ------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Superadministrator | Ma pełną kontrolę nad Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Zarządza zawartością Castopoda. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Zwykli użytkownicy Castopoda. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
-| permission | description |
-| ----------------------- | ------------------------------------------------------------------ |
-| admin.access | Can access the Castopod admin area. |
-| admin.settings | Can access the Castopod settings. |
-| users.manage | Can manage Castopod users. |
-| persons.manage | Can manage persons. |
-| pages.manage | Can manage pages. |
-| podcasts.view | Can view all podcasts. |
-| podcasts.create | Can create new podcasts. |
-| podcasts.import | Can import podcasts. |
-| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
+| permission | description |
+| ----------------------- | --------------------------------------------------------------------------- |
+| admin.access | Ma dostęp do panelu administracyjnego Castopoda. |
+| admin.settings | Ma dostęp do ustawień Castopoda. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
+| users.manage | Może zarządzać użytkownikami Castopoda. |
+| persons.manage | Może zarządzać osobami. |
+| pages.manage | Może zarządzać stronami. |
+| podcasts.view | Może wyświetlać wszystkie podcasty. |
+| podcasts.create | Może tworzyć nowe podcasty. |
+| podcasts.import | Może importować podcasty. |
+| fediverse.manage-blocks | Można blokować aktorów/domeny z fediwersum przed interakcjami z Castopodem. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Admin | Has complete control of podcast #\{id\}. | \* |
-| Editor | Manages content and publications of podcast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
-| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
-| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
+| role | description | permissions |
+| ------ | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Admin | Ma pełną kontrolę nad podcastem #\{id\}. | \* |
+| Edytor | Zarządza treścią i publikacjami podcastu #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
+| Autor | Zarządza zawartością podcastu #\{id\}, ale nie może jej opublikować. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
+| Gość | Główny współtwórca podcastu #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
-| permission | description |
-| ---------------------------- | -------------------------------------------------------------------------- |
-| view | Can view dashboard and analytics of podcast #\{id\}. |
-| edit | Can edit podcast #\{id\}. |
-| delete | Can delete podcast #\{id\}. |
-| manage-import | Can synchronize imported podcast #\{id\}. |
-| manage-persons | Can manage subscriptions of podcast #\{id\}. |
-| manage-subscriptions | Can manage subscriptions of podcast #\{id\}. |
-| manage-contributors | Can manage contributors of podcast #\{id\}. |
-| manage-platforms | Can set/remove platform links of podcast #\{id\}. |
-| manage-publications | Can publish podcast #\{id\}. |
-| manage-notifications | Can view and mark notifications as read for podcast #\{id\}. |
-| interact-as | Can interact as the podcast #\{id\} to favourite, share or reply to posts. |
-| episodes.view | Can view dashboards and analytics of podcast #\{id\}'s episodes. |
-| episodes.create | Can create episodes for podcast #\{id\}. |
-| episodes.edit | Can edit episodes of podcast #\{id\}. |
-| episodes.delete | Can delete episodes of podcast #\{id\}. |
-| episodes.manage-persons | Can manage episode persons of podcast #\{id\}. |
-| episodes.manage-clips | Can manage video clips or soundbites of podcast #\{id\}. |
-| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
-| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
+| permission | description |
+| ---------------------------- | ------------------------------------------------------------------------------------- |
+| view | Może wyświetlań panel zarządzania oraz analitykę podcastu #\{id\}. |
+| edit | Może edytować podcast #\{id\}. |
+| delete | Może usunąć podcast #\{id\}. |
+| manage-import | Może synchronizować importowany podcast #\{id\}. |
+| manage-persons | Może zarządzać subskrypcjami podcastu #\{id\}. |
+| manage-subscriptions | Może zarządzać subskrypcjami podcastu #\{id\}. |
+| manage-contributors | Może zarządzać współtwórcami podcastu #\{id\}. |
+| manage-platforms | Można ustawić/usunąć linki platformy podcastu #\{id\}. |
+| manage-publications | Może publikować podcast #\{id\}. |
+| manage-notifications | Może wyświetlać i oznaczać powiadomienia jako przeczytane dla podcastu #\{id\}. |
+| interact-as | Może jako podcast #\{id\} dodawać do ulubionych, udostępniać lub odpowiadać na posty. |
+| episodes.view | Może wyświetlać panel zarządzania oraz analitykę odcinków podcastu #\{id\}. |
+| episodes.create | Może tworzyć odcinki dla podcastu #\{id\}. |
+| episodes.edit | Może edytować odcinki podcastu #\{id\}. |
+| episodes.delete | Można usuwać odcinki podcastu #\{id\}. |
+| episodes.manage-persons | Może zarządzać osobami w odcinkach podcastu #\{id\}. |
+| episodes.manage-clips | Może zarządzać klipami wideo lub zajawkami podcastu #\{id\}. |
+| episodes.manage-publications | Może publikować/cofać publikowanie odcinków i postów podcastu #\{id\}. |
+| episodes.manage-comments | Może tworzyć/usuwać komentarze odcinka podcastu #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/pl/getting-started/docker.mdx b/docs/src/content/docs/pl/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/pl/getting-started/docker.mdx
+++ b/docs/src/content/docs/pl/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/pl/getting-started/install.mdx b/docs/src/content/docs/pl/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/pl/getting-started/install.mdx
+++ b/docs/src/content/docs/pl/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/pl/index.mdx b/docs/src/content/docs/pl/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/pl/index.mdx
+++ b/docs/src/content/docs/pl/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/pt-br/getting-started/auth.mdx b/docs/src/content/docs/pt-br/getting-started/auth.mdx
index a3b06900..ddb244c5 100644
--- a/docs/src/content/docs/pt-br/getting-started/auth.mdx
+++ b/docs/src/content/docs/pt-br/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super administrador | Tem controle completo sobre Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Gerente | Gerencia o conteúdo de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Usuários gerais do Castopod. | admin.access |
+| role | description | permissions |
+| ------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super administrador | Tem controle completo sobre Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Gerente | Gerencia o conteúdo de Castopod. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Usuários gerais do Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ---------------------------------------------------------------- |
| admin.access | Pode acessar a área de administração do Castopod. |
| admin.settings | Pode acessar as configurações de Castopod. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Pode gerenciar usuários do Castopod. |
| persons.manage | Pode gerenciar pessoas. |
| pages.manage | Pode gerenciar páginas. |
@@ -38,26 +39,26 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Pode importar podcasts. |
| fediverse.manage-blocks | Pode bloquear ator/domínios distintos de interagir com Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Administrador | Tem controle completo do podcast #\{id\}. | \* |
| Editor | Gerencia o conteúdo e as publicações do podcast #\{id\}. | view, edit, manage-import, manage-persons, manage-platforms, manage-publications, manage-notifications, interact-as, episodes.view, episodes.create, episodes.edit, episodes.delete, episodes.manage-persons, episodes.manage-clips, episodes.manage-publications, episodes.manage-comments |
| Autor | Gerencia o conteúdo do podcast #\{id\} mas não pode publicá-los. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
-| Guest | Contribuidor geral do podcast #\{id\}. | view, episodes.view |
+| Convidado | Contribuidor geral do podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | --------------------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Pode publicar/remover a publicação de episódios e postagens de podcast #\{id\}. |
| episodes.manage-comments | Pode criar/remover comentários de episódio do podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/pt-br/getting-started/docker.mdx b/docs/src/content/docs/pt-br/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/pt-br/getting-started/docker.mdx
+++ b/docs/src/content/docs/pt-br/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/pt-br/getting-started/install.mdx b/docs/src/content/docs/pt-br/getting-started/install.mdx
index 3b655c42..d9b3c8ce 100644
--- a/docs/src/content/docs/pt-br/getting-started/install.mdx
+++ b/docs/src/content/docs/pt-br/getting-started/install.mdx
@@ -10,15 +10,15 @@ com PHP-MySQL.
## Requisitos
-- PHP v8.1 or higher
-- MySQL versão 5.7 ou superior ou MariaDB versão 10.2 ou superior
+- PHP v8.5 or higher
+- MySQL versão 8.4 ou superior ou MariaDB versão 11.4 ou superior
- Suporte a HTTPS
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/pt-br/index.mdx b/docs/src/content/docs/pt-br/index.mdx
index dd789a8c..441f0831 100644
--- a/docs/src/content/docs/pt-br/index.mdx
+++ b/docs/src/content/docs/pt-br/index.mdx
@@ -16,10 +16,10 @@ pegada muito pequena.
## Funcionalidades
- 🌱 Livre & de código aberto (Licença AGPL v3)
-- 🔐 Focado na soberania de dados: seu conteúdo, público e análises
- pertence a você, e somente você
-- 🪄 Recursos do podcasting 2.0: GUID, bloqueado, transcrições,
- financiamento, capítulos, localização, pessoas, soundbites, …
+- 🔐 Focado na soberania de dados: seu conteúdo, público e análises pertence a
+ você, e somente você
+- 🪄 Recursos do podcasting 2.0: GUID, bloqueado, transcrições, financiamento,
+ capítulos, localização, pessoas, soundbites, …
- 💬 Rede social integrada:
- 🚀 Castopod é parte do Fediverso, uma rede social descentralizada
- ❤️ Crie publicações, compartilhe, favorite e comente em episódios
@@ -31,8 +31,7 @@ pegada muito pequena.
- ✅ Pronto para SEO (meta-tags de open-graph, JSON-LD, …)
- 📱 PWA: instalar como um aplicativo autônomo
- 🎨 Cores de tema personalizáveis
- - 🎬 Gere clipes de vídeo prontos para compartilhar a partir dos
- episódios
+ - 🎬 Gere clipes de vídeo prontos para compartilhar a partir dos episódios
- 🔉 Gere clipes de áudio
- ▶️ Player incorporável, incorpore seus episódios em qualquer site
- 💸 Monetização:
@@ -41,16 +40,15 @@ pegada muito pequena.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publique seus episódios em qualquer lugar com RSS:
- - 📱 Em todos os agregadores e aplicativos: Podcast Index, Apple
- Podcasts, Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 Em todos os agregadores e aplicativos: Podcast Index, Apple Podcasts,
+ Spotify, Google Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Transmita seus episódios instantaneamente com WebSub
- 📥 Importação de Podcast: mova seu podcast existente para o Castopod
- 📤 Mova seu podcast para fora do Castopod
- 🔀 Multi-inquilino: hospede quantos podcasts você quiser
- 👥 Multi-usuário: adicione contribuidores e defina cargos
-- 🌎 Suporte i18n: traduzido em inglês, francês, polonês, alemão,
- português brasileiro e espanhol… com
- [mais por vir](https://translate.castopod.org)!
+- 🌎 Suporte i18n: traduzido em inglês, francês, polonês, alemão, português
+ brasileiro e espanhol… com [mais por vir](https://translate.castopod.org)!
## Motivação
diff --git a/docs/src/content/docs/pt/getting-started/auth.mdx b/docs/src/content/docs/pt/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/pt/getting-started/auth.mdx
+++ b/docs/src/content/docs/pt/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/pt/getting-started/docker.mdx b/docs/src/content/docs/pt/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/pt/getting-started/docker.mdx
+++ b/docs/src/content/docs/pt/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/pt/getting-started/install.mdx b/docs/src/content/docs/pt/getting-started/install.mdx
index 260a0ca4..2673ffbf 100644
--- a/docs/src/content/docs/pt/getting-started/install.mdx
+++ b/docs/src/content/docs/pt/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/pt/index.mdx b/docs/src/content/docs/pt/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/pt/index.mdx
+++ b/docs/src/content/docs/pt/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/ro/getting-started/auth.mdx b/docs/src/content/docs/ro/getting-started/auth.mdx
index 47c1e349..904c8e56 100644
--- a/docs/src/content/docs/ro/getting-started/auth.mdx
+++ b/docs/src/content/docs/ro/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Rolurile instanței
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Permisiuni instanță
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Roluri per podcast
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Permisiuni per podcast
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ro/getting-started/docker.mdx b/docs/src/content/docs/ro/getting-started/docker.mdx
index 23037068..167419bf 100644
--- a/docs/src/content/docs/ro/getting-started/docker.mdx
+++ b/docs/src/content/docs/ro/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ro/getting-started/install.mdx b/docs/src/content/docs/ro/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/ro/getting-started/install.mdx
+++ b/docs/src/content/docs/ro/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ro/index.mdx b/docs/src/content/docs/ro/index.mdx
index a2747fe8..dc77399c 100644
--- a/docs/src/content/docs/ro/index.mdx
+++ b/docs/src/content/docs/ro/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/ru/getting-started/auth.mdx b/docs/src/content/docs/ru/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/ru/getting-started/auth.mdx
+++ b/docs/src/content/docs/ru/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/ru/getting-started/docker.mdx b/docs/src/content/docs/ru/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/ru/getting-started/docker.mdx
+++ b/docs/src/content/docs/ru/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/ru/getting-started/install.mdx b/docs/src/content/docs/ru/getting-started/install.mdx
index 260a0ca4..2673ffbf 100644
--- a/docs/src/content/docs/ru/getting-started/install.mdx
+++ b/docs/src/content/docs/ru/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/ru/index.mdx b/docs/src/content/docs/ru/index.mdx
index 18f84407..55bd5e89 100644
--- a/docs/src/content/docs/ru/index.mdx
+++ b/docs/src/content/docs/ru/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,16 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese & Spanish… with
- [more to come](https://translate.castopod.org)!
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese & Spanish… with [more to come](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/sk/getting-started/auth.mdx b/docs/src/content/docs/sk/getting-started/auth.mdx
index fa888b39..8282b972 100644
--- a/docs/src/content/docs/sk/getting-started/auth.mdx
+++ b/docs/src/content/docs/sk/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/sk/getting-started/docker.mdx b/docs/src/content/docs/sk/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/sk/getting-started/docker.mdx
+++ b/docs/src/content/docs/sk/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/sk/getting-started/install.mdx b/docs/src/content/docs/sk/getting-started/install.mdx
index 4e8f1b2c..316cd588 100644
--- a/docs/src/content/docs/sk/getting-started/install.mdx
+++ b/docs/src/content/docs/sk/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/sk/index.mdx b/docs/src/content/docs/sk/index.mdx
index a2747fe8..dc77399c 100644
--- a/docs/src/content/docs/sk/index.mdx
+++ b/docs/src/content/docs/sk/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/sr-latn/getting-started/auth.mdx b/docs/src/content/docs/sr-latn/getting-started/auth.mdx
index 8bf0a544..af1fdcea 100644
--- a/docs/src/content/docs/sr-latn/getting-started/auth.mdx
+++ b/docs/src/content/docs/sr-latn/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Uloge po nalogu
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super administrator | Ima kompletnu kontrolu nad Castopod-om. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Menadžer | Upravlja sadržajem na Castopod-u. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podkaster | Opšti korisnici Castopod-a. | admin.access |
+| role | description | permissions |
+| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super administrator | Ima kompletnu kontrolu nad Castopod-om. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Menadžer | Upravlja sadržajem na Castopod-u. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podkaster | Opšti korisnici Castopod-a. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Dozvole po nalogu
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | -------------------------------------------------------------- |
| admin.access | Može pristupiti administratorskom delu Castopod-a. |
| admin.settings | Može pristupiti podešavanjima Castopod-a. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Može upravljati korisnicima Castopod-a. |
| persons.manage | Može upravljati osobama. |
| pages.manage | Može upravljati stranicama. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Može uvesti nove podkaste. |
| fediverse.manage-blocks | Može blokirati interakciju Castopoda i fedivers naloga/domena. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Uloge po podkastu
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Autor | Upravlja sadržajem podkasta #\{id\} ali ne može da ga objavi. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gost | Saradnik na podkastu #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Dozvole po podkastu
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Može da objavi/poništi objavljivanje epizoda i postova podkasta #\{id\}. |
| episodes.manage-comments | Može dodati/obrisati komentar na epizodi podkasta #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/sr-latn/getting-started/docker.mdx b/docs/src/content/docs/sr-latn/getting-started/docker.mdx
index af1d0c6d..3a96b56f 100644
--- a/docs/src/content/docs/sr-latn/getting-started/docker.mdx
+++ b/docs/src/content/docs/sr-latn/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Podesite obrnuti proksi za TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/sr-latn/getting-started/install.mdx b/docs/src/content/docs/sr-latn/getting-started/install.mdx
index 2ee80acc..41790fdb 100644
--- a/docs/src/content/docs/sr-latn/getting-started/install.mdx
+++ b/docs/src/content/docs/sr-latn/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/sr-latn/index.mdx b/docs/src/content/docs/sr-latn/index.mdx
index 75532de1..d4e9db42 100644
--- a/docs/src/content/docs/sr-latn/index.mdx
+++ b/docs/src/content/docs/sr-latn/index.mdx
@@ -18,12 +18,11 @@ otiskom (footprint).
- 🌱 Besplatan i otvorenog koda (AGPL v3 License)
- 🔐 Fokusiran an suverenitet podataka: vaš sadržaj, publika i analitika pripada
vama i samo vama
-- 🪄 Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti,
- podrška, poglavlja, lokacija, posobe, zvučni isečci, …
+- 🪄 Podkasting 2.0 funkcionalnosti: GUID, zaključan, transkripti, podrška,
+ poglavlja, lokacija, posobe, zvučni isečci, …
- 💬 Ugrađena društvena mreža:
- 🚀 Castopod je deo Fediversa, decentralizovane društvene mreže
- - ❤️ Napravite objave, delite, dodajte u omiljene i komentarišite
- epizode
+ - ❤️ Napravite objave, delite, dodajte u omiljene i komentarišite epizode
- 📈 Ugrađena analitika:
- ⚖️ U skladu sa GDPR / CCPA / LGPD
- 🪙 Merenje publike putem IABv2 standarda
@@ -48,8 +47,8 @@ otiskom (footprint).
- 📤 Prebacite svoj podkast sa Castopod-a
- 🔀 Mreža: hostujte koliko god želite podkasta
- 👥 Više korisnika: dodajte saradnike i odredite njihove uloge
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivacija
diff --git a/docs/src/content/docs/sv/getting-started/auth.mdx b/docs/src/content/docs/sv/getting-started/auth.mdx
index 0725c600..f452ca54 100644
--- a/docs/src/content/docs/sv/getting-started/auth.mdx
+++ b/docs/src/content/docs/sv/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super administratör | Har fullständig kontroll över Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Hanterare | Hanterar Castopods innehåll. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Generella användare av Castopod. | admin.access |
+| role | description | permissions |
+| ------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super administratör | Har fullständig kontroll över Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Hanterare | Hanterar Castopods innehåll. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | Generella användare av Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ----------------------------------------------------------------------------- |
| admin.access | Kan komma åt Castopod admin-området. |
| admin.settings | Kan komma åt Castopod-inställningarna. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Kan hantera Castopod-användare. |
| persons.manage | Kan hantera personer. |
| pages.manage | Kan hantera sidor. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Kan importera podcasts. |
| fediverse.manage-blocks | Kan blockera fediverse skådespelare/domäner från att interagera med Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ---------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Författare | Hanterar innehåll i podcast #\{id\} men kan inte publicera dem. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Gäst | Generell bidragsgivare till podcasten #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ---------------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Kan publicera/avpublicera avsnitt och inlägg i podcast #\{id\}. |
| episodes.manage-comments | Kan skapa/ta bort avsnitt kommentarer från podcasten #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/sv/getting-started/docker.mdx b/docs/src/content/docs/sv/getting-started/docker.mdx
index 893fc29c..9cf90544 100644
--- a/docs/src/content/docs/sv/getting-started/docker.mdx
+++ b/docs/src/content/docs/sv/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Ställ in en omvänd proxy för TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/sv/getting-started/install.mdx b/docs/src/content/docs/sv/getting-started/install.mdx
index 37b72f3a..1f653648 100644
--- a/docs/src/content/docs/sv/getting-started/install.mdx
+++ b/docs/src/content/docs/sv/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/sv/index.mdx b/docs/src/content/docs/sv/index.mdx
index 3bf6d4f1..a494ef49 100644
--- a/docs/src/content/docs/sv/index.mdx
+++ b/docs/src/content/docs/sv/index.mdx
@@ -16,13 +16,12 @@ mycket litet fotavtryck.
## Funktioner
- 🌱 Gratis & öppen källkod (AGPL v3-licens)
-- 🔐 Fokuserad på datasuveränitet: ditt innehåll, målgrupp och analys
- tillhör dig, och du bara
-- 🪄 Podcasting 2.0 funktioner: GUID, låst, avskrifter, finansiering,
- kapitel, plats, personer, ljud, …
+- 🔐 Fokuserad på datasuveränitet: ditt innehåll, målgrupp och analys tillhör
+ dig, och du bara
+- 🪄 Podcasting 2.0 funktioner: GUID, låst, avskrifter, finansiering, kapitel,
+ plats, personer, ljud, …
- 💬 Inbyggt socialt nätverk:
- - 🚀 Castopod är en del av Fediverse, ett decentraliserat socialt
- nätverk
+ - 🚀 Castopod är en del av Fediverse, ett decentraliserat socialt nätverk
- ❤️ Skapa inlägg, dela, favorit och kommentera avsnitt
- 📈 Inbyggd analys:
- ⚖️ GDPR / CCPA / LGPD kompatibel
@@ -41,15 +40,15 @@ mycket litet fotavtryck.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publicera dina avsnitt överallt med RSS:
- - 📱 På alla index och appar: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 På alla index och appar: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Sänd dina avsnitt direkt med WebSub
- 📥 Podcast import: flytta din befintliga podcast till Castopod
- 📤 Flytta ut din podcast från Castopod
- 🔀 Flera hyresgäst: värd så många podcasts du vill
- 👥 Flera användare: lägg till bidragslämnare och ange roller
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/uk/getting-started/auth.mdx b/docs/src/content/docs/uk/getting-started/auth.mdx
index 3cfc9530..9f122f86 100644
--- a/docs/src/content/docs/uk/getting-started/auth.mdx
+++ b/docs/src/content/docs/uk/getting-started/auth.mdx
@@ -12,24 +12,25 @@ coupled with custom rules. Roles and permissions are defined at two levels:
### Instance roles
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------ |
-| Super admin | Has complete control over Castopod. | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | General users of Castopod. | admin.access |
+| role | description | permissions |
+| ----------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| Super admin | Has complete control over Castopod. | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| Manager | Manages Castopod's content. | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| Podcaster | General users of Castopod. | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### Instance permissions
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------------------------------ |
| admin.access | Can access the Castopod admin area. |
| admin.settings | Can access the Castopod settings. |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | Can manage Castopod users. |
| persons.manage | Can manage persons. |
| pages.manage | Can manage pages. |
@@ -38,13 +39,13 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| podcasts.import | Can import podcasts. |
| fediverse.manage-blocks | Can block fediverse actors/domains from interacting with Castopod. |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. Per podcast roles and permissions
### Per podcast roles
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +54,11 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| Author | Manages content of podcast #\{id\} but cannot publish them. | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| Guest | General contributor of the podcast #\{id\}. | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### Per podcast permissions
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | -------------------------------------------------------------------------- |
@@ -81,4 +82,4 @@ coupled with custom rules. Roles and permissions are defined at two levels:
| episodes.manage-publications | Can publish/unpublish episodes and posts of podcast #\{id\}. |
| episodes.manage-comments | Can create/remove episode comments of podcast #\{id\}. |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/uk/getting-started/docker.mdx b/docs/src/content/docs/uk/getting-started/docker.mdx
index 14e36d5e..2628ed8a 100644
--- a/docs/src/content/docs/uk/getting-started/docker.mdx
+++ b/docs/src/content/docs/uk/getting-started/docker.mdx
@@ -92,8 +92,8 @@ can be added as a cache handler.
3. Setup a reverse proxy for TLS (SSL/HTTPS)
- TLS is mandatory for ActivityPub to work. This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ TLS is mandatory for ActivityPub to work. This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/uk/getting-started/install.mdx b/docs/src/content/docs/uk/getting-started/install.mdx
index 2ee80acc..41790fdb 100644
--- a/docs/src/content/docs/uk/getting-started/install.mdx
+++ b/docs/src/content/docs/uk/getting-started/install.mdx
@@ -9,15 +9,15 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## Requirements
-- PHP v8.1 or higher
-- MySQL version 5.7 or higher or MariaDB version 10.2 or higher
+- PHP v8.5 or higher
+- MySQL version 8.4 or higher or MariaDB version 11.4 or higher
- HTTPS support
- An [ntp-synced clock](https://wiki.debian.org/NTP) to validate federation's
incoming requests
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
diff --git a/docs/src/content/docs/uk/index.mdx b/docs/src/content/docs/uk/index.mdx
index a2747fe8..dc77399c 100644
--- a/docs/src/content/docs/uk/index.mdx
+++ b/docs/src/content/docs/uk/index.mdx
@@ -16,10 +16,10 @@ small footprint.
## Features
- 🌱 Free & open-source (AGPL v3 License)
-- 🔐 Focused on data sovereignty: your content, audience, and analytics
- belong to you, and you only
-- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding,
- chapters, location, persons, soundbites, …
+- 🔐 Focused on data sovereignty: your content, audience, and analytics belong
+ to you, and you only
+- 🪄 Podcasting 2.0 features: GUID, locked, transcripts, funding, chapters,
+ location, persons, soundbites, …
- 💬 Built-in social network:
- 🚀 Castopod is part of the Fediverse, a decentralized social network
- ❤️ Create posts, share, favourite, and comment on episodes
@@ -40,15 +40,15 @@ small footprint.
- 🤝 value4value / WebMonetization
- 💎 Premium podcasts
- 📡 Publish your episodes everywhere with RSS:
- - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify,
- Google Podcasts, Deezer, Podcast Addict, Podfriend, …
+ - 📱 On all indexes and apps: Podcast Index, Apple Podcasts, Spotify, Google
+ Podcasts, Deezer, Podcast Addict, Podfriend, …
- ⚡ Broadcast your episodes instantly with WebSub
- 📥 Podcast import: move your existing podcast into Castopod
- 📤 Move your podcast out of Castopod
- 🔀 Multi-tenant: host as many podcasts as you want
- 👥 Multi-user: add contributors and set roles
-- 🌎 i18n support: translated in English, French, Polish, German,
- Brazilian Portuguese, Spanish, simplified Chinese… and
+- 🌎 i18n support: translated in English, French, Polish, German, Brazilian
+ Portuguese, Spanish, simplified Chinese… and
[many more](https://translate.castopod.org)!
## Motivation
diff --git a/docs/src/content/docs/zh-hans/getting-started/auth.mdx b/docs/src/content/docs/zh-hans/getting-started/auth.mdx
index 0c026ee6..ced7ab7e 100644
--- a/docs/src/content/docs/zh-hans/getting-started/auth.mdx
+++ b/docs/src/content/docs/zh-hans/getting-started/auth.mdx
@@ -2,8 +2,9 @@
title: 验证 & 授权
---
-Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规则。 角色和权限
-在两个级别上定义: Roles and permissions are defined at two levels:
+Castopod 使用 `codeigniter/shield`
+处理身份验证和授权 与自定义规则。 角色和权限在两个级别上定义: Roles and
+permissions are defined at two levels:
1. [实例范围](#1-instance-wide-roles-and-permissions)
2. [每个播客](#2-per-podcast-roles-and-permissions)
@@ -12,24 +13,25 @@ Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规
### 实例角色
-{/_ AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-ROLES-LIST:START - Do not remove or modify this section */}
-| role | description | permissions |
-| ---------- | ---------------------------- | ------------------------------------------------------------------------------------------ |
-| 超级管理员 | 拥有对 Castopod 的完全控制。 | admin.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
-| 管理 | 管理 Castopod 的内容。 | podcasts.create, podcasts.import, persons.manage, pages.manage |
-| Podcaster | Castopod 的普通用户。 | admin.access |
+| role | description | permissions |
+| ---------- | ---------------------------- | ------------------------------------------------------------------------------------------------------ |
+| 超级管理员 | 拥有对 Castopod 的完全控制。 | admin.\*, plugins.\*, podcasts.\*, users.manage, persons.manage, pages.manage, fediverse.manage-blocks |
+| 管理 | 管理 Castopod 的内容。 | podcasts.create, podcasts.import, persons.manage, pages.manage |
+| 播客 | Castopod 的普通用户。 | admin.access |
-{/_ AUTH-INSTANCE-ROLES-LIST:END _/}
+{/* AUTH-INSTANCE-ROLES-LIST:END */}
### 实例权限
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ----------------------- | ------------------------------------------- |
| admin.access | 可以访问 Castopod 管理区域。 |
| admin.settings | 可以访问 Castopod 设置。 |
+| plugins.manage | Auth.instance_permissions.plugins.manage |
| users.manage | 可以管理 Castopod 用户。 |
| persons.manage | 可以管理人员。 |
| pages.manage | 可以管理页面。 |
@@ -38,13 +40,13 @@ Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规
| podcasts.import | 可以导入播客。 |
| fediverse.manage-blocks | 可以阻止联邦宇宙参与者/域与 Castopod 交互。 |
-{/_ AUTH-INSTANCE-PERMISSIONS-LIST:END _/}
+{/* AUTH-INSTANCE-PERMISSIONS-LIST:END */}
## 2. 每个播客角色与权限
### 每个播客角色
-{/_ AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-ROLES-LIST:START - Do not remove or modify this section */}
| role | description | permissions |
| ------ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -53,11 +55,11 @@ Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规
| 作者 | 管理播客 #\{id\} 的内容,但不能发布。 | view, manage-persons, episodes.view, episodes.create, episodes.edit, episodes.manage-persons, episodes.manage-clips |
| 访客 | 播客 #\{id\} 的普通贡献者。 | view, episodes.view |
-{/_ AUTH-PODCAST-ROLES-LIST:END _/}
+{/* AUTH-PODCAST-ROLES-LIST:END */}
### 每个播客权限
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:START - Do not remove or modify this section */}
| permission | description |
| ---------------------------- | ----------------------------------------------------- |
@@ -81,4 +83,4 @@ Castopod 使用 `codeigniter/shield` 处理身份验证和授权 与自定义规
| episodes.manage-publications | 可以发布/取消发布播客 #\{id\} 的剧集和帖子。 |
| episodes.manage-comments | 可以创建/删除播客 #\{id\} 的剧集评论。 |
-{/_ AUTH-PODCAST-PERMISSIONS-LIST:END _/}
+{/* AUTH-PODCAST-PERMISSIONS-LIST:END */}
diff --git a/docs/src/content/docs/zh-hans/getting-started/docker.mdx b/docs/src/content/docs/zh-hans/getting-started/docker.mdx
index 80f44fc8..ecac3eaf 100644
--- a/docs/src/content/docs/zh-hans/getting-started/docker.mdx
+++ b/docs/src/content/docs/zh-hans/getting-started/docker.mdx
@@ -4,16 +4,12 @@ title: 官方 Docker 镜像
Castopod 在其自动构建期间会将 3 个 Docker 映像推送到 Docker Hub :
-- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod);一个使
- 用 nginx 单元的整合 Castopod 镜像
-- [**`castopod/app`**](https://hub.docker.com/r/castopod/app):应用程序包,包含
- 所有 Castopod 依赖关系
-- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):Castopod
- 的 Nginx 配置
+- [**`castopod/castopod`**](https://hub.docker.com/r/castopod/castopod);一个使用 nginx 单元的整合 Castopod 镜像
+- [**`castopod/app`**](https://hub.docker.com/r/castopod/app):应用程序包,包含所有 Castopod 依赖关系
+- [**`castopod/web-server`**](https://hub.docker.com/r/castopod/web-server):Castopod 的 Nginx 配置
-此外,Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理
-器。 A Redis database
-can be added as a cache handler.
+此外,Castopod 需要一个与 MySQL 兼容的数据库。 Redis 数据库 可以添加为缓存处理器。 A
+Redis database can be added as a cache handler.
## 目前支持的标签
@@ -93,8 +89,8 @@ can be added as a cache handler.
3. 设置 TLS 反向代理 (SSL/HTTPS)
TLS 是 ActivePub 工作的强制性要求。 此操作可用通过反向代理轻松解决,例如使用
- [Caddy](https://caddyserver.com/) 处理: This job can easily be handled by
- a reverse proxy, for example with [Caddy](https://caddyserver.com/):
+ [Caddy](https://caddyserver.com/) 处理: This job can easily be handled by a
+ reverse proxy, for example with [Caddy](https://caddyserver.com/):
```
#castopod
diff --git a/docs/src/content/docs/zh-hans/getting-started/install.mdx b/docs/src/content/docs/zh-hans/getting-started/install.mdx
index 508111d7..ee31bc1b 100644
--- a/docs/src/content/docs/zh-hans/getting-started/install.mdx
+++ b/docs/src/content/docs/zh-hans/getting-started/install.mdx
@@ -9,14 +9,14 @@ shared hosting, you can install it on most PHP-MySQL compatible web servers.
## 要求
-- PHP v8.1 or higher
-- MySQL 5.7 或更高版本与 MariaDB 10.2 或更高版本
+- PHP v8.5 or higher
+- MySQL 8.4 或更高版本与 MariaDB 11.4 或更高版本
- HTTPS 支持
- 用于验证的 [NTP 同步时钟](https://wiki.debian.org/NTP) 传入请求
-### PHP v8.1 or higher
+### PHP v8.5 or higher
-PHP version 8.1 or higher is required, with the following extensions installed:
+PHP version 8.5 or higher is required, with the following extensions installed:
- [intl](https://php.net/manual/en/intl.requirements.php)
- [libcurl](https://php.net/manual/en/curl.requirements.php)
@@ -35,9 +35,8 @@ PHP version 8.1 or higher is required, with the following extensions installed:
> 我们建议使用 [MariaDB](https://mariadb.org)。
-你需要填写服务器主机名、数据库名称、用户名和密码才能完成安装过程。 如果没有这
-些,请与你的服务器管理员联系。 If you do not have these, please contact your
-server administrator.
+你需要填写服务器主机名、数据库名称、用户名和密码才能完成安装过程。 如果没有这些,请与你的服务器管理员联系。 If
+you do not have these, please contact your server administrator.
#### 权限
@@ -46,8 +45,8 @@ server administrator.
### (可选)FFmpeg v4.1.8 或更高版本,用于视频素材
-如果你需要视频素材,则需要 [FFFmpeg](https://www.ffmpeg.org/) 4.1.8 或更高版本。
-必须安装以下扩展: The following extensions must be installed:
+如果你需要视频素材,则需要 [FFFmpeg](https://www.ffmpeg.org/)
+4.1.8 或更高版本。必须安装以下扩展: The following extensions must be installed:
- **FreeType 2** 来自库
[gd](https://www.php.net/manual/en/image.installation.php)
@@ -63,11 +62,11 @@ server administrator.
### Pre-requisites
0. 需要一台已经实现 [环境要求](#requirements)的 Web 服务器
-1. 为 Castopod 创建一个 MySQL 数据库,其中用户具有访问和修改权限(有关详细信息,
- 请参阅 [MySQL 兼容数据库](#mysql-compatible-database))。
+1. 为 Castopod 创建一个 MySQL 数据库,其中用户具有访问和修改权限(有关详细信息,请参阅
+ [MySQL 兼容数据库](#mysql-compatible-database))。
2. 使用 _SSL 证书_ 在您的域激活 HTTPS。
-3. 下载最新的 [Castopod](https://castopod.org/) 到 web 服务器并解压(如果尚未下
- 载)。
+3. 下载最新的 [Castopod](https://castopod.org/)
+ 到 web 服务器并解压(如果尚未下载)。
- ⚠️ 将 web 服务器根目录设置为 `castopod` 文件夹中的 `public/` 子文件夹。
4. 在 Web 服务器上为各种后台进程添加 **cron 任务** (相应地替换路径):
@@ -84,15 +83,16 @@ server administrator.
### (推荐) 安装向导
-1. 前往你最喜欢的浏览器并跳转至安装向导页面
- (`https://your_domain_name.com/cp-install`)运行 Castopod 安装脚本。
+1. 前往你最喜欢的浏览器并跳转至安装向导页面 (`https://your_domain_name.com/cp-install`)运行 Castopod 安装脚本。
2. 请按照屏幕上的说明进行操作。
3. 开始播客!
@@ -145,9 +145,9 @@ email.SMTPPass="你的邮件密码"
### 媒体存储
-By default, files are saved to the `public/media` folder using the file system.
-默认情况下,文件使用文件系统保存到 `公共/媒体` 文件夹中。 如果您需要将 `media`
-文件夹重新定位到其他位置,您可以在您的 `.env` 文件中指定它,如下所示:
+By default, files are saved to the `public/media` folder using the file
+system. 默认情况下,文件使用文件系统保存到 `公共/媒体` 文件夹中。 如果您需要将
+`media` 文件夹重新定位到其他位置,您可以在您的 `.env` 文件中指定它,如下所示:
```ini
# […]
@@ -192,9 +192,9 @@ media.s3.region="your_s3_region"
### 使用 YunoHost 安装
-[YunoHost](https://yunohost.org/) 是一个基于 Debian GNU/Linux 的发行版,由免费和
-开源软件包组成。 它可以为你解决自托管的困难。 It manages the hardships of
-self-hosting for you.
+[YunoHost](https://yunohost.org/) 是一个基于 Debian
+GNU/Linux 的发行版,由免费和开源软件包组成。 它可以为你解决自托管的困难。 It
+manages the hardships of self-hosting for you.