Merge remote-tracking branch 'upstream/main'
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Dalite 2024-06-03 09:52:08 +02:00
commit 0552eda5d9
78 changed files with 697 additions and 465 deletions

2
.nvmrc
View file

@ -1 +1 @@
20.13
20.14

View file

@ -1 +1 @@
3.3.1
3.3.2

View file

@ -2,6 +2,61 @@
All notable changes to this project will be documented in this file.
## [4.2.9] - 2024-05-30
### Security
- Update dependencies
- Fix private mention filtering ([GHSA-5fq7-3p3j-9vrf](https://github.com/mastodon/mastodon/security/advisories/GHSA-5fq7-3p3j-9vrf))
- Fix password change endpoint not being rate-limited ([GHSA-q3rg-xx5v-4mxh](https://github.com/mastodon/mastodon/security/advisories/GHSA-q3rg-xx5v-4mxh))
- Add hardening around rate-limit bypass ([GHSA-c2r5-cfqr-c553](https://github.com/mastodon/mastodon/security/advisories/GHSA-c2r5-cfqr-c553))
### Added
- Add rate-limit on OAuth application registration ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30316))
- Add fallback redirection when getting a webfinger query `WEB_DOMAIN@WEB_DOMAIN` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28592))
- Add `digest` attribute to `Admin::DomainBlock` entity in REST API ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/29092))
### Removed
- Remove superfluous application-level caching in some controllers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29862))
- Remove aggressive OAuth application vacuuming ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30316))
### Fixed
- Fix leaking Elasticsearch connections in Sidekiq processes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30450))
- Fix language of remote posts not being recognized when using unusual casing ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30403))
- Fix off-by-one in `tootctl media` commands ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30306))
- Fix removal of allowed domains (in `LIMITED_FEDERATION_MODE`) not being recorded in the audit log ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30125))
- Fix not being able to block a subdomain of an already-blocked domain through the API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30119))
- Fix `Idempotency-Key` being ignored when scheduling a post ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30084))
- Fix crash when supplying the `FFMPEG_BINARY` environment variable ([timothyjrogers](https://github.com/mastodon/mastodon/pull/30022))
- Fix improper email address validation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29838))
- Fix results/query in `api/v1/featured_tags/suggestions` ([mjankowski](https://github.com/mastodon/mastodon/pull/29597))
- Fix unblocking internationalized domain names under certain conditions ([tribela](https://github.com/mastodon/mastodon/pull/29530))
- Fix admin account created by `mastodon:setup` not being auto-approved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29379))
- Fix reference to non-existent var in CLI maintenance command ([mjankowski](https://github.com/mastodon/mastodon/pull/28363))
## [4.2.8] - 2024-02-23
### Added
- Add hourly task to automatically require approval for new registrations in the absence of moderators ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29318), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/29355))
In order to prevent future abandoned Mastodon servers from being used for spam, harassment and other malicious activity, Mastodon will now automatically switch new user registrations to require moderator approval whenever they are left open and no activity (including non-moderation actions from apps) from any logged-in user with permission to access moderation reports has been detected in a full week.
When this happens, users with the permission to change server settings will receive an email notification.
This feature is disabled when `EMAIL_DOMAIN_ALLOWLIST` is used, and can also be disabled with `DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS=true`.
### Changed
- Change registrations to be closed by default on new installations ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29280))
If you are running a server and never changed your registrations mode from the default, updating will automatically close your registrations.
Simply re-enable them through the administration interface or using `tootctl settings registrations open` if you want to enable them again.
### Fixed
- Fix processing of remote ActivityPub actors making use of `Link` objects as `Image` `url` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29335))
- Fix link verifications when page size exceeds 1MB ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29358))
## [4.2.7] - 2024-02-16
### Fixed

View file

@ -168,7 +168,7 @@ GEM
climate_control (1.2.0)
cocoon (1.2.15)
color_diff (0.1)
concurrent-ruby (1.2.3)
concurrent-ruby (1.3.1)
connection_pool (2.4.1)
cose (1.3.0)
cbor (~> 0.5.9)
@ -579,7 +579,7 @@ GEM
orm_adapter (0.5.0)
ox (2.14.18)
parallel (1.24.0)
parser (3.3.1.0)
parser (3.3.2.0)
ast (~> 2.4.1)
racc
parslet (2.0.0)
@ -597,7 +597,7 @@ GEM
net-smtp
premailer (~> 1.7, >= 1.7.9)
private_address_check (0.5.0)
propshaft (0.8.0)
propshaft (0.9.0)
actionpack (>= 7.0.0)
activesupport (>= 7.0.0)
rack
@ -726,7 +726,7 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.1)
rubocop (1.64.0)
rubocop (1.64.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)

View file

@ -60,8 +60,4 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -60,8 +60,4 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -16,8 +16,6 @@ class Api::V1::Admin::CanonicalEmailBlocksController < Api::BaseController
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(limit).freeze
def index
authorize :canonical_email_block, :index?
render json: @canonical_email_blocks, each_serializer: REST::Admin::CanonicalEmailBlockSerializer
@ -80,8 +78,4 @@ class Api::V1::Admin::CanonicalEmailBlocksController < Api::BaseController
def records_continue?
@canonical_email_blocks.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -14,8 +14,6 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(limit).freeze
def index
authorize :domain_allow, :index?
render json: @domain_allows, each_serializer: REST::Admin::DomainAllowSerializer
@ -77,10 +75,6 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController
@domain_allows.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
def resource_params
params.permit(:domain)
end

View file

@ -14,8 +14,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(limit).freeze
def index
authorize :domain_block, :index?
render json: @domain_blocks, each_serializer: REST::Admin::DomainBlockSerializer
@ -93,10 +91,6 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController
@domain_blocks.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
def resource_params
params.permit(:domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate)
end

View file

@ -14,10 +14,6 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(
limit
).freeze
def index
authorize :email_domain_block, :index?
render json: @email_domain_blocks, each_serializer: REST::Admin::EmailDomainBlockSerializer
@ -73,8 +69,4 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController
def records_continue?
@email_domain_blocks.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -14,10 +14,6 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(
limit
).freeze
def index
authorize :ip_block, :index?
render json: @ip_blocks, each_serializer: REST::Admin::IpBlockSerializer
@ -78,8 +74,4 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController
def records_continue?
@ip_blocks.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -12,7 +12,6 @@ class Api::V1::Admin::TagsController < Api::BaseController
after_action :verify_authorized
LIMIT = 100
PAGINATION_PARAMS = %i(limit).freeze
def index
authorize :tag, :index?
@ -59,8 +58,4 @@ class Api::V1::Admin::TagsController < Api::BaseController
def records_continue?
@tags.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -12,8 +12,6 @@ class Api::V1::Admin::Trends::Links::PreviewCardProvidersController < Api::BaseC
after_action :verify_authorized
after_action :insert_pagination_headers, only: :index
PAGINATION_PARAMS = %i(limit).freeze
def index
authorize :preview_card_provider, :index?
@ -57,8 +55,4 @@ class Api::V1::Admin::Trends::Links::PreviewCardProvidersController < Api::BaseC
def records_continue?
@providers.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end

View file

@ -43,8 +43,4 @@ class Api::V1::BlocksController < Api::BaseController
def records_continue?
paginated_blocks.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -46,8 +46,4 @@ class Api::V1::BookmarksController < Api::BaseController
def records_continue?
results.size == limit_param(DEFAULT_STATUSES_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -72,8 +72,4 @@ class Api::V1::ConversationsController < Api::BaseController
def records_continue?
@conversations.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -44,8 +44,4 @@ class Api::V1::Crypto::EncryptedMessagesController < Api::BaseController
def records_continue?
@encrypted_messages.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -54,10 +54,6 @@ class Api::V1::DomainBlocksController < Api::BaseController
@blocks.size == limit_param(BLOCK_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def domain_block_params
params.permit(:domain)
end

View file

@ -48,10 +48,6 @@ class Api::V1::EndorsementsController < Api::BaseController
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def unlimited?
params[:limit] == '0'
end

View file

@ -46,8 +46,4 @@ class Api::V1::FavouritesController < Api::BaseController
def records_continue?
results.size == limit_param(DEFAULT_STATUSES_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -67,8 +67,4 @@ class Api::V1::FollowRequestsController < Api::BaseController
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -37,8 +37,4 @@ class Api::V1::FollowedTagsController < Api::BaseController
def records_continue?
@results.size == limit_param(TAGS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -5,7 +5,7 @@ class Api::V1::Instances::ExtendedDescriptionsController < Api::V1::Instances::B
before_action :set_extended_description
# Override `current_user` to avoid reading session cookies unless in whitelist mode
# Override `current_user` to avoid reading session cookies unless in limited federation mode
def current_user
super if limited_federation_mode?
end

View file

@ -5,7 +5,7 @@ class Api::V1::Instances::PeersController < Api::V1::Instances::BaseController
skip_around_action :set_locale
# Override `current_user` to avoid reading session cookies unless in whitelist mode
# Override `current_user` to avoid reading session cookies unless in limited federation mode
def current_user
super if limited_federation_mode?
end

View file

@ -5,7 +5,7 @@ class Api::V1::Instances::RulesController < Api::V1::Instances::BaseController
before_action :set_rules
# Override `current_user` to avoid reading session cookies unless in whitelist mode
# Override `current_user` to avoid reading session cookies unless in limited federation mode
def current_user
super if limited_federation_mode?
end

View file

@ -6,7 +6,7 @@ class Api::V1::InstancesController < Api::BaseController
vary_by ''
# Override `current_user` to avoid reading session cookies unless in whitelist mode
# Override `current_user` to avoid reading session cookies unless in limited federation mode
def current_user
super if limited_federation_mode?
end

View file

@ -75,10 +75,6 @@ class Api::V1::Lists::AccountsController < Api::BaseController
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def unlimited?
params[:limit] == '0'
end

View file

@ -43,8 +43,4 @@ class Api::V1::MutesController < Api::BaseController
def records_continue?
paginated_mutes.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -43,10 +43,6 @@ class Api::V1::ScheduledStatusesController < Api::BaseController
params.permit(:scheduled_at)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def next_path
api_v1_scheduled_statuses_url pagination_params(max_id: pagination_max_id) if records_continue?
end

View file

@ -53,8 +53,4 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::V1::Statuses::Bas
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -49,8 +49,4 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::V1::Statuses::Base
def records_continue?
@accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -188,8 +188,4 @@ class Api::V1::StatusesController < Api::BaseController
def serialized_accounts(accounts)
ActiveModel::Serializer::CollectionSerializer.new(accounts, serializer: REST::AccountSerializer)
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
end

View file

@ -34,10 +34,6 @@ class Api::V1::Trends::LinksController < Api::BaseController
scope
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def next_path
api_v1_trends_links_url pagination_params(offset: offset_param + limit_param(DEFAULT_LINKS_LIMIT)) if records_continue?
end

View file

@ -32,10 +32,6 @@ class Api::V1::Trends::StatusesController < Api::BaseController
scope
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def next_path
api_v1_trends_statuses_url pagination_params(offset: offset_param + limit_param(DEFAULT_STATUSES_LIMIT)) if records_continue?
end

View file

@ -30,10 +30,6 @@ class Api::V1::Trends::TagsController < Api::BaseController
Trends.tags.query.allowed
end
def pagination_params(core_params)
params.slice(:limit).permit(:limit).merge(core_params)
end
def next_path
api_v1_trends_tags_url pagination_params(offset: offset_param + limit_param(DEFAULT_TAGS_LIMIT)) if records_continue?
end

View file

@ -3,6 +3,8 @@
module Api::Pagination
extend ActiveSupport::Concern
PAGINATION_PARAMS = %i(limit).freeze
protected
def pagination_max_id
@ -24,6 +26,13 @@ module Api::Pagination
render json: { error: 'Pagination values for `offset` and `limit` must be positive' }, status: 400 if pagination_options_invalid?
end
def pagination_params(core_params)
params
.slice(*PAGINATION_PARAMS)
.permit(*PAGINATION_PARAMS)
.merge(core_params)
end
private
def insert_pagination_headers

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Показване на профила въпреки това",
"limited_account_hint.title": "Този профил е бил скрит от модераторите на {domain}.",
"link_preview.author": "От {name}",
"link_preview.more_from_author": "Още от {name}",
"lists.account.add": "Добавяне към списък",
"lists.account.remove": "Премахване от списъка",
"lists.delete": "Изтриване на списъка",

View file

@ -221,6 +221,8 @@
"domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.",
"domain_pill.server": "Server",
"domain_pill.their_handle": "Vedkommendes handle:",
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"domain_pill.username": "Brugernavn",
"domain_pill.whats_in_a_handle": "Hvad er der i et handle (@brugernavn)?",
"domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan man interagere med folk på tværs af det sociale net af <button>ActivityPub-drevne platforme</button>.",
@ -412,6 +414,7 @@
"limited_account_hint.action": "Vis profil alligevel",
"limited_account_hint.title": "Denne profil er blevet skjult af {domain}-moderatorerne.",
"link_preview.author": "Af {name}",
"link_preview.more_from_author": "Mere fra {name}",
"lists.account.add": "Føj til liste",
"lists.account.remove": "Fjern fra liste",
"lists.delete": "Slet liste",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Profil trotzdem anzeigen",
"limited_account_hint.title": "Dieses Profil wurde von den Moderator*innen von {domain} ausgeblendet.",
"link_preview.author": "Von {name}",
"link_preview.more_from_author": "Mehr von {name}",
"lists.account.add": "Zur Liste hinzufügen",
"lists.account.remove": "Von der Liste entfernen",
"lists.delete": "Liste löschen",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Mostrar perfil de todos modos",
"limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Borrar lista",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Mostrar perfil de todos modos",
"limited_account_hint.title": "Este perfil ha sido ocultado por los moderadores de {domain}.",
"link_preview.author": "Por {name}",
"link_preview.more_from_author": "Más de {name}",
"lists.account.add": "Añadir a lista",
"lists.account.remove": "Quitar de lista",
"lists.delete": "Borrar lista",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Vís vangamynd kortini",
"limited_account_hint.title": "Hesin vangin er fjaldur av kjakleiðarunum á {domain}.",
"link_preview.author": "Av {name}",
"link_preview.more_from_author": "Meira frá {name}",
"lists.account.add": "Legg afturat lista",
"lists.account.remove": "Tak av lista",
"lists.delete": "Strika lista",

View file

@ -89,9 +89,12 @@
"announcement.announcement": "Oankundiging",
"attachments_list.unprocessed": "(net ferwurke)",
"audio.hide": "Audio ferstopje",
"block_modal.remote_users_caveat": "Wy freegje de server {domain} om jo beslút te respektearjen. It neilibben hjirfan is echter net garandearre, omdat guon servers blokkaden oars ynterpretearje kinne. Iepenbiere berjochten binne mooglik noch hieltyd sichtber foar net-oanmelde brûkers.",
"block_modal.show_less": "Minder toane",
"block_modal.show_more": "Mear toane",
"block_modal.they_cant_mention": "Sy kinne jo net fermelde of folgje.",
"block_modal.they_cant_see_posts": "De persoan kin jo berjochten net sjen en jo ek net harren berjochten.",
"block_modal.they_will_know": "De persoan kin sjen dat dy blokkearre wurdt.",
"block_modal.title": "Brûker blokkearje?",
"block_modal.you_wont_see_mentions": "Jo sjogge gjin berjochten mear dyt dizze account fermelde.",
"boost_modal.combo": "Jo kinne op {combo} drukke om dit de folgjende kear oer te slaan",
@ -214,11 +217,15 @@
"domain_block_modal.title": "Domein blokkearje?",
"domain_block_modal.you_will_lose_followers": "Al jo folgers fan dizze server wurde ûntfolge.",
"domain_block_modal.you_wont_see_posts": "Jo sjogge gjin berjochten of meldingen mear fan brûkers op dizze server.",
"domain_pill.activitypub_lets_connect": "It soarget derfoar dat jo net allinnich mar ferbine en kommunisearje kinne mei minsken op Mastodon, mar ek mei oare sosjale apps.",
"domain_pill.activitypub_like_language": "ActivityPub is de taal dyt Mastodon mei oare sosjale netwurken sprekt.",
"domain_pill.server": "Server",
"domain_pill.their_handle": "Harren fediverse-adres:",
"domain_pill.their_server": "Harren digitale thús, wert al harren berjochten binne.",
"domain_pill.their_username": "Harren unike identifikaasje-adres op harren server. It is mooglik dat der brûkers mei deselde brûkersnamme op ferskate servers te finen binne.",
"domain_pill.username": "Brûkersnamme",
"domain_pill.whats_in_a_handle": "Wat is in fediverse-adres?",
"domain_pill.who_they_are": "Omdat jo oan in fediverse-adres sjen kinne hoet ien hjit en op hokker server dy sit, kinne jo mei minsken op it troch <button>ActivityPub oandreaune</button> sosjale web (fediverse) kommunisearje.",
"domain_pill.your_handle": "Jo fediverse-adres:",
"embed.instructions": "Embed this status on your website by copying the code below.",
"embed.preview": "Sa komt it der út te sjen:",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "הצג חשבון בכל זאת",
"limited_account_hint.title": "פרופיל המשתמש הזה הוסתר על ידי המנחים של {domain}.",
"link_preview.author": "מאת {name}",
"link_preview.more_from_author": "עוד מאת {name}",
"lists.account.add": "הוסף לרשימה",
"lists.account.remove": "הסר מרשימה",
"lists.delete": "מחיקת רשימה",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Profil megjelenítése mindenképpen",
"limited_account_hint.title": "Ezt a profilt {domain} moderátorai elrejtették.",
"link_preview.author": "{name} szerint",
"link_preview.more_from_author": "Több tőle: {name}",
"lists.account.add": "Hozzáadás a listához",
"lists.account.remove": "Eltávolítás a listából",
"lists.delete": "Lista törlése",

View file

@ -215,8 +215,8 @@
"domain_block_modal.they_cant_follow": "Necuno de iste servitor pote sequer te.",
"domain_block_modal.they_wont_know": "Ille non sapera que ille ha essite blocate.",
"domain_block_modal.title": "Blocar dominio?",
"domain_block_modal.you_will_lose_followers": "Omne sequitores ab iste servitor essera removite.",
"domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes ab usatores sur iste servitor.",
"domain_block_modal.you_will_lose_followers": "Tote tu sequitores de iste servitor essera removite.",
"domain_block_modal.you_wont_see_posts": "Tu non videra messages e notificationes de usatores sur iste servitor.",
"domain_pill.activitypub_lets_connect": "Illo te permitte connecter e interager con personas non solmente sur Mastodon, ma tamben sur altere applicationes social.",
"domain_pill.activitypub_like_language": "ActivityPub es como le linguage commun que Mastodon parla con altere retes social.",
"domain_pill.server": "Servitor",
@ -389,7 +389,7 @@
"keyboard_shortcuts.hotkey": "Clave accelerator",
"keyboard_shortcuts.legend": "Monstrar iste legenda",
"keyboard_shortcuts.local": "Aperir le chronologia local",
"keyboard_shortcuts.mention": "Mentionar le author",
"keyboard_shortcuts.mention": "Mentionar le autor",
"keyboard_shortcuts.muted": "Aperir lista de usatores silentiate",
"keyboard_shortcuts.my_profile": "Aperir tu profilo",
"keyboard_shortcuts.notifications": "Aperir columna de notificationes",
@ -414,6 +414,7 @@
"limited_account_hint.action": "Monstrar profilo in omne caso",
"limited_account_hint.title": "Iste profilo ha essite celate per le moderatores de {domain}.",
"link_preview.author": "Per {name}",
"link_preview.more_from_author": "Plus de {name}",
"lists.account.add": "Adder al lista",
"lists.account.remove": "Remover del lista",
"lists.delete": "Deler lista",
@ -474,7 +475,7 @@
"notification.follow_request": "{name} ha requestate de sequer te",
"notification.mention": "{name} te ha mentionate",
"notification.moderation-warning.learn_more": "Apprender plus",
"notification.moderation_warning": "Tu ha recepite un aviso de moderation",
"notification.moderation_warning": "Tu ha recipite un advertimento de moderation",
"notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.",
"notification.moderation_warning.action_disable": "Tu conto ha essite disactivate.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Alcunes de tu messages ha essite marcate como sensibile.",
@ -493,7 +494,7 @@
"notification.status": "{name} ha justo ora publicate",
"notification.update": "{name} ha modificate un message",
"notification_requests.accept": "Acceptar",
"notification_requests.dismiss": "Dimitter",
"notification_requests.dismiss": "Clauder",
"notification_requests.notifications_from": "Notificationes de {name}",
"notification_requests.title": "Notificationes filtrate",
"notifications.clear": "Rader notificationes",
@ -621,7 +622,7 @@
"relative_time.today": "hodie",
"reply_indicator.attachments": "{count, plural, one {# annexo} other {# annexos}}",
"reply_indicator.cancel": "Cancellar",
"reply_indicator.poll": "Inquesta",
"reply_indicator.poll": "Sondage",
"report.block": "Blocar",
"report.block_explanation": "Tu non videra le messages de iste persona. Ille non potera vider tu messages o sequer te. Ille potera saper de esser blocate.",
"report.categories.legal": "Juridic",
@ -677,7 +678,7 @@
"search.quick_action.status_search": "Messages correspondente a {x}",
"search.search_or_paste": "Cerca o colla un URL",
"search_popout.full_text_search_disabled_message": "Non disponibile sur {domain}.",
"search_popout.full_text_search_logged_out_message": "Solmente disponibile al initiar le session.",
"search_popout.full_text_search_logged_out_message": "Solmente disponibile post aperir session.",
"search_popout.language_code": "Codice de lingua ISO",
"search_popout.options": "Optiones de recerca",
"search_popout.quick_actions": "Actiones rapide",
@ -757,7 +758,7 @@
"status.show_original": "Monstrar original",
"status.title.with_attachments": "{user} ha publicate {attachmentCount, plural, one {un annexo} other {{attachmentCount} annexos}}",
"status.translate": "Traducer",
"status.translated_from_with": "Traducite ab {lang} usante {provider}",
"status.translated_from_with": "Traducite de {lang} usante {provider}",
"status.uncached_media_warning": "Previsualisation non disponibile",
"status.unmute_conversation": "Non plus silentiar conversation",
"status.unpin": "Disfixar del profilo",
@ -796,7 +797,7 @@
"upload_modal.choose_image": "Seliger un imagine",
"upload_modal.description_placeholder": "Cinque expertos del zoo jam bibeva whisky frigide",
"upload_modal.detect_text": "Deteger texto de un imagine",
"upload_modal.edit_media": "Modificar le medio",
"upload_modal.edit_media": "Modificar multimedia",
"upload_modal.hint": "Clicca o trahe le circulo sur le previsualisation pro eliger le puncto focal que essera sempre visibile sur tote le miniaturas.",
"upload_modal.preparing_ocr": "Preparation del OCR…",
"upload_modal.preview_label": "Previsualisation ({ratio})",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Birta notandasniðið samt",
"limited_account_hint.title": "Þetta notandasnið hefur verið falið af umsjónarmönnum {domain}.",
"link_preview.author": "Eftir {name}",
"link_preview.more_from_author": "Meira frá {name}",
"lists.account.add": "Bæta á lista",
"lists.account.remove": "Fjarlægja af lista",
"lists.delete": "Eyða lista",

View file

@ -398,6 +398,7 @@
"limited_account_hint.action": "Amostra el profil entanto",
"limited_account_hint.title": "Este profil fue eskondido por los moderadores de {domain}.",
"link_preview.author": "Publikasyon de {name}",
"link_preview.more_from_author": "Mas de {name}",
"lists.account.add": "Adjusta a lista",
"lists.account.remove": "Kita de lista",
"lists.delete": "Efasa lista",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Vis tiek rodyti profilį",
"limited_account_hint.title": "Šį profilį paslėpė {domain} prižiūrėtojai.",
"link_preview.author": "Sukūrė {name}",
"link_preview.more_from_author": "Daugiau iš {name}",
"lists.account.add": "Pridėti į sąrašą",
"lists.account.remove": "Pašalinti iš sąrašo",
"lists.delete": "Ištrinti sąrašą",
@ -561,7 +562,7 @@
"onboarding.steps.setup_profile.title": "Suasmenink savo profilį",
"onboarding.steps.share_profile.body": "Leisk draugams sužinoti, kaip tave rasti Mastodon.",
"onboarding.steps.share_profile.title": "Bendrink savo Mastodon profilį",
"onboarding.tips.2fa": "<strong>Ar žinojai?</strong> Savo paskyrą gali apsaugoti nustatęs (-usi) dviejų veiksnių tapatybės nustatymą paskyros nustatymuose. Jis veikia su bet kuria pasirinkta TOTP programėle, telefono numeris nebūtinas.",
"onboarding.tips.2fa": "<strong>Ar žinojai?</strong> Savo paskyrą gali apsaugoti nustatant dviejų veiksnių tapatybės nustatymą paskyros nustatymuose. Jis veikia su bet kuria pasirinkta TOTP programėle, telefono numeris nebūtinas.",
"onboarding.tips.accounts_from_other_servers": "<strong>Ar žinojai?</strong> Kadangi Mastodon decentralizuotas, kai kurie profiliai, su kuriais susidursi, bus talpinami ne tavo, o kituose serveriuose. Ir vis tiek galėsi su jais sklandžiai bendrauti! Jų serveris yra antroje naudotojo vardo pusėje.",
"onboarding.tips.migration": "<strong>Ar žinojai?</strong> Jei manai, kad {domain} serveris ateityje tau netiks, gali persikelti į kitą Mastodon serverį neprarandant savo sekėjų. Gali net talpinti savo paties serverį.",
"onboarding.tips.verification": "<strong>Ar žinojai?</strong> Savo paskyrą gali patvirtinti pateikęs (-usi) nuorodą į Mastodon profilį savo interneto svetainėje ir pridėjęs (-usi) svetainę prie savo profilio. Nereikia jokių mokesčių ar dokumentų.",
@ -632,7 +633,7 @@
"report.reasons.legal_description": "Manai, kad tai pažeidžia tavo arba serverio šalies įstatymus",
"report.reasons.other": "Tai kažkas kita",
"report.reasons.other_description": "Problema netinka kitoms kategorijoms",
"report.reasons.spam": "Tai šlamštas",
"report.reasons.spam": "Tai šlamštas",
"report.reasons.spam_description": "Kenkėjiškos nuorodos, netikras įsitraukimas arba pasikartojantys atsakymai",
"report.reasons.violation": "Tai pažeidžia serverio taisykles",
"report.reasons.violation_description": "Žinai, kad tai pažeidžia konkrečias taisykles",

View file

@ -92,6 +92,8 @@
"block_modal.remote_users_caveat": "Mēs vaicāsim serverim {domain} ņemt vērā Tavu lēmumu. Tomēr atbilstība nav nodrošināta, jo atsevišķi serveri var apstrādāt bloķēšanu citādi. Publiski ieraksti joprojām var būt redzami lietotājiem, kuri nav pieteikušies.",
"block_modal.show_less": "Rādīt mazāk",
"block_modal.show_more": "Parādīt mazāk",
"block_modal.they_cant_mention": "Nevar Tevi pieminēt vai sekot Tev.",
"block_modal.they_cant_see_posts": "Nevar redzēt Tavus ierakstus, un Tu neredzēsi lietotāja.",
"boost_modal.combo": "Nospied {combo}, lai nākamreiz šo izlaistu",
"bundle_column_error.copy_stacktrace": "Kopēt kļūdu ziņojumu",
"bundle_column_error.error.body": "Pieprasīto lapu nevarēja atveidot. Tas varētu būt saistīts ar kļūdu mūsu kodā, vai tā ir pārlūkprogrammas saderības problēma.",
@ -173,7 +175,7 @@
"confirmations.discard_edit_media.message": "Ir nesaglabātas izmaiņas informācijas nesēja aprakstā vai priekšskatījumā. Vēlies tās atmest tik un tā?",
"confirmations.domain_block.message": "Vai tu tiešām vēlies bloķēt visu domēnu {domain}? Parasti pietiek, ja nobloķē vai apklusini kādu. Tu neredzēsi saturu vai paziņojumus no šī domēna nevienā laika līnijā. Tavi sekotāji no šī domēna tiks noņemti.",
"confirmations.edit.confirm": "Labot",
"confirmations.edit.message": "Rediģējot, tiks pārrakstīts ziņojums, kuru tu šobrīd raksti. Vai tiešām vēlies turpināt?",
"confirmations.edit.message": "Labošana pārrakstīs ziņojumu, kas šobrīd tiek sastādīts. Vai tiešām turpināt?",
"confirmations.logout.confirm": "Iziet",
"confirmations.logout.message": "Vai tiešām vēlies izrakstīties?",
"confirmations.mute.confirm": "Apklusināt",
@ -377,6 +379,7 @@
"limited_account_hint.action": "Tik un tā rādīt profilu",
"limited_account_hint.title": "{domain} moderatori ir paslēpuši šo profilu.",
"link_preview.author": "Pēc {name}",
"link_preview.more_from_author": "Vairāk no {name}",
"lists.account.add": "Pievienot sarakstam",
"lists.account.remove": "Noņemt no saraksta",
"lists.delete": "Izdzēst sarakstu",
@ -444,16 +447,19 @@
"notification.relationships_severance_event": "Zaudēti savienojumi ar {name}",
"notification.relationships_severance_event.learn_more": "Uzzināt vairāk",
"notification.status": "{name} tikko publicēja",
"notification.update": "{name} rediģēja ierakstu",
"notification.update": "{name} laboja ierakstu",
"notification_requests.accept": "Pieņemt",
"notification_requests.dismiss": "Noraidīt",
"notification_requests.notifications_from": "Paziņojumi no {name}",
"notification_requests.title": "Atlasītie paziņojumi",
"notifications.clear": "Notīrīt paziņojumus",
"notifications.clear_confirmation": "Vai tiešām vēlies neatgriezeniski notīrīt visus savus paziņojumus?",
"notifications.column_settings.admin.report": "Jauni ziņojumi:",
"notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:",
"notifications.column_settings.alert": "Darbvirsmas paziņojumi",
"notifications.column_settings.favourite": "Izlase:",
"notifications.column_settings.filter_bar.advanced": "Attēlot visas kategorijas",
"notifications.column_settings.filter_bar.category": "Atrās atlasīšanas josla",
"notifications.column_settings.follow": "Jauni sekotāji:",
"notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:",
"notifications.column_settings.mention": "Pieminēšanas:",
@ -481,7 +487,9 @@
"notifications.permission_required": "Darbvirsmas paziņojumi nav pieejami, jo nav piešķirta nepieciešamā atļauja.",
"notifications.policy.filter_new_accounts_title": "Jauni konti",
"notifications.policy.filter_not_followers_title": "Cilvēki, kuri Tev neseko",
"notifications.policy.filter_not_following_hint": "Līdz tos pašrocīgi apstiprināsi",
"notifications.policy.filter_not_following_title": "Cilvēki, kuriem Tu neseko",
"notifications.policy.title": "Atlasīt paziņojumus no…",
"notifications_permission_banner.enable": "Iespējot darbvirsmas paziņojumus",
"notifications_permission_banner.how_to_control": "Lai saņemtu paziņojumus, kad Mastodon nav atvērts, iespējo darbvirsmas paziņojumus. Vari precīzi kontrolēt, kāda veida mijiedarbības rada darbvirsmas paziņojumus, izmantojot augstāk redzamo pogu {icon}, kad tie būs iespējoti.",
"notifications_permission_banner.title": "Nekad nepalaid neko garām",
@ -539,7 +547,9 @@
"privacy.direct.short": "Noteikti cilvēki",
"privacy.private.long": "Tikai Tavi sekotāji",
"privacy.private.short": "Sekotāji",
"privacy.public.long": "Jebkurš Mastodon un ārpus tā",
"privacy.public.short": "Publiska",
"privacy.unlisted.long": "Mazāk algoritmisku fanfaru",
"privacy_policy.last_updated": "Pēdējo reizi atjaunināta {date}",
"privacy_policy.title": "Privātuma politika",
"recommended": "Ieteicams",
@ -557,6 +567,7 @@
"relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s",
"relative_time.today": "šodien",
"reply_indicator.attachments": "{count, plural, zero{# pielikumu} one {# pielikums} other {# pielikumi}}",
"reply_indicator.cancel": "Atcelt",
"reply_indicator.poll": "Aptauja",
"report.block": "Bloķēt",
@ -630,7 +641,7 @@
"search_results.title": "Meklēt {q}",
"server_banner.about_active_users": "Cilvēki, kas izmantojuši šo serveri pēdējo 30 dienu laikā (aktīvie lietotāji mēnesī)",
"server_banner.active_users": "aktīvi lietotāji",
"server_banner.administered_by": "Administrē:",
"server_banner.administered_by": "Pārvalda:",
"server_banner.introduction": "{domain} ir daļa no decentralizētā sociālā tīkla, ko nodrošina {mastodon}.",
"server_banner.learn_more": "Uzzināt vairāk",
"server_banner.server_stats": "Servera statistika:",
@ -652,9 +663,10 @@
"status.direct_indicator": "Pieminēts privāti",
"status.edit": "Labot",
"status.edited": "Pēdējoreiz labots {date}",
"status.edited_x_times": "Labots {count, plural, one {{count} reizi} other {{count} reizes}}",
"status.edited_x_times": "Labots {count, plural, zero {{count} reižu} one {{count} reizi} other {{count} reizes}}",
"status.embed": "Iegult",
"status.favourite": "Izlasē",
"status.favourites": "{count, plural, zero {izlasēs} one {izlasē} other {izlasēs}}",
"status.filter": "Filtrē šo ziņu",
"status.filtered": "Filtrēts",
"status.hide": "Slēpt ierakstu",
@ -675,6 +687,7 @@
"status.reblog": "Pastiprināt",
"status.reblog_private": "Pastiprināt, nemainot redzamību",
"status.reblogged_by": "{name} pastiprināja",
"status.reblogs": "{count, plural, zero {pastiprinājumu} one {pastiprinājums} other {pastiprinājumi}}",
"status.reblogs.empty": "Neviens šo ierakstu vēl nav pastiprinājis. Kad būs, tie parādīsies šeit.",
"status.redraft": "Dzēst un pārrakstīt",
"status.remove_bookmark": "Noņemt grāmatzīmi",

View file

@ -17,9 +17,12 @@
"account.badges.group": "गट",
"account.block": "@{name} यांना ब्लॉक करा",
"account.block_domain": "{domain} पासून सर्व लपवा",
"account.block_short": "अवरोध",
"account.blocked": "ब्लॉक केले आहे",
"account.browse_more_on_origin_server": "मूळ प्रोफाइलवर अधिक ब्राउझ करा",
"account.cancel_follow_request": "फॉलो विनंती मागे घ्या",
"account.copy": "दुवा कॉपी करा",
"account.direct": "खाजगीरित्या उल्लेखीत @{name}",
"account.disable_notifications": "जेव्हा @{name} पोस्ट करतात तेव्हा मला सूचित करणे थांबवा",
"account.domain_blocked": "Domain hidden",
"account.edit_profile": "प्रोफाइल एडिट करा",
@ -29,6 +32,7 @@
"account.featured_tags.last_status_never": "पोस्ट नाहीत",
"account.featured_tags.title": "{name} चे वैशिष्ट्यीकृत हॅशटॅग",
"account.follow": "अनुयायी व्हा",
"account.follow_back": "आपणही अनुसरण करा",
"account.followers": "अनुयायी",
"account.followers.empty": "ह्या वापरकर्त्याचा आतापर्यंत कोणी अनुयायी नाही.",
"account.followers_counter": "{count, plural, one {{counter} Toot} other {{counter} Toots}}",
@ -45,6 +49,7 @@
"account.mention": "@{name} चा उल्लेख करा",
"account.moved_to": "{name} ने सूचित केले आहे की त्यांचे नवीन खाते आता आहे:",
"account.mute": "@{name} ला मूक कारा",
"account.mute_short": "नि:शब्द",
"account.muted": "मौन",
"account.open_original_page": "मूळ पृष्ठ उघडा",
"account.posts": "Toots",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Alsnog het profiel tonen",
"limited_account_hint.title": "Dit profiel is door de moderatoren van {domain} verborgen.",
"link_preview.author": "Door {name}",
"link_preview.more_from_author": "Meer van {name}",
"lists.account.add": "Aan lijst toevoegen",
"lists.account.remove": "Uit lijst verwijderen",
"lists.delete": "Lijst verwijderen",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Shfaqe profilin sido qoftë",
"limited_account_hint.title": "Ky profil është fshehur nga moderatorët e {domain}.",
"link_preview.author": "Nga {name}",
"link_preview.more_from_author": "Më tepër nga {name}",
"lists.account.add": "Shto në listë",
"lists.account.remove": "Hiqe nga lista",
"lists.delete": "Fshije listën",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Ipak prikaži profil",
"limited_account_hint.title": "Ovaj profil su sakrili moderatori {domain}.",
"link_preview.author": "Po {name}",
"link_preview.more_from_author": "Više od {name}",
"lists.account.add": "Dodaj na listu",
"lists.account.remove": "Ukloni sa liste",
"lists.delete": "Izbriši listu",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Ипак прикажи профил",
"limited_account_hint.title": "Овај профил су сакрили модератори {domain}.",
"link_preview.author": "По {name}",
"link_preview.more_from_author": "Више од {name}",
"lists.account.add": "Додај на листу",
"lists.account.remove": "Уклони са листе",
"lists.delete": "Избриши листу",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Visa profil ändå",
"limited_account_hint.title": "Denna profil har dolts av {domain}s moderatorer.",
"link_preview.author": "Av {name}",
"link_preview.more_from_author": "Mer från {name}",
"lists.account.add": "Lägg till i lista",
"lists.account.remove": "Ta bort från lista",
"lists.delete": "Radera lista",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "แสดงโปรไฟล์ต่อไป",
"limited_account_hint.title": "มีการซ่อนโปรไฟล์นี้โดยผู้กลั่นกรองของ {domain}",
"link_preview.author": "โดย {name}",
"link_preview.more_from_author": "เพิ่มเติมจาก {name}",
"lists.account.add": "เพิ่มไปยังรายการ",
"lists.account.remove": "เอาออกจากรายการ",
"lists.delete": "ลบรายการ",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Yine de profili göster",
"limited_account_hint.title": "Bu profil {domain} moderatörleri tarafından gizlendi.",
"link_preview.author": "Yazar: {name}",
"link_preview.more_from_author": "{name} kişisinden daha fazlası",
"lists.account.add": "Listeye ekle",
"lists.account.remove": "Listeden kaldır",
"lists.delete": "Listeyi sil",

View file

@ -414,6 +414,7 @@
"limited_account_hint.action": "Усе одно показати профіль",
"limited_account_hint.title": "Цей профіль сховали модератори {domain}.",
"link_preview.author": "Від {name}",
"link_preview.more_from_author": "Більше від {name}",
"lists.account.add": "Додати до списку",
"lists.account.remove": "Вилучити зі списку",
"lists.delete": "Видалити список",

View file

@ -147,6 +147,9 @@ class NotifyService < BaseService
end
def statuses_that_mention_sender
# This queries private mentions from the recipient to the sender up in the thread.
# This allows up to 100 messages that do not match in the thread, allowing conversations
# involving multiple people.
Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @sender.id, depth_limit: 100])
WITH RECURSIVE ancestors(id, in_reply_to_id, mention_id, path, depth) AS (
SELECT s.id, s.in_reply_to_id, m.id, ARRAY[s.id], 0
@ -154,16 +157,17 @@ class NotifyService < BaseService
LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id
WHERE s.id = :id
UNION ALL
SELECT s.id, s.in_reply_to_id, m.id, st.path || s.id, st.depth + 1
FROM ancestors st
JOIN statuses s ON s.id = st.in_reply_to_id
LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id
WHERE st.mention_id IS NULL AND NOT s.id = ANY(path) AND st.depth < :depth_limit
SELECT s.id, s.in_reply_to_id, m.id, ancestors.path || s.id, ancestors.depth + 1
FROM ancestors
JOIN statuses s ON s.id = ancestors.in_reply_to_id
/* early exit if we already have a mention matching our requirements */
LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id AND s.account_id = :recipient_id
WHERE ancestors.mention_id IS NULL AND NOT s.id = ANY(path) AND ancestors.depth < :depth_limit
)
SELECT COUNT(*)
FROM ancestors st
JOIN statuses s ON s.id = st.id
WHERE st.mention_id IS NOT NULL AND s.visibility = 3
FROM ancestors
JOIN statuses s ON s.id = ancestors.id
WHERE ancestors.mention_id IS NOT NULL AND s.account_id = :recipient_id AND s.visibility = 3
SQL
end
end

View file

@ -48,6 +48,7 @@ require_relative '../lib/chewy/strategy/bypass_with_warning'
require_relative '../lib/webpacker/manifest_extensions'
require_relative '../lib/webpacker/helper_extensions'
require_relative '../lib/rails/engine_extensions'
require_relative '../lib/action_dispatch/remote_ip_extensions'
require_relative '../lib/active_record/database_tasks_extensions'
require_relative '../lib/active_record/batches'
require_relative '../lib/simple_navigation/item_extensions'

View file

@ -6,5 +6,5 @@
# Use this to limit dissemination of sensitive information.
# See the ActiveSupport::ParameterFilter documentation for supported notations and behaviors.
Rails.application.config.filter_parameters += [
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
:passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]

View file

@ -37,6 +37,10 @@ class Rack::Attack
authenticated_token&.id
end
def warden_user_id
@env['warden']&.user&.id
end
def unauthenticated?
!authenticated_user_id
end
@ -58,10 +62,6 @@ class Rack::Attack
end
end
Rack::Attack.safelist('allow from localhost') do |req|
req.remote_ip == '127.0.0.1' || req.remote_ip == '::1'
end
Rack::Attack.blocklist('deny from blocklist') do |req|
IpBlock.blocked?(req.remote_ip)
end
@ -141,6 +141,10 @@ class Rack::Attack
req.session[:attempt_user_id] || req.params.dig('user', 'email').presence if req.post? && req.path_matches?('/auth/sign_in')
end
throttle('throttle_password_change/account', limit: 10, period: 10.minutes) do |req|
req.warden_user_id if req.put? || (req.patch? && req.path_matches?('/auth'))
end
self.throttled_responder = lambda do |request|
now = Time.now.utc
match_data = request.env['rack.attack.match_data']

View file

@ -3,7 +3,7 @@
ActiveSupport::Notifications.subscribe(/rack_attack/) do |_name, _start, _finish, _request_id, payload|
req = payload[:request]
next unless [:throttle, :blacklist].include? req.env['rack.attack.match_type']
next unless [:throttle, :blocklist].include? req.env['rack.attack.match_type']
Rails.logger.info("Rate limit hit (#{req.env['rack.attack.match_type']}): #{req.ip} #{req.request_method} #{req.fullpath}")
end

View file

@ -1673,6 +1673,7 @@ da:
domain_block: Serversuspendering (%{target_name})
user_domain_block: "%{target_name} blev blokeret"
lost_followers: Tabte følgere
lost_follows: Mistet følger
preamble: Der kan mistes fulgte objekter og følgere, når et domæne blokeres eller moderatorerne beslutter at suspendere en ekstern server. Når det sker, kan der downloades lister over afbrudte relationer til inspektion og mulig import på anden server.
purged: Oplysninger om denne server er blevet renset af serveradministratoreren.
type: Begivenhed

View file

@ -76,7 +76,7 @@ lt:
webauthn_disabled:
explanation: Tavo paskyrai išjungtas tapatybės nustatymas naudojant saugumo raktus.
extra: Prisijungimas dabar galimas naudojant tik susietos TOTP programėlės sugeneruotą prieigos raktą.
subject: 'Mastodon: tapatybės nustatymas naudojant saugumo raktai išjungta'
subject: 'Mastodon: tapatybės nustatymas su saugumo raktai išjungta'
title: Saugumo raktai išjungti
webauthn_enabled:
explanation: Tavo paskyrai įjungtas saugumo rakto tapatybės nustatymas.
@ -98,8 +98,8 @@ lt:
signed_up_but_inactive: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar nėra aktyvuota.
signed_up_but_locked: Sėkmingai užsiregistravai. Tačiau negalėjome tavęs prijungti, nes tavo paskyra dar užrakinta.
signed_up_but_pending: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Paspaudęs (-usi) nuorodą, peržiūrėsime tavo paraišką. Tau bus pranešta, jei ji patvirtinta.
signed_up_but_unconfirmed: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Paspausk nuorodą, kad aktyvuotum savo paskyrą. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
update_needs_confirmation: Sėkmingai atnaujinai savo paskyrą, bet mums reikia patvirtinti naująjį el. pašto adresą. Patikrink savo el. paštą ir paspausk patvirtinimo nuorodą, kad patvirtintum savo naują el. pašto adresą. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
signed_up_but_unconfirmed: Į tavo el. pašto adresą buvo išsiųstas laiškas su patvirtinimo nuoroda. Sek nuorodą, kad aktyvuotum savo paskyrą. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
update_needs_confirmation: Sėkmingai atnaujinai savo paskyrą, bet mums reikia patvirtinti naująjį el. pašto adresą. Patikrink savo el. paštą ir sek patvirtinimo nuorodą, kad patvirtintum savo naują el. pašto adresą. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
updated: Tavo paskyra buvo sėkmingai atnaujinta.
sessions:
already_signed_out: Atsijungta sėkmingai.
@ -107,7 +107,7 @@ lt:
signed_out: Atjungta sėkmingai.
unlocks:
send_instructions: Po kelių minučių gausi el. laišką su instrukcijomis, kaip atrakinti paskyrą. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
send_paranoid_instructions: Jei paskyra egzistuoja, po kelių minučių gausi el. laišką su instrukcijomis, kaip ją atrakinti. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
send_paranoid_instructions: Jei tavo paskyra egzistuoja, po kelių minučių gausi el. laišką su instrukcijomis, kaip ją atrakinti. Jei negavai šio el. laiško, patikrink šlamšto aplanką.
unlocked: Tavo paskyra sėkmingai atrakinta. Norėdamas (-a) tęsti, prisijunk.
errors:
messages:

View file

@ -174,6 +174,7 @@ lv:
read:filters: apskatīt savus filtrus
read:follows: apskatīt savus sekotājus
read:lists: apskatīt savus sarakstus
read:me: lasīt tikai Tava konta pamatinformāciju
read:mutes: apskatīt savus apklusinātos
read:notifications: apskatīt savus paziņojumus
read:reports: apskatīt savus pārskatus

View file

@ -38,7 +38,7 @@ ia:
avatar: Avatar
by_domain: Dominio
change_email:
changed_msg: Email cambiate con successo!
changed_msg: E-mail cambiate con successo!
current_email: E-mail actual
label: Cambiar e-mail
new_email: Nove e-mail
@ -56,12 +56,12 @@ ia:
delete: Deler datos
deleted: Delite
demote: Degradar
destroyed_msg: Le datos de %{username} ora es in cauda pro su imminente deletion
destroyed_msg: Le datos de %{username} es ora in cauda pro lor imminente deletion
disable: Gelar
disable_sign_in_token_auth: Disactivar le authentication per token in e-mail
disable_two_factor_authentication: Disactivar 2FA
disable_two_factor_authentication: Disactivar authentication bifactorial
disabled: Gelate
display_name: Nomine visibile
display_name: Nomine a monstrar
domain: Dominio
edit: Modificar
email: E-mail
@ -82,7 +82,7 @@ ia:
all: Toto
local: Local
remote: Remote
title: Location
title: Position
login_status: Stato de session
media_attachments: Annexos multimedial
memorialize: Render commemorative
@ -137,7 +137,7 @@ ia:
security: Securitate
security_measures:
only_password: Solmente contrasigno
password_and_2fa: Contrasigno e 2FA
password_and_2fa: Contrasigno e A2F
sensitive: Fortiar sensibile
sensitized: Marcate como sensibile
shared_inbox_url: URL del cassa de entrata condividite
@ -195,17 +195,17 @@ ia:
destroy_email_domain_block: Crear blocada de dominio email
destroy_instance: Purgar dominio
destroy_ip_block: Deler le regula IP
destroy_status: Deler le message
destroy_unavailable_domain: Deler le dominio non disponibile
destroy_status: Deler message
destroy_unavailable_domain: Deler dominio indisponibile
destroy_user_role: Destruer rolo
disable_2fa_user: Disactivar 2FA
disable_2fa_user: Disactivar A2F
disable_custom_emoji: Disactivar emoji personalisate
disable_sign_in_token_auth_user: Disactivar le authentication per testimonio via email pro usator
disable_sign_in_token_auth_user: Disactivar le authentication per token de e-mail pro le usator
disable_user: Disactivar le usator
enable_custom_emoji: Activar emoji personalisate
enable_sign_in_token_auth_user: Activar le authentication per testimonio via email pro usator
enable_sign_in_token_auth_user: Activar le authentication per token de e-mail pro le usator
enable_user: Activar le usator
memorialize_account: Commemorar conto
memorialize_account: Converter conto in memorial
promote_user: Promover usator
reject_appeal: Rejectar appello
reject_user: Rejectar usator
@ -214,14 +214,14 @@ ia:
resend_user: Reinviar message de confirmation
reset_password_user: Reinitialisar contrasigno
resolve_report: Resolver reporto
sensitive_account: Marcar como sensibile le medios del conto
sensitive_account: Fortiar de marcar le conto como sensibile
silence_account: Limitar conto
suspend_account: Suspender conto
unassigned_report: Disassignar reporto
unblock_email_account: Disblocar adresse de e-mail
unsensitive_account: Dismarcar como sensibile le medios del conto
unsilence_account: Disfacer le limite de conto
unsuspend_account: Annullar suspension de conto
unsensitive_account: Non plus fortiar de marcar le conto como sensibile
unsilence_account: Non plus limitar conto
unsuspend_account: Non plus suspender conto
update_announcement: Actualisar annuncio
update_custom_emoji: Actualisar emoji personalisate
update_domain_block: Actualisar blocada de dominio

View file

@ -265,10 +265,10 @@ lt:
destroy_user_role_html: "%{name} ištrynė %{target} vaidmenį"
disable_2fa_user_html: "%{name} išjungė dviejų veiksnių reikalavimą naudotojui %{target}"
disable_custom_emoji_html: "%{name} išjungė jaustuką %{target}"
disable_sign_in_token_auth_user_html: "%{name} išjungė el. pašto prieigos tapatybės nustatymą %{target}"
disable_sign_in_token_auth_user_html: "%{name} išjungė el. pašto prieigos tapatybės nustatymą naudotojui %{target}"
disable_user_html: "%{name} išjungė prisijungimą naudotojui %{target}"
enable_custom_emoji_html: "%{name} įjungė jaustuką %{target}"
enable_sign_in_token_auth_user_html: "%{name} įjungė el. pašto prieigos tapatybės nustatymą %{target}"
enable_sign_in_token_auth_user_html: "%{name} įjungė el. pašto prieigos tapatybės nustatymą naudotojui %{target}"
enable_user_html: "%{name} įjungė prisijungimą naudotojui %{target}"
memorialize_account_html: "%{name} pavertė %{target} paskyrą į atminimo puslapį"
promote_user_html: "%{name} paaukštino naudotoją %{target}"
@ -440,6 +440,9 @@ lt:
create: Pridėto domeną
title: Naujas el pašto juodojo sąrašo įtraukimas
title: El pašto juodasis sąrašas
export_domain_blocks:
import:
description_html: Netrukus importuosi domenų blokavimų sąrašą. Labai atidžiai peržiūrėk šį sąrašą, ypač jei ne tu jį sudarei.
instances:
availability:
title: Prieinamumas
@ -493,6 +496,7 @@ lt:
destroyed_msg: Skundo žinutė sekmingai ištrinta!
reports:
action_taken_by: Veiksmo ėmėsi
actions_description_html: Nuspręsk, kokių veiksmų imtis, kad išspręstum šią ataskaitą. Jei imsis baudžiamųjų veiksmų prieš paskyrą, apie kurią pranešta, jiems bus išsiųstas el. laiško pranešimas, išskyrus atvejus, kai pasirinkta kategorija <strong>Šlamštas</strong>.
already_suspended_badges:
local: Jau sustabdytas šiame serveryje
remote: Jau sustabdytas jų serveryje
@ -534,6 +538,7 @@ lt:
manage_invites: Tvarkyti kvietimus
manage_invites_description: Leidžia naudotojams naršyti ir deaktyvuoti kvietimų nuorodas.
manage_taxonomies_description: Leidžia naudotojams peržiūrėti tendencingą turinį ir atnaujinti saitažodžių nustatymus
manage_user_access_description: Leidžia naudotojams išjungti kitų naudotojų dvigubo tapatybės nustatymą, pakeisti el. pašto adresą ir iš naujo nustatyti slaptažodį.
settings:
captcha_enabled:
desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, <strong>dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami</strong>. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją.
@ -546,6 +551,15 @@ lt:
all: Visiems
registrations:
moderation_recommandation: Prieš atidarant registraciją visiems, įsitikink, kad turi tinkamą ir reaguojančią prižiūrėjimo komandą!
registrations_mode:
modes:
approved: Registracijai privalomas patvirtinimas
warning_hint: Rekomenduojame naudoti „Registracijai privalomas patvirtinimas“, nebent esi tikras (-a), kad tavo prižiūrėjimo komanda gali laiku apdoroti šlamštus ir kenkėjiškas registracijas.
security:
authorized_fetch: Reikalauti tapatybės nustatymo iš federacinių serverių
authorized_fetch_hint: Reikalauti tapatybės nustatymo iš federacinių serverių leidžia griežčiau užtikrinti tiek naudotojo, tiek serverio lygio blokų vykdymą. Tačiau dėl to nukenčia našumas, sumažėja atsakymų pasiekiamumas ir gali kilti suderinamumo su kai kuriomis federacinėmis paslaugomis problemų. Be to, tai nesutrukdys skirtiems dalyviams gauti tavo viešų įrašų ir paskyrų.
authorized_fetch_overridden_hint: Šiuo metu negali pakeisti šio nustatymo, nes jį pakeičia aplinkos kintamasis.
federation_authentication: Federacijos tapatybės nustatymo vykdymas
software_updates:
description: Rekomenduojama nuolat atnaujinti Mastodon diegyklę, kad galėtum naudotis naujausiais pataisymais ir funkcijomis. Be to, kartais labai svarbu laiku atnaujinti Mastodon, kad būtų išvengta saugumo problemų. Dėl šių priežasčių Mastodon kas 30 minučių tikrina, ar yra naujinimų, ir praneša tau apie tai pagal tavo el. pašto pranešimų parinktis.
documentation_link: Sužinoti daugiau
@ -687,34 +701,71 @@ lt:
warning: Būkite atsargūs su šia informacija. Niekada jos nesidalinkite!
your_token: Tavo prieigos raktas
auth:
apply_for_account: Prašyti paskyros
captcha_confirmation:
help_html: Jei turi problemų išsprendžiant CAPTCHA, gali susisiekti su mumis per %{email} ir mes tau padėsime.
hint_html: Dar vienas dalykas! Turime patvirtinti, kad esi žmogus (kad galėtume išvengti šlamšto). Išspręsk toliau pateiktą CAPTCHA ir spausk Tęsti.
title: Saugumo patikrinimas
confirmations:
awaiting_review: Tavo el. pašto adresas yra patvirtintas! Domeno %{domain} personalas dabar tikrina tavo registraciją. Jei jie patvirtins tavo paskyrą, gausi el. laišką.
awaiting_review_title: Peržiūrima tavo registracija
clicking_this_link: paspausti šį nuorodą
login_link: prisijungti
proceed_to_login_html: Dabar gali pereiti prie %{login_link}.
redirect_to_app_html: Turėjei būti nukreiptas (-a) į <strong>%{app_name}</strong> programėlę. Jei taip neatsitiko, pabandyk %{clicking_this_link} arba rankiniu būdu grįžk į programėlę.
registration_complete: Tavo registracija domene %{domain} baigta!
welcome_title: Sveiki, %{name}!
wrong_email_hint: Jei šis el. pašto adresas neteisingas, gali jį pakeisti paskyros nustatymuose.
delete_account: Ištrinti paskyrą
delete_account_html: Jeigu norite ištrinti savo paskyrą, galite eiti <a href="%{path}">čia</a>. Jūsų prašys patvirtinti pasirinkimą.
delete_account_html: Jei nori ištrinti savo paskyrą, gali <a href="%{path}">tęsti čia</a>. Tavęs bus paprašyta patvirtinimo.
description:
prefix_invited_by_user: "@%{name} kviečia prisijungti prie šio Mastodon serverio!"
prefix_sign_up: Užsiregistruok Mastodon šiandien!
prefix_sign_up: Užsiregistruok sistemoje Mastodon šiandien!
suffix: Su paskyra galėsi sekti žmones, skelbti naujienas ir keistis žinutėmis su bet kurio Mastodon serverio naudotojais ir dar daugiau!
didnt_get_confirmation: Negavai patvirtinimo nuorodos?
dont_have_your_security_key: Neturi saugumo rakto?
forgot_password: Pamiršai slaptažodį?
invalid_reset_password_token: Slaptažodžio atkūrimo raktas yra netinkamas arba nebegaliojantis. Paprašyk naujo.
link_to_otp: Įvesk dvigubą kodą iš telefono arba atkūrimo kodą
link_to_webauth: Naudoti saugumo rakto įrenginį
log_in_with: Prisijungti su
login: Prisijungti
logout: Atsijungti
migrate_account: Prisijungti prie kitos paskyros
migrate_account_html: Jeigu norite nukreipti šią paskyrą į kita, galite tai <a href="%{path}">konfiguruoti čia</a>.
migrate_account: Persikelti prie kitos paskyros
migrate_account_html: Jei nori šią paskyrą nukreipti į kitą, gali <a href="%{path}">sukonfigūruoti ją čia</a>.
or_log_in_with: Arba prisijungti su
privacy_policy_agreement_html: Perskaičiau ir sutinku su <a href="%{privacy_policy_path}" target="_blank">privatumo politika</a>
progress:
confirm: Patvirtinti el. paštą
details: Tavo duomenys
review: Mūsų peržiūra
rules: Priimti taisykles
providers:
cas: CAS
saml: SAML
register: Užsiregistruoti
reset_password: Atstatyti slaptažodį
registration_closed: "%{instance} nepriima naujų narių"
resend_confirmation: Iš naujo siųsti patvirtinimo nuorodą
reset_password: Nustatyti iš naujo slaptažodį
rules:
accept: Priimti
back: Grįžti
invited_by: 'Gali prisijungti prie %{domain} pagal kvietimą, kurį gavai iš:'
preamble: Tai nustatė ir taiko %{domain} prižiūrėtojai.
preamble_invited: Prieš tęsiant, atsižvelk į pagrindines taisykles, kurias nustatė %{domain} prižiūrėtojai.
title: Kelios pagrindinės taisyklės.
title_invited: Esi pakviestas.
security: Apsauga
set_new_password: Nustatyti naują slaptažodį
setup:
email_below_hint_html: Patikrink šlamšto aplanką arba paprašyk kito. Gali ištaisyti savo el. pašto adresą, jei jis neteisingas.
email_settings_hint_html: Spustelėk mūsų atsiųstą nuorodą, kad patikrintum %{email}. Mes lauksime čia.
link_not_received: Negavai nuorodos?
new_confirmation_instructions_sent: Po kelių minučių gausi naują el. laišką su patvirtinimo nuoroda!
title: Patikrinti pašto dėžutę
sign_in:
preamble_html: Prisijunk su savo <strong>%{domain}</strong> kredencialais. Jei tavo yra kitame serveryje, čia prisijungti negalėsi.
title: Prisijungti prie %{domain}
status:
account_status: Paskyros būsena
redirecting_to: Tavo paskyra yra neaktyvi, nes šiuo metu ji nukreipiama į %{acct}.
@ -851,6 +902,12 @@ lt:
expires_at: Baigsis
uses: Naudojimai
title: Kviesti žmones
login_activities:
authentication_methods:
otp: dvigubas tapatybės nustatymo programėlė
description_html: Jei pastebėjei neatpažįstamą veiklą, apsvarstyk galimybę pakeisti slaptažodį ir įjungti dvigubą tapatybės nustatymą.
empty: Tapatybės nustatymas istorijos nėra
title: Tapatybės nustatymo istorija
media_attachments:
validations:
images_and_video: Negalima pridėti video prie statuso, kuris jau turi nuotrauką
@ -893,6 +950,10 @@ lt:
billion: mlrd.
million: mln.
thousand: tūkst.
otp_authentication:
code_hint: Įvesk autentifikatoriaus programėlės sugeneruotą kodą, kad patvirtintum
description_html: Jei įjungsi <strong>dvigubo tapatybės nustatymą</strong> naudojant autentifikatoriaus programėlę, prisijungiant reikės turėti telefoną, kuris generuos prieigos raktos, kuriuos turėsi įvesti.
instructions_html: "<strong>Nuskenuok šį QR kodą į Google Authenticator arba panašią TOTP programėlę savo telefone</strong>. Nuo šiol ši programėlė generuos prieigos raktus, kuriuos turėsi įvesti prisijungiant."
pagination:
newer: Naujesnis
next: Kitas
@ -963,6 +1024,7 @@ lt:
revoke: Naikinti
revoke_success: Seansas sėkmingai panaikintas.
title: Seansai
view_authentication_history: Peržiūrėti paskyros tapatybės nustatymo istoriją
settings:
account: Paskyra
account_settings: Paskyros nustatymai
@ -982,7 +1044,7 @@ lt:
profile: Viešas profilis
relationships: Sekimai ir sekėjai
severed_relationships: Nutrūkę sąryšiai
two_factor_authentication: Dviejų veiksnių autentikacija
two_factor_authentication: Dvigubas tapatybės nustatymas
severed_relationships:
download: Atsisiųsti (%{count})
preamble: Užblokavus domeną arba prižiūrėtojams nusprendus pristabdyti nuotolinio serverio veiklą, gali prarasti sekimus ir sekėjus. Kai taip atsitiks, galėsi atsisiųsti nutrauktų sąryšių sąrašus, kad juos patikrinti ir galbūt importuoti į kitą serverį.
@ -1035,10 +1097,12 @@ lt:
two_factor_authentication:
add: Pridėti
disable: Išjungti 2FA
enabled: Dviejų veiksnių autentikacija įjungta
enabled_success: Dviejų veiksnių autentikacija sėkmingai įjungta
disabled_success: Dvigubas tapatybės nustatymas sėkmingai išjungtas
enabled: Dvigubas tapatybės nustatymas įjungtas
enabled_success: Dvigubas tapatybės nustatymas sėkmingai įjungtas
generate_recovery_codes: Sugeneruoti atkūrimo kodus
lost_recovery_codes: Atkūrimo kodai jums leidžia atgauti prisijungimą prie Jūsų paskyros, jeigu prarandate telefoną. Jeigu praradote atkūrimo kodus, juos galite sugeneruoti čia. Jūsų senieji atkūrimo kodai nebeveiks.
otp: Autentifikatoriaus programėlė
recovery_codes: Atsarginio atkūrimo kodai
recovery_codes_regenerated: Atkūrimo kodai sėkmingai sugeneruoti
recovery_instructions_html: Jeigu prarandate prieiga prie telefono, jūs galite naudoti atkūrimo kodus esančius žemiau, kad atgautumėte priega prie savo paskyros.<strong>Laikykite atkūrimo kodus saugiai</strong> Pavyzdžiui, galite norėti juos išspausdinti, ir laikyti kartu su kitais svarbiais dokumentais.
@ -1055,11 +1119,15 @@ lt:
title: Archyvas išimtas
failed_2fa:
details: 'Štai išsami informacija apie bandymą prisijungti:'
explanation: Kažkas bandė prisijungti prie tavo paskyros, bet nurodė netinkamą antrąjį tapatybės nustatymo veiksnį.
explanation: Kažkas bandė prisijungti prie tavo paskyros, bet nurodė netinkamą dvigubą tapatybės nustatymą.
further_actions_html: Jei tai buvo ne tu, rekomenduojame nedelsiant imtis %{action}, nes jis gali būti pažeistas.
subject: Antrojo veiksnio tapatybės nustatymas nesėkmingai
title: Nepavyko atlikti antrojo veiksnio tapatybės nustatymo
subject: Dvigubas tapatybės nustatymas nesėkmingai
title: Nepavyko atlikti dvigubo tapatybės nustatymo
suspicious_sign_in:
further_actions_html: Jei tai buvai ne tu, rekomenduojame nedelsiant %{action} ir įjungti dvigubą tapatybės nustatymą, kad tavo paskyra būtų saugi.
warning:
categories:
spam: Šlamštas
subject:
disable: Jūsų paskyra %{acct} buvo užšaldyta
none: Įspėjmas vartotojui %{acct}
@ -1134,3 +1202,4 @@ lt:
success: Tavo saugumo raktas buvo sėkmingai ištrintas.
nickname_hint: Įvesk naujojo saugumo rakto slapyvardį
not_enabled: Dar neįjungei WebAuthn
otp_required: Norint naudoti saugumo raktus, pirmiausia įjunk dvigubą tapatybės nustatymą.

View file

@ -53,7 +53,7 @@ ia:
password: Usa al minus 8 characteres
phrase: Sera concordate ignorante majuscule/minuscule in le texto o avisos de contento de un message
scopes: A que APIs sera permittite acceder al application. Si tu selige un ambito de maxime nivello, tu non besonia de seliger los singulemente.
setting_aggregate_reblogs: Non monstra nove stimulos pro messages que ha essite recentemente stimulate (stimulos solo affice los novemente recipite)
setting_aggregate_reblogs: Non monstrar nove impulsos pro messages que ha essite recentemente impulsate (affecta solmente le impulsos novemente recipite)
setting_always_send_emails: Normalmente le avisos de email non sera inviate quando tu activemente usa Mastodon
setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic
setting_display_media_default: Celar le medios marcate como sensibile
@ -81,7 +81,7 @@ ia:
backups_retention_period: Le usatores pote generar archivos de lor messages pro discargar los plus tarde. Quando predefinite a un valor positive, iste archivos sera automaticamente delite de tu immagazinage post le specificate numero de dies.
bootstrap_timeline_accounts: Iste contos sera appunctate al summitate del recommendationes a sequer del nove usatores.
closed_registrations_message: Monstrate quando le inscriptiones es claudite
content_cache_retention_period: Tote messages de altere servitores (includite stimulos e responsas) sera delite post le specificate numero de dies, sin considerar alcun interaction de usator local con ille messages. Isto include messages ubi un usator local los ha marcate como marcapaginas o favoritos. Mentiones private inter usatores de differente instantias sera alsi perdite e impossibile a restaurar. Le uso de iste parametros es intendite pro specific instantias e infringe multe expectationes de usator quando implementate pro uso general.
content_cache_retention_period: Tote le messages de altere servitores (includite impulsos e responsas) essera delite post le numero de dies specificate, independentemente de tote interaction de usatores local con ille messages. Isto include le messages addite al marcapaginas o marcate como favorite per un usator local. Le mentiones private inter usatores de differente instantias tamben essera irrecuperabilemente perdite. Le uso de iste parametro es intendite pro instantias con scopos specific e viola multe expectationes de usatores si es implementate pro uso general.
custom_css: Tu pote applicar stilos personalisate sur le version de web de Mastodon.
favicon: WEBP, PNG, GIF o JPG. Supplanta le favicone predefinite de Mastodon con un icone personalisate.
mascot: Illo substitue le illustration in le interfacie web avantiate.
@ -125,9 +125,9 @@ ia:
webauthn: Si illo es un clave USB cura de inserer lo e, si necessari, tocca lo.
settings:
indexable: Tu pagina del profilo pote apparer in resultatos del recerca sur Google, Bing, e alteros.
show_application: Tu sempre sera capace totevia de vider que app publicava tu message.
show_application: In omne caso, tu potera sempre vider qual app ha publicate tu message.
tag:
name: Tu pote solo cambiar le inveloppe del litteras, per exemplo, pro render lo plus legibile
name: Tu pote solmente cambiar le litteras inter majusculas e minusculas, per exemplo, pro render lo plus legibile
user:
chosen_languages: Si marcate, solo le messages in le linguas seligite sera monstrate in chronologias public
role: Le rolo controla que permissos ha le usator
@ -203,10 +203,10 @@ ia:
password: Contrasigno
phrase: Parola o phrase clave
setting_advanced_layout: Activar le interfacie web avantiate
setting_aggregate_reblogs: Gruppa promotiones in classificationes temporal
setting_aggregate_reblogs: Gruppar impulsos in chronologias
setting_always_send_emails: Sempre inviar notificationes per e-mail
setting_auto_play_gif: Auto-reproduce GIFs animate
setting_boost_modal: Monstrar dialogo de confirmation ante promover
setting_boost_modal: Monstrar dialogo de confirmation ante de impulsar
setting_default_language: Lingua de publication
setting_default_privacy: Confidentialitate del messages
setting_default_sensitive: Sempre marcar le medios cmo sensbile
@ -292,7 +292,7 @@ ia:
follow_request: Alcuno requireva de sequer te
mention: Alcuno te mentionava
pending_account: Nove conto besonia de revision
reblog: Alcuno promoveva tu message
reblog: Alcuno ha impulsate tu message
report: Un nove reporto es inviate
software_updates:
all: Notificar sur tote le actualisationes

View file

@ -77,9 +77,11 @@ lv:
warn: Paslēp filtrēto saturu aiz brīdinājuma, kurā minēts filtra nosaukums
form_admin_settings:
activity_api_enabled: Vietēji publicēto ziņu, aktīvo lietotāju un jauno reģistrāciju skaits nedēļas kopās
app_icon: WEBP, PNG, GIF vai JPG. Mobilajās ierīcēs aizstāj noklusējuma lietotnes ikonu ar pielāgotu.
bootstrap_timeline_accounts: Šie konti tiks piesprausti jauno lietotāju ieteikumu augšdaļā.
closed_registrations_message: Tiek rādīts, kad reģistrēšanās ir slēgta
custom_css: Vari lietot pielāgotus stilus Mastodon tīmekļa versijā.
favicon: WEBP, PNG, GIF vai JPG. Aizstāj noklusējuma Mastodon favikonu ar pielāgotu.
mascot: Ignorē ilustrāciju uzlabotajā tīmekļa saskarnē.
peers_api_enabled: Domēna vārdu saraksts, ar kuriem šis serveris ir saskāries fediversā. Šeit nav iekļauti dati par to, vai tu veic federāciju ar noteiktu serveri, tikai tavs serveris par to zina. To izmanto dienesti, kas apkopo statistiku par federāciju vispārīgā nozīmē.
profile_directory: Profilu direktorijā ir uzskaitīti visi lietotāji, kuri ir izvēlējušies būt atklājami.
@ -113,6 +115,7 @@ lv:
sign_up_requires_approval: Jaunām reģistrācijām būs nepieciešams tavs apstiprinājums
severity: Izvēlies, kas notiks ar pieprasījumiem no šīs IP adreses
rule:
hint: Izvēles. Sniedz vairāk informācijas par nosacījumu
text: Apraksti nosacījumus vai prasības šī servera lietotājiem. Centies, lai tas būtu īss un vienkāršs
sessions:
otp: 'Ievadi divfaktoru kodu, ko ģenerējusi tava tālruņa lietotne, vai izmanto kādu no atkopšanas kodiem:'
@ -239,6 +242,7 @@ lv:
backups_retention_period: Lietotāja arhīva glabāšanas periods
bootstrap_timeline_accounts: Vienmēr iesaki šos kontus jaunajiem lietotājiem
closed_registrations_message: Pielāgots ziņojums, ja reģistrēšanās nav pieejama
content_cache_retention_period: Attālā satura paturēšanas laika posms
custom_css: Pielāgots CSS
mascot: Pielāgots talismans (mantots)
media_cache_retention_period: Multivides kešatmiņas saglabāšanas periods
@ -295,6 +299,7 @@ lv:
patch: Paziņot par novērsto kļūdu atjauninājumiem
trending_tag: Jaunā tendence ir jāpārskata
rule:
hint: Papildu informācija
text: Noteikumi
settings:
indexable: Ietvert profila lapu meklēšanas dzinējos

View file

@ -55,7 +55,7 @@ services:
web:
build: .
image: ghcr.io/mastodon/mastodon:v4.2.7
image: ghcr.io/mastodon/mastodon:v4.2.9
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
@ -76,7 +76,7 @@ services:
streaming:
build: .
image: ghcr.io/mastodon/mastodon:v4.2.7
image: ghcr.io/mastodon/mastodon:v4.2.9
restart: always
env_file: .env.production
command: node ./streaming
@ -94,7 +94,7 @@ services:
sidekiq:
build: .
image: ghcr.io/mastodon/mastodon:v4.2.7
image: ghcr.io/mastodon/mastodon:v4.2.9
restart: always
env_file: .env.production
command: bundle exec sidekiq

View file

@ -0,0 +1,72 @@
# frozen_string_literal: true
# Mastodon is not made to be directly accessed without a reverse proxy.
# This monkey-patch prevents remote IP address spoofing when being accessed
# directly.
#
# See PR: https://github.com/rails/rails/pull/51610
# In addition to the PR above, it also raises an error if a request with
# `X-Forwarded-For` or `Client-Ip` comes directly from a client without
# going through a trusted proxy.
# rubocop:disable all -- This is a mostly vendored file
module ActionDispatch
class RemoteIp
module GetIpExtensions
def calculate_ip
# Set by the Rack web server, this is a single value.
remote_addr = ips_from(@req.remote_addr).last
# Could be a CSV list and/or repeated headers that were concatenated.
client_ips = ips_from(@req.client_ip).reverse!
forwarded_ips = ips_from(@req.x_forwarded_for).reverse!
# `Client-Ip` and `X-Forwarded-For` should not, generally, both be set. If they
# are both set, it means that either:
#
# 1) This request passed through two proxies with incompatible IP header
# conventions.
#
# 2) The client passed one of `Client-Ip` or `X-Forwarded-For`
# (whichever the proxy servers weren't using) themselves.
#
# Either way, there is no way for us to determine which header is the right one
# after the fact. Since we have no idea, if we are concerned about IP spoofing
# we need to give up and explode. (If you're not concerned about IP spoofing you
# can turn the `ip_spoofing_check` option off.)
should_check_ip = @check_ip && client_ips.last && forwarded_ips.last
if should_check_ip && !forwarded_ips.include?(client_ips.last)
# We don't know which came from the proxy, and which from the user
raise IpSpoofAttackError, "IP spoofing attack?! " \
"HTTP_CLIENT_IP=#{@req.client_ip.inspect} " \
"HTTP_X_FORWARDED_FOR=#{@req.x_forwarded_for.inspect}"
end
# NOTE: Mastodon addition to make sure we don't get requests from a non-trusted client
if @check_ip && (forwarded_ips.last || client_ips.last) && !@proxies.any? { |proxy| proxy === remote_addr }
raise IpSpoofAttackError, "IP spoofing attack?! client #{remote_addr} is not a trusted proxy " \
"HTTP_CLIENT_IP=#{@req.client_ip.inspect} " \
"HTTP_X_FORWARDED_FOR=#{@req.x_forwarded_for.inspect}"
end
# We assume these things about the IP headers:
#
# - X-Forwarded-For will be a list of IPs, one per proxy, or blank
# - Client-Ip is propagated from the outermost proxy, or is blank
# - REMOTE_ADDR will be the IP that made the request to Rack
ips = forwarded_ips + client_ips
ips.compact!
# If every single IP option is in the trusted list, return the IP that's
# furthest away
filter_proxies([remote_addr] + ips).first || ips.last || remote_addr
end
end
end
end
ActionDispatch::RemoteIp::GetIp.prepend(ActionDispatch::RemoteIp::GetIpExtensions)
# rubocop:enable all

View file

@ -17,7 +17,7 @@ module Mastodon
end
def default_prerelease
'alpha.3'
'alpha.4'
end
def prerelease

View file

@ -56,7 +56,7 @@ describe Rack::Attack, type: :request do
end
def throttle_count
described_class.cache.read("#{counter_prefix}:#{throttle}:#{remote_ip}") || 0
described_class.cache.read("#{counter_prefix}:#{throttle}:#{discriminator}") || 0
end
def counter_prefix
@ -64,11 +64,12 @@ describe Rack::Attack, type: :request do
end
def increment_counter
described_class.cache.count("#{throttle}:#{remote_ip}", period)
described_class.cache.count("#{throttle}:#{discriminator}", period)
end
end
let(:remote_ip) { '1.2.3.5' }
let(:discriminator) { remote_ip }
describe 'throttle excessive sign-up requests by IP address' do
context 'when accessed through the website' do
@ -149,4 +150,30 @@ describe Rack::Attack, type: :request do
it_behaves_like 'throttled endpoint'
end
describe 'throttle excessive password change requests by account' do
let(:user) { Fabricate(:user, email: 'user@host.example') }
let(:throttle) { 'throttle_password_change/account' }
let(:limit) { 10 }
let(:period) { 10.minutes }
let(:request) { -> { put path, headers: { 'REMOTE_ADDR' => remote_ip } } }
let(:path) { '/auth' }
let(:discriminator) { user.id }
before do
sign_in user, scope: :user
# Unfortunately, devise's `sign_in` helper causes the `session` to be
# loaded in the next request regardless of whether it's actually accessed
# by the client code.
#
# So, we make an extra query to clear issue a session cookie instead.
#
# A less resource-intensive way to deal with that would be to generate the
# session cookie manually, but this seems pretty involved.
get '/'
end
it_behaves_like 'throttled endpoint'
end
end

View file

@ -1,7 +1,12 @@
# frozen_string_literal: true
Fabricator(:user) do
account { Fabricate.build(:account, user: nil) }
account do |attrs|
Fabricate.build(
:account,
attrs.fetch(:account_attributes, {}).merge(user: nil)
)
end
email { sequence(:email) { |i| "#{i}#{Faker::Internet.email}" } }
password '123456789'
confirmed_at { Time.zone.now }

View file

@ -309,6 +309,19 @@ RSpec.describe NotifyService do
expect(subject.filter?).to be false
end
end
context 'when the sender is mentioned in an unrelated message chain' do
before do
original_status = Fabricate(:status, visibility: :direct)
intermediary_status = Fabricate(:status, visibility: :direct, thread: original_status)
notification.target_status.update(thread: intermediary_status)
Fabricate(:mention, status: original_status, account: notification.from_account)
end
it 'returns true' do
expect(subject.filter?).to be true
end
end
end
end
end

552
yarn.lock
View file

@ -2131,9 +2131,9 @@ __metadata:
languageName: node
linkType: hard
"@es-joy/jsdoccomment@npm:~0.43.0":
version: 0.43.0
resolution: "@es-joy/jsdoccomment@npm:0.43.0"
"@es-joy/jsdoccomment@npm:~0.43.1":
version: 0.43.1
resolution: "@es-joy/jsdoccomment@npm:0.43.1"
dependencies:
"@types/eslint": "npm:^8.56.5"
"@types/estree": "npm:^1.0.5"
@ -2141,7 +2141,7 @@ __metadata:
comment-parser: "npm:1.4.1"
esquery: "npm:^1.5.0"
jsdoc-type-pratt-parser: "npm:~4.0.0"
checksum: 10c0/862294ed89772a231f309edd68405ece00f6aaf43103210f28410da894a6b697bc1f281c59e813dd37d5b7294f633ee7b874e07a0aa3d72f49504089fc9cb2c4
checksum: 10c0/2a4842b0e37eb937d55e3028ab2cd7ece7097e1f8c878bb9e28c3309371844688c2869d25bb949e2664c9ba63e388ea09b769c9f42f77515d328ec40e6fcfed1
languageName: node
linkType: hard
@ -4109,14 +4109,14 @@ __metadata:
linkType: hard
"@typescript-eslint/eslint-plugin@npm:^7.0.0":
version: 7.10.0
resolution: "@typescript-eslint/eslint-plugin@npm:7.10.0"
version: 7.11.0
resolution: "@typescript-eslint/eslint-plugin@npm:7.11.0"
dependencies:
"@eslint-community/regexpp": "npm:^4.10.0"
"@typescript-eslint/scope-manager": "npm:7.10.0"
"@typescript-eslint/type-utils": "npm:7.10.0"
"@typescript-eslint/utils": "npm:7.10.0"
"@typescript-eslint/visitor-keys": "npm:7.10.0"
"@typescript-eslint/scope-manager": "npm:7.11.0"
"@typescript-eslint/type-utils": "npm:7.11.0"
"@typescript-eslint/utils": "npm:7.11.0"
"@typescript-eslint/visitor-keys": "npm:7.11.0"
graphemer: "npm:^1.4.0"
ignore: "npm:^5.3.1"
natural-compare: "npm:^1.4.0"
@ -4127,25 +4127,25 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/bf3f0118ea5961c3eb01894678246458a329d82dda9ac7c2f5bfe77896410d05a08a4655e533bcb1ed2a3132ba6421981ec8c2ed0a3545779d9603ea231947ae
checksum: 10c0/50fedf832e4de9546569106eab1d10716204ceebc5cc7d62299112c881212270d0f7857e3d6452c07db031d40b58cf27c4d1b1a36043e8e700fc3496e377b54a
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^7.0.0":
version: 7.10.0
resolution: "@typescript-eslint/parser@npm:7.10.0"
version: 7.11.0
resolution: "@typescript-eslint/parser@npm:7.11.0"
dependencies:
"@typescript-eslint/scope-manager": "npm:7.10.0"
"@typescript-eslint/types": "npm:7.10.0"
"@typescript-eslint/typescript-estree": "npm:7.10.0"
"@typescript-eslint/visitor-keys": "npm:7.10.0"
"@typescript-eslint/scope-manager": "npm:7.11.0"
"@typescript-eslint/types": "npm:7.11.0"
"@typescript-eslint/typescript-estree": "npm:7.11.0"
"@typescript-eslint/visitor-keys": "npm:7.11.0"
debug: "npm:^4.3.4"
peerDependencies:
eslint: ^8.56.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/4c4fbf43b5b05d75b766acb803d3dd078c6e080641a77f9e48ba005713466738ea4a71f0564fa3ce520988d65158d14c8c952ba01ccbc431ab4a05935db5ce6d
checksum: 10c0/f5d1343fae90ccd91aea8adf194e22ed3eb4b2ea79d03d8a9ca6e7b669a6db306e93138ec64f7020c5b3128619d50304dea1f06043eaff6b015071822cad4972
languageName: node
linkType: hard
@ -4159,22 +4159,22 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:7.10.0":
version: 7.10.0
resolution: "@typescript-eslint/scope-manager@npm:7.10.0"
"@typescript-eslint/scope-manager@npm:7.11.0":
version: 7.11.0
resolution: "@typescript-eslint/scope-manager@npm:7.11.0"
dependencies:
"@typescript-eslint/types": "npm:7.10.0"
"@typescript-eslint/visitor-keys": "npm:7.10.0"
checksum: 10c0/1d4f7ee137b95bd423b5a1b0d03251202dfc19bd8b6adfa5ff5df25fd5aa30e2d8ca50ab0d8d2e92441670ecbc2a82b3c2dbe39a4f268ec1ee1c1e267f7fd1d1
"@typescript-eslint/types": "npm:7.11.0"
"@typescript-eslint/visitor-keys": "npm:7.11.0"
checksum: 10c0/35f9d88f38f2366017b15c9ee752f2605afa8009fa1eaf81c8b2b71fc22ddd2a33fff794a02015c8991a5fa99f315c3d6d76a5957d3fad1ccbb4cd46735c98b5
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:7.10.0":
version: 7.10.0
resolution: "@typescript-eslint/type-utils@npm:7.10.0"
"@typescript-eslint/type-utils@npm:7.11.0":
version: 7.11.0
resolution: "@typescript-eslint/type-utils@npm:7.11.0"
dependencies:
"@typescript-eslint/typescript-estree": "npm:7.10.0"
"@typescript-eslint/utils": "npm:7.10.0"
"@typescript-eslint/typescript-estree": "npm:7.11.0"
"@typescript-eslint/utils": "npm:7.11.0"
debug: "npm:^4.3.4"
ts-api-utils: "npm:^1.3.0"
peerDependencies:
@ -4182,7 +4182,7 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/55e9a6690f9cedb79d30abb1990b161affaa2684dac246b743223353812c9c1e3fd2d923c67b193c6a3624a07e1c82c900ce7bf5b6b9891c846f04cb480ebd9f
checksum: 10c0/637395cb0f4c424c610e751906a31dcfedcdbd8c479012da6e81f9be6b930f32317bfe170ccb758d93a411b2bd9c4e7e5d18892094466099c6f9c3dceda81a72
languageName: node
linkType: hard
@ -4193,10 +4193,10 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:7.10.0, @typescript-eslint/types@npm:^7.2.0":
version: 7.10.0
resolution: "@typescript-eslint/types@npm:7.10.0"
checksum: 10c0/f01d9330b93cc362ba7967ab5037396f64742076450e1f93139fa69cbe93a6ece3ed55d68ab780c9b7d07ef4a7c645da410305216a2cfc5dec7eba49ee65ab23
"@typescript-eslint/types@npm:7.11.0, @typescript-eslint/types@npm:^7.2.0":
version: 7.11.0
resolution: "@typescript-eslint/types@npm:7.11.0"
checksum: 10c0/c5d6c517124017eb44aa180c8ea1fad26ec8e47502f92fd12245ba3141560e69d7f7e35b8aa160ddd5df63a2952af407e2f62cc58b663c86e1f778ffb5b01789
languageName: node
linkType: hard
@ -4219,12 +4219,12 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:7.10.0":
version: 7.10.0
resolution: "@typescript-eslint/typescript-estree@npm:7.10.0"
"@typescript-eslint/typescript-estree@npm:7.11.0":
version: 7.11.0
resolution: "@typescript-eslint/typescript-estree@npm:7.11.0"
dependencies:
"@typescript-eslint/types": "npm:7.10.0"
"@typescript-eslint/visitor-keys": "npm:7.10.0"
"@typescript-eslint/types": "npm:7.11.0"
"@typescript-eslint/visitor-keys": "npm:7.11.0"
debug: "npm:^4.3.4"
globby: "npm:^11.1.0"
is-glob: "npm:^4.0.3"
@ -4234,21 +4234,21 @@ __metadata:
peerDependenciesMeta:
typescript:
optional: true
checksum: 10c0/6200695834c566e52e2fa7331f1a05019f7815969d8c1e1e237b85a99664d36f41ccc16384eff3f8582a0ecb75f1cc315b56ee9283b818da37f24fa4d42f1d7a
checksum: 10c0/a4eda43f352d20edebae0c1c221c4fd9de0673a94988cf1ae3f5e4917ef9cdb9ead8d3673ea8dd6e80d9cf3523a47c295be1326a3fae017b277233f4c4b4026b
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:7.10.0":
version: 7.10.0
resolution: "@typescript-eslint/utils@npm:7.10.0"
"@typescript-eslint/utils@npm:7.11.0":
version: 7.11.0
resolution: "@typescript-eslint/utils@npm:7.11.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.4.0"
"@typescript-eslint/scope-manager": "npm:7.10.0"
"@typescript-eslint/types": "npm:7.10.0"
"@typescript-eslint/typescript-estree": "npm:7.10.0"
"@typescript-eslint/scope-manager": "npm:7.11.0"
"@typescript-eslint/types": "npm:7.11.0"
"@typescript-eslint/typescript-estree": "npm:7.11.0"
peerDependencies:
eslint: ^8.56.0
checksum: 10c0/6724471f94f2788f59748f7efa2a3a53ea910099993bee2fa5746ab5acacecdc9fcb110c568b18099ddc946ea44919ed394bff2bd055ba81fc69f5e6297b73bf
checksum: 10c0/539a7ff8b825ad810fc59a80269094748df1a397a42cdbb212c493fc2486711c7d8fd6d75d4cd8a067822b8e6a11f42c50441977d51c183eec47992506d1cdf8
languageName: node
linkType: hard
@ -4279,13 +4279,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:7.10.0":
version: 7.10.0
resolution: "@typescript-eslint/visitor-keys@npm:7.10.0"
"@typescript-eslint/visitor-keys@npm:7.11.0":
version: 7.11.0
resolution: "@typescript-eslint/visitor-keys@npm:7.11.0"
dependencies:
"@typescript-eslint/types": "npm:7.10.0"
"@typescript-eslint/types": "npm:7.11.0"
eslint-visitor-keys: "npm:^3.4.3"
checksum: 10c0/049e812bcd28869059d04c7bf3543bb55f5205f468b777439c4f120417fb856fb6024cb1d25291aa12556bd08e84f043a96d754ffb2cde37abb604d6f3c51634
checksum: 10c0/664e558d9645896484b7ffc9381837f0d52443bf8d121a5586d02d42ca4d17dc35faf526768c4b1beb52c57c43fae555898eb087651eb1c7a3d60f1085effea1
languageName: node
linkType: hard
@ -4829,16 +4829,17 @@ __metadata:
languageName: node
linkType: hard
"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7":
version: 3.1.7
resolution: "array-includes@npm:3.1.7"
"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8":
version: 3.1.8
resolution: "array-includes@npm:3.1.8"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
get-intrinsic: "npm:^1.2.1"
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-object-atoms: "npm:^1.0.0"
get-intrinsic: "npm:^1.2.4"
is-string: "npm:^1.0.7"
checksum: 10c0/692907bd7f19d06dc58ccb761f34b58f5dc0b437d2b47a8fe42a1501849a5cf5c27aed3d521a9702667827c2c85a7e75df00a402c438094d87fc43f39ebf9b2b
checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370
languageName: node
linkType: hard
@ -4872,16 +4873,17 @@ __metadata:
languageName: node
linkType: hard
"array.prototype.findlast@npm:^1.2.4":
version: 1.2.4
resolution: "array.prototype.findlast@npm:1.2.4"
"array.prototype.findlast@npm:^1.2.5":
version: 1.2.5
resolution: "array.prototype.findlast@npm:1.2.5"
dependencies:
call-bind: "npm:^1.0.5"
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.22.3"
es-abstract: "npm:^1.23.2"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
es-shim-unscopables: "npm:^1.0.2"
checksum: 10c0/4b5145a68ebaa00ef3d61de07c6694cad73d60763079f1e7662b948e5a167b5121b0c1e6feae8df1e42ead07c21699e25242b95cd5c48e094fd530b192aa4150
checksum: 10c0/ddc952b829145ab45411b9d6adcb51a8c17c76bf89c9dd64b52d5dffa65d033da8c076ed2e17091779e83bc892b9848188d7b4b33453c5565e65a92863cb2775
languageName: node
linkType: hard
@ -5065,15 +5067,6 @@ __metadata:
languageName: node
linkType: hard
"asynciterator.prototype@npm:^1.0.0":
version: 1.0.0
resolution: "asynciterator.prototype@npm:1.0.0"
dependencies:
has-symbols: "npm:^1.0.3"
checksum: 10c0/fb76850e57d931ff59fd16b6cddb79b0d34fe45f400b2c3480d38892e72cd089787401687dbdb7cdb14ece402c275d3e02a648760d1489cd493527129c4c6204
languageName: node
linkType: hard
"asynckit@npm:^0.4.0":
version: 0.4.0
resolution: "asynckit@npm:0.4.0"
@ -5122,7 +5115,7 @@ __metadata:
languageName: node
linkType: hard
"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7":
"available-typed-arrays@npm:^1.0.7":
version: 1.0.7
resolution: "available-typed-arrays@npm:1.0.7"
dependencies:
@ -5808,7 +5801,7 @@ __metadata:
languageName: node
linkType: hard
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
version: 1.0.7
resolution: "call-bind@npm:1.0.7"
dependencies:
@ -6868,6 +6861,39 @@ __metadata:
languageName: node
linkType: hard
"data-view-buffer@npm:^1.0.1":
version: 1.0.1
resolution: "data-view-buffer@npm:1.0.1"
dependencies:
call-bind: "npm:^1.0.6"
es-errors: "npm:^1.3.0"
is-data-view: "npm:^1.0.1"
checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583
languageName: node
linkType: hard
"data-view-byte-length@npm:^1.0.1":
version: 1.0.1
resolution: "data-view-byte-length@npm:1.0.1"
dependencies:
call-bind: "npm:^1.0.7"
es-errors: "npm:^1.3.0"
is-data-view: "npm:^1.0.1"
checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2
languageName: node
linkType: hard
"data-view-byte-offset@npm:^1.0.0":
version: 1.0.0
resolution: "data-view-byte-offset@npm:1.0.0"
dependencies:
call-bind: "npm:^1.0.6"
es-errors: "npm:^1.3.0"
is-data-view: "npm:^1.0.1"
checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f
languageName: node
linkType: hard
"dateformat@npm:^4.6.3":
version: 4.6.3
resolution: "dateformat@npm:4.6.3"
@ -6983,7 +7009,7 @@ __metadata:
languageName: node
linkType: hard
"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2":
"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4":
version: 1.1.4
resolution: "define-data-property@npm:1.1.4"
dependencies:
@ -7541,16 +7567,20 @@ __metadata:
languageName: node
linkType: hard
"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.22.4":
version: 1.22.5
resolution: "es-abstract@npm:1.22.5"
"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3":
version: 1.23.3
resolution: "es-abstract@npm:1.23.3"
dependencies:
array-buffer-byte-length: "npm:^1.0.1"
arraybuffer.prototype.slice: "npm:^1.0.3"
available-typed-arrays: "npm:^1.0.7"
call-bind: "npm:^1.0.7"
data-view-buffer: "npm:^1.0.1"
data-view-byte-length: "npm:^1.0.1"
data-view-byte-offset: "npm:^1.0.0"
es-define-property: "npm:^1.0.0"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
es-set-tostringtag: "npm:^2.0.3"
es-to-primitive: "npm:^1.2.1"
function.prototype.name: "npm:^1.1.6"
@ -7561,10 +7591,11 @@ __metadata:
has-property-descriptors: "npm:^1.0.2"
has-proto: "npm:^1.0.3"
has-symbols: "npm:^1.0.3"
hasown: "npm:^2.0.1"
hasown: "npm:^2.0.2"
internal-slot: "npm:^1.0.7"
is-array-buffer: "npm:^3.0.4"
is-callable: "npm:^1.2.7"
is-data-view: "npm:^1.0.1"
is-negative-zero: "npm:^2.0.3"
is-regex: "npm:^1.1.4"
is-shared-array-buffer: "npm:^1.0.3"
@ -7575,18 +7606,18 @@ __metadata:
object-keys: "npm:^1.1.1"
object.assign: "npm:^4.1.5"
regexp.prototype.flags: "npm:^1.5.2"
safe-array-concat: "npm:^1.1.0"
safe-array-concat: "npm:^1.1.2"
safe-regex-test: "npm:^1.0.3"
string.prototype.trim: "npm:^1.2.8"
string.prototype.trimend: "npm:^1.0.7"
string.prototype.trimstart: "npm:^1.0.7"
string.prototype.trim: "npm:^1.2.9"
string.prototype.trimend: "npm:^1.0.8"
string.prototype.trimstart: "npm:^1.0.8"
typed-array-buffer: "npm:^1.0.2"
typed-array-byte-length: "npm:^1.0.1"
typed-array-byte-offset: "npm:^1.0.2"
typed-array-length: "npm:^1.0.5"
typed-array-length: "npm:^1.0.6"
unbox-primitive: "npm:^1.0.2"
which-typed-array: "npm:^1.1.14"
checksum: 10c0/4bca5a60f0dff6c0a5690d8e51374cfcb8760d5dbbb1069174b4d41461cf4e0c3e0c1993bccbc5aa0799ff078199f1bcde2122b8709e0d17c2beffafff01010a
which-typed-array: "npm:^1.1.15"
checksum: 10c0/d27e9afafb225c6924bee9971a7f25f20c314f2d6cb93a63cada4ac11dcf42040896a6c22e5fb8f2a10767055ed4ddf400be3b1eb12297d281726de470b75666
languageName: node
linkType: hard
@ -7613,30 +7644,38 @@ __metadata:
languageName: node
linkType: hard
"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17":
version: 1.0.17
resolution: "es-iterator-helpers@npm:1.0.17"
"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.19":
version: 1.0.19
resolution: "es-iterator-helpers@npm:1.0.19"
dependencies:
asynciterator.prototype: "npm:^1.0.0"
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.22.4"
es-abstract: "npm:^1.23.3"
es-errors: "npm:^1.3.0"
es-set-tostringtag: "npm:^2.0.2"
es-set-tostringtag: "npm:^2.0.3"
function-bind: "npm:^1.1.2"
get-intrinsic: "npm:^1.2.4"
globalthis: "npm:^1.0.3"
has-property-descriptors: "npm:^1.0.2"
has-proto: "npm:^1.0.1"
has-proto: "npm:^1.0.3"
has-symbols: "npm:^1.0.3"
internal-slot: "npm:^1.0.7"
iterator.prototype: "npm:^1.1.2"
safe-array-concat: "npm:^1.1.0"
checksum: 10c0/d0f281257e7165f068fd4fc3beb63d07ae4f18fbef02a2bbe4a39272b764164c1ce3311ae7c5429ac30003aef290fcdf569050e4a9ba3560e044440f68e9a47c
safe-array-concat: "npm:^1.1.2"
checksum: 10c0/ae8f0241e383b3d197383b9842c48def7fce0255fb6ed049311b686ce295595d9e389b466f6a1b7d4e7bb92d82f5e716d6fae55e20c1040249bf976743b038c5
languageName: node
linkType: hard
"es-set-tostringtag@npm:^2.0.2, es-set-tostringtag@npm:^2.0.3":
"es-object-atoms@npm:^1.0.0":
version: 1.0.0
resolution: "es-object-atoms@npm:1.0.0"
dependencies:
es-errors: "npm:^1.3.0"
checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4
languageName: node
linkType: hard
"es-set-tostringtag@npm:^2.0.3":
version: 2.0.3
resolution: "es-set-tostringtag@npm:2.0.3"
dependencies:
@ -7817,20 +7856,20 @@ __metadata:
linkType: hard
"eslint-plugin-jsdoc@npm:^48.0.0":
version: 48.2.6
resolution: "eslint-plugin-jsdoc@npm:48.2.6"
version: 48.2.7
resolution: "eslint-plugin-jsdoc@npm:48.2.7"
dependencies:
"@es-joy/jsdoccomment": "npm:~0.43.0"
"@es-joy/jsdoccomment": "npm:~0.43.1"
are-docs-informative: "npm:^0.0.2"
comment-parser: "npm:1.4.1"
debug: "npm:^4.3.4"
escape-string-regexp: "npm:^4.0.0"
esquery: "npm:^1.5.0"
semver: "npm:^7.6.1"
semver: "npm:^7.6.2"
spdx-expression-parse: "npm:^4.0.0"
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
checksum: 10c0/9f01b3000aa31f17767786c62caf62f1e8c4b88bfef04b207d3b1de785be287cc2da3ad16ed32afacd5f6e6a9b76ebf3369069be416ce2228c44cd6d084fcd8f
checksum: 10c0/74d0f95b3d880dd4221dbc0b9341266a6cce3b8ca8d3e30032223af3552364643d6b82ad733d9bc06a20f0d640f21e4d8f5a4b00901d1771572625178b8c40c3
languageName: node
linkType: hard
@ -7879,30 +7918,30 @@ __metadata:
linkType: hard
"eslint-plugin-react@npm:^7.33.2":
version: 7.34.1
resolution: "eslint-plugin-react@npm:7.34.1"
version: 7.34.2
resolution: "eslint-plugin-react@npm:7.34.2"
dependencies:
array-includes: "npm:^3.1.7"
array.prototype.findlast: "npm:^1.2.4"
array-includes: "npm:^3.1.8"
array.prototype.findlast: "npm:^1.2.5"
array.prototype.flatmap: "npm:^1.3.2"
array.prototype.toreversed: "npm:^1.1.2"
array.prototype.tosorted: "npm:^1.1.3"
doctrine: "npm:^2.1.0"
es-iterator-helpers: "npm:^1.0.17"
es-iterator-helpers: "npm:^1.0.19"
estraverse: "npm:^5.3.0"
jsx-ast-utils: "npm:^2.4.1 || ^3.0.0"
minimatch: "npm:^3.1.2"
object.entries: "npm:^1.1.7"
object.fromentries: "npm:^2.0.7"
object.hasown: "npm:^1.1.3"
object.values: "npm:^1.1.7"
object.entries: "npm:^1.1.8"
object.fromentries: "npm:^2.0.8"
object.hasown: "npm:^1.1.4"
object.values: "npm:^1.2.0"
prop-types: "npm:^15.8.1"
resolve: "npm:^2.0.0-next.5"
semver: "npm:^6.3.1"
string.prototype.matchall: "npm:^4.0.10"
string.prototype.matchall: "npm:^4.0.11"
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
checksum: 10c0/7c61b1314d37a4ac2f2474f9571f801f1a1a5d81dcd4abbb5d07145406518722fb792367267757ee116bde254be9753242d6b93c9619110398b3fe1746e4848c
checksum: 10c0/37dc04424da8626f20a071466e7238d53ed111c53e5e5398d813ac2cf76a2078f00d91f7833fe5b2f0fc98f2688a75b36e78e9ada9f1068705d23c7031094316
languageName: node
linkType: hard
@ -8380,12 +8419,12 @@ __metadata:
languageName: node
linkType: hard
"file-entry-cache@npm:^8.0.0":
version: 8.0.0
resolution: "file-entry-cache@npm:8.0.0"
"file-entry-cache@npm:^9.0.0":
version: 9.0.0
resolution: "file-entry-cache@npm:9.0.0"
dependencies:
flat-cache: "npm:^4.0.0"
checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638
flat-cache: "npm:^5.0.0"
checksum: 10c0/07b0a4f062dc0aa258f3e1b06ac083ea25313f5e289943e146fafdaf3315dcc031635545eea7fe98fe5598b91d6c7f48dba7a251dd7ac20108a6ebf7d00b0b1c
languageName: node
linkType: hard
@ -8530,14 +8569,13 @@ __metadata:
languageName: node
linkType: hard
"flat-cache@npm:^4.0.0":
version: 4.0.0
resolution: "flat-cache@npm:4.0.0"
"flat-cache@npm:^5.0.0":
version: 5.0.0
resolution: "flat-cache@npm:5.0.0"
dependencies:
flatted: "npm:^3.2.9"
flatted: "npm:^3.3.1"
keyv: "npm:^4.5.4"
rimraf: "npm:^5.0.5"
checksum: 10c0/8f99e27bb3de94e91e7b4ca5120488cdc2b7f8cd952a538f1a566101963057eb42ca318e9fac0d36987dcca34316ff04b61c1dc3dcc8084f6f5e801a52a8e547
checksum: 10c0/847f25eefec5d6614fdce76dc6097ee98f63fd4dfbcb908718905ac56610f939f4c28b1f908d6e8857d49286fe73235095d2e7ac9df096c35a3e8a15204c361b
languageName: node
linkType: hard
@ -8550,10 +8588,10 @@ __metadata:
languageName: node
linkType: hard
"flatted@npm:^3.2.9":
version: 3.2.9
resolution: "flatted@npm:3.2.9"
checksum: 10c0/5c91c5a0a21bbc0b07b272231e5b4efe6b822bcb4ad317caf6bb06984be4042a9e9045026307da0fdb4583f1f545e317a67ef1231a59e71f7fced3cc429cfc53
"flatted@npm:^3.2.9, flatted@npm:^3.3.1":
version: 3.3.1
resolution: "flatted@npm:3.3.1"
checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf
languageName: node
linkType: hard
@ -8772,7 +8810,7 @@ __metadata:
languageName: node
linkType: hard
"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
version: 1.2.4
resolution: "get-intrinsic@npm:1.2.4"
dependencies:
@ -8877,7 +8915,7 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^10.2.2, glob@npm:^10.2.6, glob@npm:^10.3.10, glob@npm:^10.3.7":
"glob@npm:^10.2.2, glob@npm:^10.2.6, glob@npm:^10.3.10":
version: 10.4.1
resolution: "glob@npm:10.4.1"
dependencies:
@ -9092,7 +9130,7 @@ __metadata:
languageName: node
linkType: hard
"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2":
"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2":
version: 1.0.2
resolution: "has-tostringtag@npm:1.0.2"
dependencies:
@ -9161,12 +9199,12 @@ __metadata:
languageName: node
linkType: hard
"hasown@npm:^2.0.0, hasown@npm:^2.0.1":
version: 2.0.1
resolution: "hasown@npm:2.0.1"
"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2":
version: 2.0.2
resolution: "hasown@npm:2.0.2"
dependencies:
function-bind: "npm:^1.1.2"
checksum: 10c0/9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb
checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9
languageName: node
linkType: hard
@ -9611,7 +9649,7 @@ __metadata:
languageName: node
linkType: hard
"internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7":
"internal-slot@npm:^1.0.7":
version: 1.0.7
resolution: "internal-slot@npm:1.0.7"
dependencies:
@ -9843,6 +9881,15 @@ __metadata:
languageName: node
linkType: hard
"is-data-view@npm:^1.0.1":
version: 1.0.1
resolution: "is-data-view@npm:1.0.1"
dependencies:
is-typed-array: "npm:^1.1.13"
checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d
languageName: node
linkType: hard
"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5":
version: 1.0.5
resolution: "is-date-object@npm:1.0.5"
@ -11719,7 +11766,7 @@ __metadata:
languageName: node
linkType: hard
"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:~4.0.7":
"micromatch@npm:^4.0.4, micromatch@npm:^4.0.7, micromatch@npm:~4.0.7":
version: 4.0.7
resolution: "micromatch@npm:4.0.7"
dependencies:
@ -12300,7 +12347,7 @@ __metadata:
languageName: node
linkType: hard
"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0":
"object-inspect@npm:^1.13.1":
version: 1.13.1
resolution: "object-inspect@npm:1.13.1"
checksum: 10c0/fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d
@ -12345,25 +12392,26 @@ __metadata:
languageName: node
linkType: hard
"object.entries@npm:^1.1.7":
version: 1.1.7
resolution: "object.entries@npm:1.1.7"
"object.entries@npm:^1.1.7, object.entries@npm:^1.1.8":
version: 1.1.8
resolution: "object.entries@npm:1.1.8"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/3ad1899cc7bf14546bf28f4a9b363ae8690b90948fcfbcac4c808395435d760f26193d9cae95337ce0e3c1e5c1f4fa45f7b46b31b68d389e9e117fce38775d86
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3
languageName: node
linkType: hard
"object.fromentries@npm:^2.0.7":
version: 2.0.7
resolution: "object.fromentries@npm:2.0.7"
"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8":
version: 2.0.8
resolution: "object.fromentries@npm:2.0.8"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/071745c21f6fc9e6c914691f2532c1fb60ad967e5ddc52801d09958b5de926566299d07ae14466452a7efd29015f9145d6c09c573d93a0dc6f1683ee0ec2b93b
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b
languageName: node
linkType: hard
@ -12392,13 +12440,14 @@ __metadata:
languageName: node
linkType: hard
"object.hasown@npm:^1.1.3":
version: 1.1.3
resolution: "object.hasown@npm:1.1.3"
"object.hasown@npm:^1.1.4":
version: 1.1.4
resolution: "object.hasown@npm:1.1.4"
dependencies:
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/8a41ba4fb1208a85c2275e9b5098071beacc24345b9a71ab98ef0a1c61b34dc74c6b460ff1e1884c33843d8f2553df64a10eec2b74b3ed009e3b2710c826bd2c
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/f23187b08d874ef1aea060118c8259eb7f99f93c15a50771d710569534119062b90e087b92952b2d0fb1bb8914d61fb0b43c57fb06f622aaad538fe6868ab987
languageName: node
linkType: hard
@ -12411,14 +12460,14 @@ __metadata:
languageName: node
linkType: hard
"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7":
version: 1.1.7
resolution: "object.values@npm:1.1.7"
"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0":
version: 1.2.0
resolution: "object.values@npm:1.2.0"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/e869d6a37fb7afdd0054dea49036d6ccebb84854a8848a093bbd1bc516f53e690bba88f0bc3e83fdfa74c601469ee6989c9b13359cda9604144c6e732fad3b6b
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/15809dc40fd6c5529501324fec5ff08570b7d70fb5ebbe8e2b3901afec35cf2b3dc484d1210c6c642cd3e7e0a5e18dd1d6850115337fef46bdae14ab0cb18ac3
languageName: node
linkType: hard
@ -13965,11 +14014,11 @@ __metadata:
linkType: hard
"prettier@npm:^3.0.0":
version: 3.2.5
resolution: "prettier@npm:3.2.5"
version: 3.3.0
resolution: "prettier@npm:3.3.0"
bin:
prettier: bin/prettier.cjs
checksum: 10c0/ea327f37a7d46f2324a34ad35292af2ad4c4c3c3355da07313339d7e554320f66f65f91e856add8530157a733c6c4a897dc41b577056be5c24c40f739f5ee8c6
checksum: 10c0/d033c356320aa2e468bf29c931b094ac730d2f4defd5eb2989d8589313dec901d2fc866e3788f3d161e420b142ea4ec3dda535dbe0169ef4d0026397a68ba9cf
languageName: node
linkType: hard
@ -14869,7 +14918,7 @@ __metadata:
languageName: node
linkType: hard
"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.2":
"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.2":
version: 1.5.2
resolution: "regexp.prototype.flags@npm:1.5.2"
dependencies:
@ -15165,17 +15214,6 @@ __metadata:
languageName: node
linkType: hard
"rimraf@npm:^5.0.5":
version: 5.0.5
resolution: "rimraf@npm:5.0.5"
dependencies:
glob: "npm:^10.3.7"
bin:
rimraf: dist/esm/bin.mjs
checksum: 10c0/d50dbe724f33835decd88395b25ed35995077c60a50ae78ded06e0185418914e555817aad1b4243edbff2254548c2f6ad6f70cc850040bebb4da9e8cc016f586
languageName: node
linkType: hard
"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1":
version: 2.0.2
resolution: "ripemd160@npm:2.0.2"
@ -15223,15 +15261,15 @@ __metadata:
languageName: node
linkType: hard
"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.0":
version: 1.1.0
resolution: "safe-array-concat@npm:1.1.0"
"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.2":
version: 1.1.2
resolution: "safe-array-concat@npm:1.1.2"
dependencies:
call-bind: "npm:^1.0.5"
get-intrinsic: "npm:^1.2.2"
call-bind: "npm:^1.0.7"
get-intrinsic: "npm:^1.2.4"
has-symbols: "npm:^1.0.3"
isarray: "npm:^2.0.5"
checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af
checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9
languageName: node
linkType: hard
@ -15309,15 +15347,15 @@ __metadata:
linkType: hard
"sass@npm:^1.62.1":
version: 1.77.2
resolution: "sass@npm:1.77.2"
version: 1.77.4
resolution: "sass@npm:1.77.4"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
checksum: 10c0/0d292339064de3c902e209d41de9c4eb2038cff326476aeebbb5be3eee1d23400d975face2b8e124ae617b10af3e93bec01580f61912f34e4c517fe137a118b6
checksum: 10c0/b9cb4882bded282aabe38d011adfce375e1f282184fcf93dc3da5d5be834c6aa53c474c15634c351ef7bd85146cfd1cc81343654cc3bcf000d78e856da4225ef
languageName: node
linkType: hard
@ -15430,7 +15468,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.1":
"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2":
version: 7.6.2
resolution: "semver@npm:7.6.2"
bin:
@ -15526,14 +15564,15 @@ __metadata:
languageName: node
linkType: hard
"set-function-name@npm:^2.0.0, set-function-name@npm:^2.0.1":
version: 2.0.1
resolution: "set-function-name@npm:2.0.1"
"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2":
version: 2.0.2
resolution: "set-function-name@npm:2.0.2"
dependencies:
define-data-property: "npm:^1.0.1"
define-data-property: "npm:^1.1.4"
es-errors: "npm:^1.3.0"
functions-have-names: "npm:^1.2.3"
has-property-descriptors: "npm:^1.0.0"
checksum: 10c0/6be7d3e15be47f4db8a5a563a35c60b5e7c4af91cc900e8972ffad33d3aaa227900faa55f60121cdb04b85866a734bb7fe4cd91f654c632861cc86121a48312a
has-property-descriptors: "npm:^1.0.2"
checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316
languageName: node
linkType: hard
@ -15630,14 +15669,15 @@ __metadata:
languageName: node
linkType: hard
"side-channel@npm:^1.0.4":
version: 1.0.4
resolution: "side-channel@npm:1.0.4"
"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6":
version: 1.0.6
resolution: "side-channel@npm:1.0.6"
dependencies:
call-bind: "npm:^1.0.0"
get-intrinsic: "npm:^1.0.2"
object-inspect: "npm:^1.9.0"
checksum: 10c0/054a5d23ee35054b2c4609b9fd2a0587760737782b5d765a9c7852264710cc39c6dcb56a9bbd6c12cd84071648aea3edb2359d2f6e560677eedadce511ac1da5
call-bind: "npm:^1.0.7"
es-errors: "npm:^1.3.0"
get-intrinsic: "npm:^1.2.4"
object-inspect: "npm:^1.13.1"
checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f
languageName: node
linkType: hard
@ -16173,53 +16213,57 @@ __metadata:
languageName: node
linkType: hard
"string.prototype.matchall@npm:^4.0.10, string.prototype.matchall@npm:^4.0.6":
version: 4.0.10
resolution: "string.prototype.matchall@npm:4.0.10"
"string.prototype.matchall@npm:^4.0.11, string.prototype.matchall@npm:^4.0.6":
version: 4.0.11
resolution: "string.prototype.matchall@npm:4.0.11"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
get-intrinsic: "npm:^1.2.1"
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.2"
es-errors: "npm:^1.3.0"
es-object-atoms: "npm:^1.0.0"
get-intrinsic: "npm:^1.2.4"
gopd: "npm:^1.0.1"
has-symbols: "npm:^1.0.3"
internal-slot: "npm:^1.0.5"
regexp.prototype.flags: "npm:^1.5.0"
set-function-name: "npm:^2.0.0"
side-channel: "npm:^1.0.4"
checksum: 10c0/cd7495fb0de16d43efeee3887b98701941f3817bd5f09351ad1825b023d307720c86394d56d56380563d97767ab25bf5448db239fcecbb85c28e2180f23e324a
internal-slot: "npm:^1.0.7"
regexp.prototype.flags: "npm:^1.5.2"
set-function-name: "npm:^2.0.2"
side-channel: "npm:^1.0.6"
checksum: 10c0/915a2562ac9ab5e01b7be6fd8baa0b2b233a0a9aa975fcb2ec13cc26f08fb9a3e85d5abdaa533c99c6fc4c5b65b914eba3d80c4aff9792a4c9fed403f28f7d9d
languageName: node
linkType: hard
"string.prototype.trim@npm:^1.2.8":
version: 1.2.8
resolution: "string.prototype.trim@npm:1.2.8"
"string.prototype.trim@npm:^1.2.9":
version: 1.2.9
resolution: "string.prototype.trim@npm:1.2.9"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-abstract: "npm:^1.23.0"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2
languageName: node
linkType: hard
"string.prototype.trimend@npm:^1.0.7":
version: 1.0.7
resolution: "string.prototype.trimend@npm:1.0.7"
"string.prototype.trimend@npm:^1.0.8":
version: 1.0.8
resolution: "string.prototype.trimend@npm:1.0.8"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c
languageName: node
linkType: hard
"string.prototype.trimstart@npm:^1.0.7":
version: 1.0.7
resolution: "string.prototype.trimstart@npm:1.0.7"
"string.prototype.trimstart@npm:^1.0.8":
version: 1.0.8
resolution: "string.prototype.trimstart@npm:1.0.8"
dependencies:
call-bind: "npm:^1.0.2"
define-properties: "npm:^1.2.0"
es-abstract: "npm:^1.22.1"
checksum: 10c0/0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f
call-bind: "npm:^1.0.7"
define-properties: "npm:^1.2.1"
es-object-atoms: "npm:^1.0.0"
checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366
languageName: node
linkType: hard
@ -16436,8 +16480,8 @@ __metadata:
linkType: hard
"stylelint@npm:^16.0.2":
version: 16.6.0
resolution: "stylelint@npm:16.6.0"
version: 16.6.1
resolution: "stylelint@npm:16.6.1"
dependencies:
"@csstools/css-parser-algorithms": "npm:^2.6.3"
"@csstools/css-tokenizer": "npm:^2.3.1"
@ -16452,7 +16496,7 @@ __metadata:
debug: "npm:^4.3.4"
fast-glob: "npm:^3.3.2"
fastest-levenshtein: "npm:^1.0.16"
file-entry-cache: "npm:^8.0.0"
file-entry-cache: "npm:^9.0.0"
global-modules: "npm:^2.0.0"
globby: "npm:^11.1.0"
globjoin: "npm:^0.1.4"
@ -16463,7 +16507,7 @@ __metadata:
known-css-properties: "npm:^0.31.0"
mathml-tag-names: "npm:^2.1.3"
meow: "npm:^13.2.0"
micromatch: "npm:^4.0.5"
micromatch: "npm:^4.0.7"
normalize-path: "npm:^3.0.0"
picocolors: "npm:^1.0.1"
postcss: "npm:^8.4.38"
@ -16480,7 +16524,7 @@ __metadata:
write-file-atomic: "npm:^5.0.1"
bin:
stylelint: bin/stylelint.mjs
checksum: 10c0/acfb7983a0b71677d066b2aa570eefdac0a7be2e21351bac8884b8156deaeec19e53ad128ae7ae7933c79f6045f1de8d759ba06cfbc373b2711015860805a3e7
checksum: 10c0/8dc9b0024d6fb109380a142171ab8a134c3863aa8b8736f0083310a0d05f173dcda5680f29267697dfa0aaeb2f08aef4ef113e4bb4f8582fcfdd97f35be51d71
languageName: node
linkType: hard
@ -17073,9 +17117,9 @@ __metadata:
languageName: node
linkType: hard
"typed-array-length@npm:^1.0.5":
version: 1.0.5
resolution: "typed-array-length@npm:1.0.5"
"typed-array-length@npm:^1.0.6":
version: 1.0.6
resolution: "typed-array-length@npm:1.0.6"
dependencies:
call-bind: "npm:^1.0.7"
for-each: "npm:^0.3.3"
@ -17083,7 +17127,7 @@ __metadata:
has-proto: "npm:^1.0.3"
is-typed-array: "npm:^1.1.13"
possible-typed-array-names: "npm:^1.0.0"
checksum: 10c0/5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5
checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77
languageName: node
linkType: hard
@ -17943,16 +17987,16 @@ __metadata:
languageName: node
linkType: hard
"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.9":
version: 1.1.14
resolution: "which-typed-array@npm:1.1.14"
"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9":
version: 1.1.15
resolution: "which-typed-array@npm:1.1.15"
dependencies:
available-typed-arrays: "npm:^1.0.6"
call-bind: "npm:^1.0.5"
available-typed-arrays: "npm:^1.0.7"
call-bind: "npm:^1.0.7"
for-each: "npm:^0.3.3"
gopd: "npm:^1.0.1"
has-tostringtag: "npm:^1.0.1"
checksum: 10c0/0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56
has-tostringtag: "npm:^1.0.2"
checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983
languageName: node
linkType: hard