Merge remote-tracking branch 'parent/main' into upstream-20240604
This commit is contained in:
commit
8927b1444b
89 changed files with 1132 additions and 458 deletions
2
.nvmrc
2
.nvmrc
|
@ -1 +1 @@
|
|||
20.13
|
||||
20.14
|
||||
|
|
|
@ -1 +1 @@
|
|||
3.3.1
|
||||
3.3.2
|
||||
|
|
|
@ -7,22 +7,22 @@
|
|||
ARG TARGETPLATFORM=${TARGETPLATFORM}
|
||||
ARG BUILDPLATFORM=${BUILDPLATFORM}
|
||||
|
||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.1"]
|
||||
ARG RUBY_VERSION="3.3.1"
|
||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
|
||||
ARG RUBY_VERSION="3.3.2"
|
||||
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
|
||||
ARG NODE_MAJOR_VERSION="20"
|
||||
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
|
||||
ARG DEBIAN_VERSION="bookworm"
|
||||
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
|
||||
FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node
|
||||
# Ruby image to use for base image based on combined variables (ex: 3.3.1-slim-bookworm)
|
||||
# Ruby image to use for base image based on combined variables (ex: 3.3.x-slim-bookworm)
|
||||
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby
|
||||
|
||||
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA
|
||||
# Example: v4.2.0-nightly.2023.11.09+something
|
||||
# Overwrite existence of 'alpha.0' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"]
|
||||
ARG MASTODON_VERSION_PRERELEASE=""
|
||||
# Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="something"]
|
||||
# Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="pr-12345"]
|
||||
ARG MASTODON_VERSION_METADATA=""
|
||||
|
||||
# Allow Ruby on Rails to serve static files
|
||||
|
|
12
Gemfile.lock
12
Gemfile.lock
|
@ -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)
|
||||
|
@ -1050,7 +1050,7 @@ DEPENDENCIES
|
|||
xorcist (~> 1.1)
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.3.1p55
|
||||
ruby 3.3.2p78
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.9
|
||||
2.5.11
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
@ -94,10 +92,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_favourite, :reject_reply_exclude_followers, :reject_send_sensitive, :reject_hashtag, :reject_straight_follow,
|
||||
:reject_new_follow, :reject_friend, :block_trends, :detect_invalid_subscription, :reject_reports, :private_comment, :public_comment, :obfuscate, :hidden)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -48,8 +48,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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -48,8 +48,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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -207,8 +207,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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
91
app/controllers/api/v2_alpha/notifications_controller.rb
Normal file
91
app/controllers/api/v2_alpha/notifications_controller.rb
Normal file
|
@ -0,0 +1,91 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Api::V2Alpha::NotificationsController < Api::BaseController
|
||||
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, except: [:clear, :dismiss]
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: [:clear, :dismiss]
|
||||
before_action :require_user!
|
||||
after_action :insert_pagination_headers, only: :index
|
||||
|
||||
DEFAULT_NOTIFICATIONS_LIMIT = 40
|
||||
|
||||
def index
|
||||
with_read_replica do
|
||||
@notifications = load_notifications
|
||||
@group_metadata = load_group_metadata
|
||||
@relationships = StatusRelationshipsPresenter.new(target_statuses_from_notifications, current_user&.account_id)
|
||||
end
|
||||
|
||||
render json: @notifications.map { |notification| NotificationGroup.from_notification(notification) }, each_serializer: REST::NotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata
|
||||
end
|
||||
|
||||
def show
|
||||
@notification = current_account.notifications.without_suspended.find_by!(group_key: params[:id])
|
||||
render json: NotificationGroup.from_notification(@notification), serializer: REST::NotificationGroupSerializer
|
||||
end
|
||||
|
||||
def clear
|
||||
current_account.notifications.delete_all
|
||||
render_empty
|
||||
end
|
||||
|
||||
def dismiss
|
||||
current_account.notifications.where(group_key: params[:id]).destroy_all
|
||||
render_empty
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_notifications
|
||||
notifications = browserable_account_notifications.includes(from_account: [:account_stat, :user]).to_a_grouped_paginated_by_id(
|
||||
limit_param(DEFAULT_NOTIFICATIONS_LIMIT),
|
||||
params_slice(:max_id, :since_id, :min_id)
|
||||
)
|
||||
|
||||
Notification.preload_cache_collection_target_statuses(notifications) do |target_statuses|
|
||||
preload_collection(target_statuses, Status)
|
||||
end
|
||||
end
|
||||
|
||||
def load_group_metadata
|
||||
return {} if @notifications.empty?
|
||||
|
||||
browserable_account_notifications
|
||||
.where(group_key: @notifications.filter_map(&:group_key))
|
||||
.where(id: (@notifications.last.id)..(@notifications.first.id))
|
||||
.group(:group_key)
|
||||
.pluck(:group_key, 'min(notifications.id) as min_id', 'max(notifications.id) as max_id', 'max(notifications.created_at) as latest_notification_at')
|
||||
.to_h { |group_key, min_id, max_id, latest_notification_at| [group_key, { min_id: min_id, max_id: max_id, latest_notification_at: latest_notification_at }] }
|
||||
end
|
||||
|
||||
def browserable_account_notifications
|
||||
current_account.notifications.without_suspended.browserable(
|
||||
types: Array(browserable_params[:types]),
|
||||
exclude_types: Array(browserable_params[:exclude_types]),
|
||||
include_filtered: truthy_param?(:include_filtered)
|
||||
)
|
||||
end
|
||||
|
||||
def target_statuses_from_notifications
|
||||
@notifications.filter_map(&:target_status)
|
||||
end
|
||||
|
||||
def next_path
|
||||
api_v2_alpha_notifications_url pagination_params(max_id: pagination_max_id) unless @notifications.empty?
|
||||
end
|
||||
|
||||
def prev_path
|
||||
api_v2_alpha_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty?
|
||||
end
|
||||
|
||||
def pagination_collection
|
||||
@notifications
|
||||
end
|
||||
|
||||
def browserable_params
|
||||
params.permit(:include_filtered, types: [], exclude_types: [])
|
||||
end
|
||||
|
||||
def pagination_params(core_params)
|
||||
params.slice(:limit, :types, :exclude_types, :include_filtered).permit(:limit, :include_filtered, types: [], exclude_types: []).merge(core_params)
|
||||
end
|
||||
end
|
|
@ -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
|
||||
|
|
|
@ -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": "Изтриване на списъка",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 dy’t 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 dy’t 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, wer’t 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 hoe’t 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:",
|
||||
|
|
|
@ -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": "מחיקת רשימה",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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})",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "Избриши листу",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "ลบรายการ",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "Видалити список",
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
# from_account_id :bigint(8) not null
|
||||
# type :string
|
||||
# filtered :boolean default(FALSE), not null
|
||||
# group_key :string
|
||||
#
|
||||
|
||||
class Notification < ApplicationRecord
|
||||
|
@ -165,6 +166,67 @@ class Notification < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
# This returns notifications from the request page, but with at most one notification per group.
|
||||
# Notifications that have no `group_key` each count as a separate group.
|
||||
def paginate_groups_by_max_id(limit, max_id: nil, since_id: nil)
|
||||
query = reorder(id: :desc)
|
||||
query = query.where(id: ...max_id) if max_id.present?
|
||||
query = query.where(id: (since_id + 1)...) if since_id.present?
|
||||
|
||||
unscoped
|
||||
.with_recursive(
|
||||
grouped_notifications: [
|
||||
query
|
||||
.select('notifications.*', "ARRAY[COALESCE(notifications.group_key, 'ungrouped-' || notifications.id)] groups")
|
||||
.limit(1),
|
||||
query
|
||||
.joins('CROSS JOIN grouped_notifications')
|
||||
.where('notifications.id < grouped_notifications.id')
|
||||
.where.not("COALESCE(notifications.group_key, 'ungrouped-' || notifications.id) = ANY(grouped_notifications.groups)")
|
||||
.select('notifications.*', "array_append(grouped_notifications.groups, COALESCE(notifications.group_key, 'ungrouped-' || notifications.id))")
|
||||
.limit(1),
|
||||
]
|
||||
)
|
||||
.from('grouped_notifications AS notifications')
|
||||
.order(id: :desc)
|
||||
.limit(limit)
|
||||
end
|
||||
|
||||
# Differs from :paginate_groups_by_max_id in that it gives the results immediately following min_id,
|
||||
# whereas since_id gives the items with largest id, but with since_id as a cutoff.
|
||||
# Results will be in ascending order by id.
|
||||
def paginate_groups_by_min_id(limit, max_id: nil, min_id: nil)
|
||||
query = reorder(id: :asc)
|
||||
query = query.where(id: (min_id + 1)...) if min_id.present?
|
||||
query = query.where(id: ...max_id) if max_id.present?
|
||||
|
||||
unscoped
|
||||
.with_recursive(
|
||||
grouped_notifications: [
|
||||
query
|
||||
.select('notifications.*', "ARRAY[COALESCE(notifications.group_key, 'ungrouped-' || notifications.id)] groups")
|
||||
.limit(1),
|
||||
query
|
||||
.joins('CROSS JOIN grouped_notifications')
|
||||
.where('notifications.id > grouped_notifications.id')
|
||||
.where.not("COALESCE(notifications.group_key, 'ungrouped-' || notifications.id) = ANY(grouped_notifications.groups)")
|
||||
.select('notifications.*', "array_append(grouped_notifications.groups, COALESCE(notifications.group_key, 'ungrouped-' || notifications.id))")
|
||||
.limit(1),
|
||||
]
|
||||
)
|
||||
.from('grouped_notifications AS notifications')
|
||||
.order(id: :asc)
|
||||
.limit(limit)
|
||||
end
|
||||
|
||||
def to_a_grouped_paginated_by_id(limit, options = {})
|
||||
if options[:min_id].present?
|
||||
paginate_groups_by_min_id(limit, min_id: options[:min_id], max_id: options[:max_id]).reverse
|
||||
else
|
||||
paginate_groups_by_max_id(limit, max_id: options[:max_id], since_id: options[:since_id]).to_a
|
||||
end
|
||||
end
|
||||
|
||||
def preload_cache_collection_target_statuses(notifications, &_block)
|
||||
notifications.group_by(&:type).each do |type, grouped_notifications|
|
||||
associations = TARGET_STATUS_INCLUDES_BY_TYPE[type]
|
||||
|
|
29
app/models/notification_group.rb
Normal file
29
app/models/notification_group.rb
Normal file
|
@ -0,0 +1,29 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class NotificationGroup < ActiveModelSerializers::Model
|
||||
attributes :group_key, :sample_accounts, :notifications_count, :notification
|
||||
|
||||
def self.from_notification(notification)
|
||||
if notification.group_key.present?
|
||||
# TODO: caching and preloading
|
||||
sample_accounts = notification.account.notifications.where(group_key: notification.group_key).order(id: :desc).limit(3).map(&:from_account)
|
||||
notifications_count = notification.account.notifications.where(group_key: notification.group_key).count
|
||||
else
|
||||
sample_accounts = [notification.from_account]
|
||||
notifications_count = 1
|
||||
end
|
||||
|
||||
NotificationGroup.new(
|
||||
notification: notification,
|
||||
group_key: notification.group_key || "ungrouped-#{notification.id}",
|
||||
sample_accounts: sample_accounts,
|
||||
notifications_count: notifications_count
|
||||
)
|
||||
end
|
||||
|
||||
delegate :type,
|
||||
:target_status,
|
||||
:report,
|
||||
:account_relationship_severance_event,
|
||||
to: :notification, prefix: false
|
||||
end
|
45
app/serializers/rest/notification_group_serializer.rb
Normal file
45
app/serializers/rest/notification_group_serializer.rb
Normal file
|
@ -0,0 +1,45 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class REST::NotificationGroupSerializer < ActiveModel::Serializer
|
||||
attributes :group_key, :notifications_count, :type
|
||||
|
||||
attribute :page_min_id, if: :paginated?
|
||||
attribute :page_max_id, if: :paginated?
|
||||
attribute :latest_page_notification_at, if: :paginated?
|
||||
|
||||
has_many :sample_accounts, serializer: REST::AccountSerializer
|
||||
belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer
|
||||
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
|
||||
belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer
|
||||
|
||||
def status_type?
|
||||
[:favourite, :reblog, :status, :mention, :poll, :update].include?(object.type)
|
||||
end
|
||||
|
||||
def report_type?
|
||||
object.type == :'admin.report'
|
||||
end
|
||||
|
||||
def relationship_severance_event?
|
||||
object.type == :severed_relationships
|
||||
end
|
||||
|
||||
def page_min_id
|
||||
range = instance_options[:group_metadata][object.group_key]
|
||||
range.present? ? range[:min_id].to_s : object.notification.id.to_s
|
||||
end
|
||||
|
||||
def page_max_id
|
||||
range = instance_options[:group_metadata][object.group_key]
|
||||
range.present? ? range[:max_id].to_s : object.notification.id.to_s
|
||||
end
|
||||
|
||||
def latest_page_notification_at
|
||||
range = instance_options[:group_metadata][object.group_key]
|
||||
range.present? ? range[:latest_notification_at] : object.notification.created_at
|
||||
end
|
||||
|
||||
def paginated?
|
||||
instance_options[:group_metadata].present?
|
||||
end
|
||||
end
|
|
@ -3,6 +3,9 @@
|
|||
class NotifyService < BaseService
|
||||
include Redisable
|
||||
|
||||
MAXIMUM_GROUP_SPAN_HOURS = 12
|
||||
MAXIMUM_GROUP_GAP_TIME = 4.hours.to_i
|
||||
|
||||
NON_EMAIL_TYPES = %i(
|
||||
admin.report
|
||||
admin.sign_up
|
||||
|
@ -186,6 +189,7 @@ class NotifyService < BaseService
|
|||
return if dismiss?
|
||||
|
||||
@notification.filtered = filter?
|
||||
@notification.group_key = notification_group_key
|
||||
@notification.save!
|
||||
|
||||
# It's possible the underlying activity has been deleted
|
||||
|
@ -205,6 +209,24 @@ class NotifyService < BaseService
|
|||
|
||||
private
|
||||
|
||||
def notification_group_key
|
||||
return nil if @notification.filtered || %i(favourite reblog).exclude?(@notification.type)
|
||||
|
||||
type_prefix = "#{@notification.type}-#{@notification.target_status.id}"
|
||||
redis_key = "notif-group/#{@recipient.id}/#{type_prefix}"
|
||||
hour_bucket = @notification.activity.created_at.utc.to_i / 1.hour.to_i
|
||||
|
||||
# Reuse previous group if it does not span too large an amount of time
|
||||
previous_bucket = redis.get(redis_key).to_i
|
||||
hour_bucket = previous_bucket if hour_bucket < previous_bucket + MAXIMUM_GROUP_SPAN_HOURS
|
||||
|
||||
# Do not track groups past a given inactivity time
|
||||
# We do not concern ourselves with race conditions since we use hour buckets
|
||||
redis.set(redis_key, hour_bucket, ex: MAXIMUM_GROUP_GAP_TIME)
|
||||
|
||||
"#{type_prefix}-#{hour_bucket}"
|
||||
end
|
||||
|
||||
def dismiss?
|
||||
DismissCondition.new(@notification).dismiss?
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
- if self_destruct?
|
||||
.flash-message.warning
|
||||
= t('auth.status.self_destruct', domain: ENV.fetch('LOCAL_DOMAIN'))
|
||||
= t('auth.status.self_destruct', domain: Rails.configuration.x.local_domain)
|
||||
- else
|
||||
= render partial: 'status', locals: { user: @user, strikes: @strikes }
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
.simple_form
|
||||
%h1.title= t('self_destruct.title')
|
||||
%p.lead= t('self_destruct.lead_html', domain: ENV.fetch('LOCAL_DOMAIN'))
|
||||
%p.lead= t('self_destruct.lead_html', domain: Rails.configuration.x.local_domain)
|
||||
|
||||
.form-footer
|
||||
%ul.no-list
|
||||
|
|
|
@ -51,6 +51,8 @@ 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/active_record/with_recursive'
|
||||
require_relative '../lib/arel/union_parenthesizing'
|
||||
require_relative '../lib/simple_navigation/item_extensions'
|
||||
|
||||
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
|
||||
|
|
|
@ -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
|
||||
]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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ą.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -362,6 +362,18 @@ namespace :api, format: false do
|
|||
end
|
||||
end
|
||||
|
||||
namespace :v2_alpha do
|
||||
resources :notifications, only: [:index, :show] do
|
||||
collection do
|
||||
post :clear
|
||||
end
|
||||
|
||||
member do
|
||||
post :dismiss
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
namespace :web do
|
||||
resource :settings, only: [:update]
|
||||
resources :embeds, only: [:show]
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddGroupKeyToNotifications < ActiveRecord::Migration[7.1]
|
||||
def change
|
||||
add_column :notifications, :group_key, :string
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIndexNotificationsOnAccountIdAndGroupKey < ActiveRecord::Migration[7.1]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def change
|
||||
add_index :notifications, [:account_id, :group_key], algorithm: :concurrently, where: 'group_key IS NOT NULL'
|
||||
end
|
||||
end
|
|
@ -1000,6 +1000,8 @@ ActiveRecord::Schema[7.1].define(version: 2024_05_22_041528) do
|
|||
t.bigint "from_account_id", null: false
|
||||
t.string "type"
|
||||
t.boolean "filtered", default: false, null: false
|
||||
t.string "group_key"
|
||||
t.index ["account_id", "group_key"], name: "index_notifications_on_account_id_and_group_key", where: "(group_key IS NOT NULL)"
|
||||
t.index ["account_id", "id", "type"], name: "index_notifications_on_account_id_and_id_and_type", order: { id: :desc }
|
||||
t.index ["account_id", "id", "type"], name: "index_notifications_on_filtered", order: { id: :desc }, where: "(filtered = false)"
|
||||
t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type"
|
||||
|
|
65
lib/active_record/with_recursive.rb
Normal file
65
lib/active_record/with_recursive.rb
Normal file
|
@ -0,0 +1,65 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Add support for writing recursive CTEs in ActiveRecord
|
||||
|
||||
# Initially from Lorin Thwaits (https://github.com/lorint) as per comment:
|
||||
# https://github.com/vlado/activerecord-cte/issues/16#issuecomment-1433043310
|
||||
|
||||
# Modified from the above code to change the signature to
|
||||
# `with_recursive(hash)` and extending CTE hash values to also includes arrays
|
||||
# of values that get turned into UNION ALL expressions.
|
||||
|
||||
# This implementation has been merged in Rails: https://github.com/rails/rails/pull/51601
|
||||
|
||||
module ActiveRecord
|
||||
module QueryMethodsExtensions
|
||||
def with_recursive(*args)
|
||||
@with_is_recursive = true
|
||||
check_if_method_has_arguments!(__callee__, args)
|
||||
spawn.with_recursive!(*args)
|
||||
end
|
||||
|
||||
# Like #with_recursive but modifies the relation in place.
|
||||
def with_recursive!(*args) # :nodoc:
|
||||
self.with_values += args
|
||||
@with_is_recursive = true
|
||||
self
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def build_with(arel)
|
||||
return if with_values.empty?
|
||||
|
||||
with_statements = with_values.map do |with_value|
|
||||
raise ArgumentError, "Unsupported argument type: #{with_value} #{with_value.class}" unless with_value.is_a?(Hash)
|
||||
|
||||
build_with_value_from_hash(with_value)
|
||||
end
|
||||
|
||||
# Was: arel.with(with_statements)
|
||||
@with_is_recursive ? arel.with(:recursive, with_statements) : arel.with(with_statements)
|
||||
end
|
||||
|
||||
def build_with_value_from_hash(hash)
|
||||
hash.map do |name, value|
|
||||
Arel::Nodes::TableAlias.new(build_with_expression_from_value(value), name)
|
||||
end
|
||||
end
|
||||
|
||||
def build_with_expression_from_value(value)
|
||||
case value
|
||||
when Arel::Nodes::SqlLiteral then Arel::Nodes::Grouping.new(value)
|
||||
when ActiveRecord::Relation then value.arel
|
||||
when Arel::SelectManager then value
|
||||
when Array then value.map { |e| build_with_expression_from_value(e) }.reduce { |result, value| Arel::Nodes::UnionAll.new(result, value) }
|
||||
else
|
||||
raise ArgumentError, "Unsupported argument type: `#{value}` #{value.class}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ActiveSupport.on_load(:active_record) do
|
||||
ActiveRecord::QueryMethods.prepend(ActiveRecord::QueryMethodsExtensions)
|
||||
end
|
51
lib/arel/union_parenthesizing.rb
Normal file
51
lib/arel/union_parenthesizing.rb
Normal file
|
@ -0,0 +1,51 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Fix an issue with `LIMIT` ocurring on the left side of a `UNION` causing syntax errors.
|
||||
# See https://github.com/rails/rails/issues/40181
|
||||
|
||||
# The fix has been merged in ActiveRecord: https://github.com/rails/rails/pull/51549
|
||||
# TODO: drop this when available in ActiveRecord
|
||||
|
||||
# rubocop:disable all -- This is a mostly vendored file
|
||||
|
||||
module Arel
|
||||
module Visitors
|
||||
class ToSql
|
||||
private
|
||||
|
||||
def infix_value_with_paren(o, collector, value, suppress_parens = false)
|
||||
collector << "( " unless suppress_parens
|
||||
collector = if o.left.class == o.class
|
||||
infix_value_with_paren(o.left, collector, value, true)
|
||||
else
|
||||
select_parentheses o.left, collector, false # Changed from `visit o.left, collector`
|
||||
end
|
||||
collector << value
|
||||
collector = if o.right.class == o.class
|
||||
infix_value_with_paren(o.right, collector, value, true)
|
||||
else
|
||||
select_parentheses o.right, collector, false # Changed from `visit o.right, collector`
|
||||
end
|
||||
collector << " )" unless suppress_parens
|
||||
collector
|
||||
end
|
||||
|
||||
def select_parentheses(o, collector, always_wrap_selects = true)
|
||||
if o.is_a?(Nodes::SelectStatement) && (always_wrap_selects || require_parentheses?(o))
|
||||
collector << "("
|
||||
visit o, collector
|
||||
collector << ")"
|
||||
collector
|
||||
else
|
||||
visit o, collector
|
||||
end
|
||||
end
|
||||
|
||||
def require_parentheses?(o)
|
||||
!o.orders.empty? || o.limit || o.offset
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# rubocop:enable all
|
|
@ -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 }
|
||||
|
|
|
@ -151,6 +151,66 @@ RSpec.describe Notification do
|
|||
end
|
||||
end
|
||||
|
||||
describe '.paginate_groups_by_max_id' do
|
||||
let(:account) { Fabricate(:account) }
|
||||
|
||||
let!(:notifications) do
|
||||
['group-1', 'group-1', nil, 'group-2', nil, 'group-1', 'group-2', 'group-1']
|
||||
.map { |group_key| Fabricate(:notification, account: account, group_key: group_key) }
|
||||
end
|
||||
|
||||
context 'without since_id or max_id' do
|
||||
it 'returns the most recent notifications, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_max_id(4).pluck(:id))
|
||||
.to eq [notifications[7], notifications[6], notifications[4], notifications[2]].pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with since_id' do
|
||||
it 'returns the most recent notifications, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_max_id(4, since_id: notifications[4].id).pluck(:id))
|
||||
.to eq [notifications[7], notifications[6]].pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with max_id' do
|
||||
it 'returns the most recent notifications after max_id, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_max_id(4, max_id: notifications[7].id).pluck(:id))
|
||||
.to eq [notifications[6], notifications[5], notifications[4], notifications[2]].pluck(:id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.paginate_groups_by_min_id' do
|
||||
let(:account) { Fabricate(:account) }
|
||||
|
||||
let!(:notifications) do
|
||||
['group-1', 'group-1', nil, 'group-2', nil, 'group-1', 'group-2', 'group-1']
|
||||
.map { |group_key| Fabricate(:notification, account: account, group_key: group_key) }
|
||||
end
|
||||
|
||||
context 'without min_id or max_id' do
|
||||
it 'returns the oldest notifications, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_min_id(4).pluck(:id))
|
||||
.to eq [notifications[0], notifications[2], notifications[3], notifications[4]].pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with max_id' do
|
||||
it 'returns the oldest notifications, stopping at max_id, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_min_id(4, max_id: notifications[4].id).pluck(:id))
|
||||
.to eq [notifications[0], notifications[2], notifications[3]].pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with min_id' do
|
||||
it 'returns the most oldest notifications after min_id, only keeping one notification per group' do
|
||||
expect(described_class.without_suspended.paginate_groups_by_min_id(4, min_id: notifications[0].id).pluck(:id))
|
||||
.to eq [notifications[1], notifications[2], notifications[3], notifications[4]].pluck(:id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.preload_cache_collection_target_statuses' do
|
||||
subject do
|
||||
described_class.preload_cache_collection_target_statuses(notifications) do |target_statuses|
|
||||
|
|
161
spec/requests/api/v2_alpha/notifications_spec.rb
Normal file
161
spec/requests/api/v2_alpha/notifications_spec.rb
Normal file
|
@ -0,0 +1,161 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Notifications' do
|
||||
let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) }
|
||||
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
|
||||
let(:scopes) { 'read:notifications write:notifications' }
|
||||
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
|
||||
|
||||
describe 'GET /api/v2_alpha/notifications', :sidekiq_inline do
|
||||
subject do
|
||||
get '/api/v2_alpha/notifications', headers: headers, params: params
|
||||
end
|
||||
|
||||
let(:bob) { Fabricate(:user) }
|
||||
let(:tom) { Fabricate(:user) }
|
||||
let(:params) { {} }
|
||||
|
||||
before do
|
||||
first_status = PostStatusService.new.call(user.account, text: 'Test')
|
||||
ReblogService.new.call(bob.account, first_status)
|
||||
mentioning_status = PostStatusService.new.call(bob.account, text: 'Hello @alice')
|
||||
mentioning_status.mentions.first
|
||||
FavouriteService.new.call(bob.account, first_status)
|
||||
FavouriteService.new.call(tom.account, first_status)
|
||||
FollowService.new.call(bob.account, user.account)
|
||||
end
|
||||
|
||||
it_behaves_like 'forbidden for wrong scope', 'write write:notifications'
|
||||
|
||||
context 'with no options' do
|
||||
it 'returns expected notification types', :aggregate_failures do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(body_json_types).to include('reblog', 'mention', 'favourite', 'follow')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with exclude_types param' do
|
||||
let(:params) { { exclude_types: %w(mention) } }
|
||||
|
||||
it 'returns everything but excluded type', :aggregate_failures do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(body_as_json.size).to_not eq 0
|
||||
expect(body_json_types.uniq).to_not include 'mention'
|
||||
end
|
||||
end
|
||||
|
||||
context 'with types param' do
|
||||
let(:params) { { types: %w(mention) } }
|
||||
|
||||
it 'returns only requested type', :aggregate_failures do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(body_json_types.uniq).to eq ['mention']
|
||||
end
|
||||
end
|
||||
|
||||
context 'with limit param' do
|
||||
let(:params) { { limit: 3 } }
|
||||
|
||||
it 'returns the requested number of notifications paginated', :aggregate_failures do
|
||||
subject
|
||||
|
||||
notifications = user.account.notifications
|
||||
|
||||
expect(body_as_json.size)
|
||||
.to eq(params[:limit])
|
||||
|
||||
expect(response)
|
||||
.to include_pagination_headers(
|
||||
prev: api_v2_alpha_notifications_url(limit: params[:limit], min_id: notifications.last.id),
|
||||
# TODO: one downside of the current approach is that we return the first ID matching the group,
|
||||
# not the last that has been skipped, so pagination is very likely to give overlap
|
||||
next: api_v2_alpha_notifications_url(limit: params[:limit], max_id: notifications[1].id)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def body_json_types
|
||||
body_as_json.pluck(:type)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /api/v2_alpha/notifications/:id' do
|
||||
subject do
|
||||
get "/api/v2_alpha/notifications/#{notification.group_key}", headers: headers
|
||||
end
|
||||
|
||||
let(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') }
|
||||
|
||||
it_behaves_like 'forbidden for wrong scope', 'write write:notifications'
|
||||
|
||||
it 'returns http success' do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
|
||||
context 'when notification belongs to someone else' do
|
||||
let(:notification) { Fabricate(:notification, group_key: 'foobar') }
|
||||
|
||||
it 'returns http not found' do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST /api/v2_alpha/notifications/:id/dismiss' do
|
||||
subject do
|
||||
post "/api/v2_alpha/notifications/#{notification.group_key}/dismiss", headers: headers
|
||||
end
|
||||
|
||||
let!(:notification) { Fabricate(:notification, account: user.account, group_key: 'foobar') }
|
||||
|
||||
it_behaves_like 'forbidden for wrong scope', 'read read:notifications'
|
||||
|
||||
it 'destroys the notification' do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect { notification.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
||||
context 'when notification belongs to someone else' do
|
||||
let(:notification) { Fabricate(:notification) }
|
||||
|
||||
it 'returns http not found' do
|
||||
subject
|
||||
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST /api/v2_alpha/notifications/clear' do
|
||||
subject do
|
||||
post '/api/v2_alpha/notifications/clear', headers: headers
|
||||
end
|
||||
|
||||
before do
|
||||
Fabricate(:notification, account: user.account)
|
||||
end
|
||||
|
||||
it_behaves_like 'forbidden for wrong scope', 'read read:notifications'
|
||||
|
||||
it 'clears notifications for the account' do
|
||||
subject
|
||||
|
||||
expect(user.account.reload.notifications).to be_empty
|
||||
expect(response).to have_http_status(200)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,7 +6,7 @@ describe 'The /.well-known/oauth-authorization-server request' do
|
|||
let(:protocol) { ENV.fetch('LOCAL_HTTPS', true) ? :https : :http }
|
||||
|
||||
before do
|
||||
host! ENV.fetch('LOCAL_DOMAIN')
|
||||
host! Rails.configuration.x.local_domain
|
||||
end
|
||||
|
||||
it 'returns http success with valid JSON response' do
|
||||
|
|
|
@ -6,7 +6,7 @@ module SignedRequestHelpers
|
|||
|
||||
headers ||= {}
|
||||
headers['Date'] = Time.now.utc.httpdate
|
||||
headers['Host'] = ENV.fetch('LOCAL_DOMAIN')
|
||||
headers['Host'] = Rails.configuration.x.local_domain
|
||||
signed_headers = headers.merge('(request-target)' => "get #{path}").slice('(request-target)', 'Host', 'Date')
|
||||
|
||||
key_id = ActivityPub::TagManager.instance.key_uri_for(sign_with)
|
||||
|
|
|
@ -7,7 +7,7 @@ describe 'Profile' do
|
|||
|
||||
subject { page }
|
||||
|
||||
let(:local_domain) { ENV['LOCAL_DOMAIN'] }
|
||||
let(:local_domain) { Rails.configuration.x.local_domain }
|
||||
|
||||
before do
|
||||
as_a_logged_in_user
|
||||
|
|
552
yarn.lock
552
yarn.lock
|
@ -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
|
||||
|
||||
|
@ -4128,14 +4128,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"
|
||||
|
@ -4146,25 +4146,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
|
||||
|
||||
|
@ -4178,22 +4178,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:
|
||||
|
@ -4201,7 +4201,7 @@ __metadata:
|
|||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
checksum: 10c0/55e9a6690f9cedb79d30abb1990b161affaa2684dac246b743223353812c9c1e3fd2d923c67b193c6a3624a07e1c82c900ce7bf5b6b9891c846f04cb480ebd9f
|
||||
checksum: 10c0/637395cb0f4c424c610e751906a31dcfedcdbd8c479012da6e81f9be6b930f32317bfe170ccb758d93a411b2bd9c4e7e5d18892094466099c6f9c3dceda81a72
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
@ -4212,10 +4212,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
|
||||
|
||||
|
@ -4238,12 +4238,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"
|
||||
|
@ -4253,21 +4253,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
|
||||
|
||||
|
@ -4298,13 +4298,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
|
||||
|
||||
|
@ -4848,16 +4848,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
|
||||
|
||||
|
@ -4891,16 +4892,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
|
||||
|
||||
|
@ -5084,15 +5086,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"
|
||||
|
@ -5141,7 +5134,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:
|
||||
|
@ -5827,7 +5820,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:
|
||||
|
@ -6896,6 +6889,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"
|
||||
|
@ -7011,7 +7037,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:
|
||||
|
@ -7569,16 +7595,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"
|
||||
|
@ -7589,10 +7619,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"
|
||||
|
@ -7603,18 +7634,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
|
||||
|
||||
|
@ -7641,30 +7672,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:
|
||||
|
@ -7845,20 +7884,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
|
||||
|
||||
|
@ -7907,30 +7946,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
|
||||
|
||||
|
@ -8408,12 +8447,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
|
||||
|
||||
|
@ -8558,14 +8597,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
|
||||
|
||||
|
@ -8578,10 +8616,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
|
||||
|
||||
|
@ -8800,7 +8838,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:
|
||||
|
@ -8905,7 +8943,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:
|
||||
|
@ -9120,7 +9158,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:
|
||||
|
@ -9189,12 +9227,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
|
||||
|
||||
|
@ -9639,7 +9677,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:
|
||||
|
@ -9871,6 +9909,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"
|
||||
|
@ -11747,7 +11794,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:
|
||||
|
@ -12328,7 +12375,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
|
||||
|
@ -12373,25 +12420,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
|
||||
|
||||
|
@ -12420,13 +12468,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
|
||||
|
||||
|
@ -12439,14 +12488,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
|
||||
|
||||
|
@ -13993,11 +14042,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
|
||||
|
||||
|
@ -14936,7 +14985,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:
|
||||
|
@ -15232,17 +15281,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"
|
||||
|
@ -15290,15 +15328,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
|
||||
|
||||
|
@ -15376,15 +15414,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
|
||||
|
||||
|
@ -15497,7 +15535,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:
|
||||
|
@ -15593,14 +15631,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
|
||||
|
||||
|
@ -15697,14 +15736,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
|
||||
|
||||
|
@ -16240,53 +16280,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
|
||||
|
||||
|
@ -16503,8 +16547,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"
|
||||
|
@ -16519,7 +16563,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"
|
||||
|
@ -16530,7 +16574,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"
|
||||
|
@ -16547,7 +16591,7 @@ __metadata:
|
|||
write-file-atomic: "npm:^5.0.1"
|
||||
bin:
|
||||
stylelint: bin/stylelint.mjs
|
||||
checksum: 10c0/acfb7983a0b71677d066b2aa570eefdac0a7be2e21351bac8884b8156deaeec19e53ad128ae7ae7933c79f6045f1de8d759ba06cfbc373b2711015860805a3e7
|
||||
checksum: 10c0/8dc9b0024d6fb109380a142171ab8a134c3863aa8b8736f0083310a0d05f173dcda5680f29267697dfa0aaeb2f08aef4ef113e4bb4f8582fcfdd97f35be51d71
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
@ -17147,9 +17191,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"
|
||||
|
@ -17157,7 +17201,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
|
||||
|
||||
|
@ -18026,16 +18070,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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue