diff --git a/Gemfile b/Gemfile
index 59332294205..9ac8b7f3ee4 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,7 +3,7 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
ruby "~> #{File.read(File.join(__dir__, '.ruby-version')).strip}"
-gem 'rails', '~> 7.1.0'
+gem 'rails', '~> 7.1.3'
gem 'activerecord-postgis-adapter', '~> 9.0'
gem 'ahoy_matey', '~> 3.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index 93aacb39ea0..9b1844352da 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -68,35 +68,35 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.1.2)
- actionpack (= 7.1.2)
- activesupport (= 7.1.2)
+ actioncable (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.1.2)
- actionpack (= 7.1.2)
- activejob (= 7.1.2)
- activerecord (= 7.1.2)
- activestorage (= 7.1.2)
- activesupport (= 7.1.2)
+ actionmailbox (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ activejob (= 7.1.3.2)
+ activerecord (= 7.1.3.2)
+ activestorage (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
- actionmailer (7.1.2)
- actionpack (= 7.1.2)
- actionview (= 7.1.2)
- activejob (= 7.1.2)
- activesupport (= 7.1.2)
+ actionmailer (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ actionview (= 7.1.3.2)
+ activejob (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
- actionpack (7.1.2)
- actionview (= 7.1.2)
- activesupport (= 7.1.2)
+ actionpack (7.1.3.2)
+ actionview (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
@@ -104,38 +104,38 @@ GEM
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- actiontext (7.1.2)
- actionpack (= 7.1.2)
- activerecord (= 7.1.2)
- activestorage (= 7.1.2)
- activesupport (= 7.1.2)
+ actiontext (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ activerecord (= 7.1.3.2)
+ activestorage (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.2)
- activesupport (= 7.1.2)
+ actionview (7.1.3.2)
+ activesupport (= 7.1.3.2)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- activejob (7.1.2)
- activesupport (= 7.1.2)
+ activejob (7.1.3.2)
+ activesupport (= 7.1.3.2)
globalid (>= 0.3.6)
- activemodel (7.1.2)
- activesupport (= 7.1.2)
- activerecord (7.1.2)
- activemodel (= 7.1.2)
- activesupport (= 7.1.2)
+ activemodel (7.1.3.2)
+ activesupport (= 7.1.3.2)
+ activerecord (7.1.3.2)
+ activemodel (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
timeout (>= 0.4.0)
activerecord-postgis-adapter (9.0.1)
activerecord (~> 7.1.0)
rgeo-activerecord (~> 7.0.0)
- activestorage (7.1.2)
- actionpack (= 7.1.2)
- activejob (= 7.1.2)
- activerecord (= 7.1.2)
- activesupport (= 7.1.2)
+ activestorage (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ activejob (= 7.1.3.2)
+ activerecord (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
marcel (~> 1.0)
- activesupport (7.1.2)
+ activesupport (7.1.3.2)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -503,20 +503,20 @@ GEM
rackup (2.1.0)
rack (>= 3)
webrick (~> 1.8)
- rails (7.1.2)
- actioncable (= 7.1.2)
- actionmailbox (= 7.1.2)
- actionmailer (= 7.1.2)
- actionpack (= 7.1.2)
- actiontext (= 7.1.2)
- actionview (= 7.1.2)
- activejob (= 7.1.2)
- activemodel (= 7.1.2)
- activerecord (= 7.1.2)
- activestorage (= 7.1.2)
- activesupport (= 7.1.2)
+ rails (7.1.3.2)
+ actioncable (= 7.1.3.2)
+ actionmailbox (= 7.1.3.2)
+ actionmailer (= 7.1.3.2)
+ actionpack (= 7.1.3.2)
+ actiontext (= 7.1.3.2)
+ actionview (= 7.1.3.2)
+ activejob (= 7.1.3.2)
+ activemodel (= 7.1.3.2)
+ activerecord (= 7.1.3.2)
+ activestorage (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
bundler (>= 1.15.0)
- railties (= 7.1.2)
+ railties (= 7.1.3.2)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -531,9 +531,9 @@ GEM
rails-i18n (7.0.6)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (7.1.2)
- actionpack (= 7.1.2)
- activesupport (= 7.1.2)
+ railties (7.1.3.2)
+ actionpack (= 7.1.3.2)
+ activesupport (= 7.1.3.2)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -818,7 +818,7 @@ DEPENDENCIES
rack-test (>= 1.1.0)
rack-timeout
rack_session_access (>= 0.2.0)
- rails (~> 7.1.0)
+ rails (~> 7.1.3)
rails-controller-testing (>= 1.0.4)
redacted_struct
redis (>= 3.2.0)
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 43c77f0d1d8..3bcbc03a965 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -257,7 +257,7 @@ def after_mfa_setup_path
def user_needs_to_reactivate_account?
return false if current_user.password_reset_profile.blank?
return false if pending_profile_newer_than_password_reset_profile?
- sp_session[:ial2] == true
+ resolved_authn_context_result.identity_proofing?
end
def pending_profile_newer_than_password_reset_profile?
@@ -387,8 +387,11 @@ def set_locale
I18n.locale = LocaleChooser.new(params[:locale], request).locale
end
- def sp_session_ial
- sp_session[:ial].presence || 1
+ def pii_requested_but_locked?
+ if resolved_authn_context_result.identity_proofing? || resolved_authn_context_result.ialmax?
+ current_user.identity_verified? &&
+ !Pii::Cacher.new(current_user, user_session).exists_in_session?
+ end
end
def mfa_policy
diff --git a/app/controllers/concerns/billable_event_trackable.rb b/app/controllers/concerns/billable_event_trackable.rb
index 0c9784d0fde..13ac781b6f5 100644
--- a/app/controllers/concerns/billable_event_trackable.rb
+++ b/app/controllers/concerns/billable_event_trackable.rb
@@ -41,7 +41,7 @@ def mark_current_session_billed
def session_has_been_billed_flag_key
issuer = sp_session[:issuer]
- if sp_session_ial == 1
+ if !resolved_authn_context_result.identity_proofing?
"auth_counted_#{issuer}ial1"
else
"auth_counted_#{issuer}"
diff --git a/app/controllers/concerns/idv_session_concern.rb b/app/controllers/concerns/idv_session_concern.rb
index 08f16cfb9a3..44dd58fd60b 100644
--- a/app/controllers/concerns/idv_session_concern.rb
+++ b/app/controllers/concerns/idv_session_concern.rb
@@ -53,13 +53,7 @@ def redirect_unless_idv_session_user
def redirect_unless_sp_requested_verification
return if !IdentityConfig.store.idv_sp_required
return if idv_session_user.profiles.any?
-
- ial_context = IalContext.new(
- ial: sp_session_ial,
- service_provider: sp_from_sp_session,
- user: idv_session_user,
- )
- return if ial_context.ial2_or_greater?
+ return if resolved_authn_context_result.identity_proofing?
redirect_to account_url
end
diff --git a/app/controllers/concerns/saml_idp_auth_concern.rb b/app/controllers/concerns/saml_idp_auth_concern.rb
index 14b2be3d042..531cae6543d 100644
--- a/app/controllers/concerns/saml_idp_auth_concern.rb
+++ b/app/controllers/concerns/saml_idp_auth_concern.rb
@@ -133,7 +133,7 @@ def link_identity_from_session_data
IdentityLinker.
new(current_user, saml_request_service_provider).
link_identity(
- ial: ial_context.ial,
+ ial: resolved_authn_context_int_ial,
rails_session_id: session.id,
)
end
@@ -148,9 +148,8 @@ def identity_needs_verification?
def ial_context
@ial_context ||= IalContext.new(
- ial: requested_ial_authn_context,
+ ial: resolved_authn_context_int_ial,
service_provider: saml_request_service_provider,
- authn_context_comparison: saml_request.requested_authn_context_comparison,
user: current_user,
)
end
diff --git a/app/controllers/concerns/verify_sp_attributes_concern.rb b/app/controllers/concerns/verify_sp_attributes_concern.rb
index 6a168bb07b8..d47dbedd138 100644
--- a/app/controllers/concerns/verify_sp_attributes_concern.rb
+++ b/app/controllers/concerns/verify_sp_attributes_concern.rb
@@ -22,7 +22,7 @@ def update_verified_attributes
current_user,
current_sp,
).link_identity(
- ial: sp_session_ial,
+ ial: linked_identity_ial,
verified_attributes: sp_session[:requested_attributes],
last_consented_at: Time.zone.now,
clear_deleted_at: true,
@@ -62,6 +62,16 @@ def verified_after_consent?(last_estimated_consent)
verification_timestamp.present? && last_estimated_consent < verification_timestamp
end
+ def linked_identity_ial
+ if resolved_authn_context_result.ialmax?
+ 0
+ elsif resolved_authn_context_result.identity_proofing?
+ 2
+ else
+ 1
+ end
+ end
+
def find_sp_session_identity
current_user&.identities&.find_by(service_provider: sp_session[:issuer])
end
diff --git a/app/controllers/idv/personal_key_controller.rb b/app/controllers/idv/personal_key_controller.rb
index 4df87e7b96a..c90cd6af732 100644
--- a/app/controllers/idv/personal_key_controller.rb
+++ b/app/controllers/idv/personal_key_controller.rb
@@ -21,11 +21,16 @@ def show
analytics.idv_personal_key_visited(
address_verification_method: idv_session.address_verification_mechanism,
in_person_verification_pending: idv_session.profile&.in_person_verification_pending?,
+ encrypted_profiles_missing: pii_is_missing?,
**opt_in_analytics_properties,
)
- add_proofing_component
- finish_idv_session
+ if pii_is_missing?
+ redirect_to_retrieve_pii
+ else
+ add_proofing_component
+ finish_idv_session
+ end
end
def update
@@ -117,5 +122,14 @@ def in_person_enrollment?
return false unless IdentityConfig.store.in_person_proofing_enabled
current_user.pending_in_person_enrollment.present?
end
+
+ def pii_is_missing?
+ user_session[:encrypted_profiles].blank?
+ end
+
+ def redirect_to_retrieve_pii
+ user_session[:stored_location] = request.original_fullpath
+ redirect_to fix_broken_personal_key_url
+ end
end
end
diff --git a/app/controllers/openid_connect/authorization_controller.rb b/app/controllers/openid_connect/authorization_controller.rb
index a1171123193..2fb4d9de2ce 100644
--- a/app/controllers/openid_connect/authorization_controller.rb
+++ b/app/controllers/openid_connect/authorization_controller.rb
@@ -189,12 +189,6 @@ def store_request
).call
end
- def pii_requested_but_locked?
- sp_session && sp_session_ial > 1 &&
- current_user.identity_verified? &&
- !Pii::Cacher.new(current_user, user_session).exists_in_session?
- end
-
def track_events
event_ial_context = IalContext.new(
ial: @authorize_form.ial,
diff --git a/app/controllers/saml_idp_controller.rb b/app/controllers/saml_idp_controller.rb
index e28797867d7..d3265294ac8 100644
--- a/app/controllers/saml_idp_controller.rb
+++ b/app/controllers/saml_idp_controller.rb
@@ -113,13 +113,6 @@ def set_devise_failure_redirect_for_concurrent_session_logout
request.env['devise_session_limited_failure_redirect_url'] = request.url
end
- def pii_requested_but_locked?
- if (sp_session && sp_session_ial > 1) || ial_context.ialmax_requested?
- current_user.identity_verified? &&
- !Pii::Cacher.new(current_user, user_session).exists_in_session?
- end
- end
-
def capture_analytics
analytics_payload = result.to_h.merge(
endpoint: api_saml_auth_path(path_year: params[:path_year]),
@@ -146,7 +139,9 @@ def log_external_saml_auth_request
end
def requested_ial
- return 'ialmax' if ial_context.ialmax_requested?
+ requested_ial_acr = FederatedProtocols::Saml.new(saml_request).ial
+ requested_ial_component = Vot::LegacyComponentValues.by_name[requested_ial_acr]
+ return 'ialmax' if requested_ial_component&.requirements&.include?(:ialmax)
saml_request&.requested_ial_authn_context || 'none'
end
@@ -174,9 +169,19 @@ def render_template_for(message, action_url, type)
)
end
+ def resolved_authn_context_int_ial
+ if resolved_authn_context_result.ialmax?
+ 0
+ elsif resolved_authn_context_result.identity_proofing?
+ 2
+ else
+ 1
+ end
+ end
+
def track_events
analytics.sp_redirect_initiated(
- ial: ial_context.ial,
+ ial: resolved_authn_context_int_ial,
billed_ial: ial_context.bill_for_ial_1_or_2,
sign_in_flow: session[:sign_in_flow],
)
diff --git a/app/controllers/sign_up/completions_controller.rb b/app/controllers/sign_up/completions_controller.rb
index 912a7ac01a7..c21f2e40510 100644
--- a/app/controllers/sign_up/completions_controller.rb
+++ b/app/controllers/sign_up/completions_controller.rb
@@ -3,7 +3,7 @@ class CompletionsController < ApplicationController
include SecureHeadersConcern
before_action :confirm_two_factor_authenticated
- before_action :confirm_identity_verified, if: :ial2?
+ before_action :confirm_identity_verified, if: :identity_proofing_required?
before_action :confirm_selfie_captured, if: :selfie_required?
before_action :apply_secure_headers_override, only: [:show, :update]
before_action :verify_needs_completions_screen
@@ -55,16 +55,12 @@ def completions_presenter
)
end
- def ial2?
- sp_session[:ial2]
- end
-
- def ial_max?
- sp_session[:ialmax]
+ def identity_proofing_required?
+ resolved_authn_context_result.identity_proofing?
end
def ial2_requested?
- !!(ial2? || (ial_max? && current_user.identity_verified?))
+ resolved_authn_context_result.identity_proofing_or_ialmax? && current_user.identity_verified?
end
def selfie_required?
@@ -91,8 +87,8 @@ def sign_user_out_and_instruct_to_go_back_to_mobile_app
def analytics_attributes(page_occurence)
attributes = {
- ial2: sp_session[:ial2],
- ialmax: sp_session[:ialmax],
+ ial2: resolved_authn_context_result.identity_proofing?,
+ ialmax: resolved_authn_context_result.ialmax?,
service_provider_name: decorated_sp_session.sp_name,
sp_session_requested_attributes: sp_session[:requested_attributes],
sp_request_requested_attributes: service_provider_request.requested_attributes,
@@ -126,7 +122,7 @@ def pii
end
def send_in_person_completion_survey
- return unless sp_session_ial == ::Idp::Constants::IAL2
+ return unless resolved_authn_context_result.identity_proofing?
Idv::InPerson::CompletionSurveySender.send_completion_survey(
current_user,
diff --git a/app/controllers/users/passwords_controller.rb b/app/controllers/users/passwords_controller.rb
index 15cfcfcca77..ae838e6078e 100644
--- a/app/controllers/users/passwords_controller.rb
+++ b/app/controllers/users/passwords_controller.rb
@@ -3,7 +3,7 @@ class PasswordsController < ApplicationController
include ReauthenticationRequiredConcern
before_action :confirm_two_factor_authenticated
- before_action :capture_password_if_pii_requested_but_locked
+ before_action :capture_password_if_pii_present_but_locked
before_action :confirm_recently_authenticated_2fa
def edit
@@ -33,7 +33,7 @@ def update
private
- def capture_password_if_pii_requested_but_locked
+ def capture_password_if_pii_present_but_locked
return unless current_user.identity_verified? &&
!Pii::Cacher.new(current_user, user_session).exists_in_session?
user_session[:stored_location] = request.url
diff --git a/app/controllers/users/piv_cac_login_controller.rb b/app/controllers/users/piv_cac_login_controller.rb
index d30ba4f1787..7f627d58b9c 100644
--- a/app/controllers/users/piv_cac_login_controller.rb
+++ b/app/controllers/users/piv_cac_login_controller.rb
@@ -79,8 +79,7 @@ def process_valid_submission
end
def next_step
- if ial_context.ial2_requested? && current_user.identity_verified? &&
- !Pii::Cacher.new(current_user, user_session).exists_in_session?
+ if pii_requested_but_locked?
capture_password_url
elsif !current_user.accepted_rules_of_use_still_valid?
rules_of_use_path
@@ -89,14 +88,6 @@ def next_step
end
end
- def ial_context
- @ial_context ||= IalContext.new(
- ial: sp_session_ial,
- service_provider: current_sp,
- user: piv_cac_login_form.user,
- )
- end
-
def process_invalid_submission
session[:needs_to_setup_piv_cac_after_sign_in] = true if piv_cac_login_form.valid_token?
diff --git a/app/controllers/users/sessions_controller.rb b/app/controllers/users/sessions_controller.rb
index dea8c2f9244..128187d00e7 100644
--- a/app/controllers/users/sessions_controller.rb
+++ b/app/controllers/users/sessions_controller.rb
@@ -23,10 +23,7 @@ def new
@issuer_forced_reauthentication = issuer_forced_reauthentication?(
issuer: decorated_sp_session.sp_issuer,
)
- analytics.sign_in_page_visit(
- flash: flash[:alert],
- stored_location: session['user_return_to'],
- )
+ analytics.sign_in_page_visit(flash: flash[:alert])
super
end
@@ -134,7 +131,6 @@ def track_authentication_attempt(email)
user_id: user.uuid,
user_locked_out: user_locked_out?(user),
bad_password_count: session[:bad_password_count].to_i,
- stored_location: session['user_return_to'],
sp_request_url_present: sp_session[:request_url].present?,
remember_device: remember_device_cookie.present?,
)
diff --git a/app/forms/frontend_error_form.rb b/app/forms/frontend_error_form.rb
new file mode 100644
index 00000000000..5c8e91929f8
--- /dev/null
+++ b/app/forms/frontend_error_form.rb
@@ -0,0 +1,30 @@
+class FrontendErrorForm
+ include ActiveModel::Model
+ include ActionView::Helpers::TranslationHelper
+
+ validate :validate_filename_extension
+ validate :validate_filename_host
+
+ attr_reader :filename
+
+ def submit(filename:)
+ @filename = filename
+
+ FormResponse.new(success: valid?, errors:, serialize_error_details_only: true)
+ end
+
+ private
+
+ def validate_filename_extension
+ return if File.extname(filename.to_s) == '.js'
+ errors.add(:filename, :invalid_extension, message: t('errors.general'))
+ end
+
+ def validate_filename_host
+ begin
+ return if URI(filename.to_s).host == IdentityConfig.store.domain_name
+ rescue URI::InvalidURIError; end
+
+ errors.add(:filename, :invalid_host, message: t('errors.general'))
+ end
+end
diff --git a/app/forms/openid_connect_authorize_form.rb b/app/forms/openid_connect_authorize_form.rb
index bb2c5afb04d..95f81590e00 100644
--- a/app/forms/openid_connect_authorize_form.rb
+++ b/app/forms/openid_connect_authorize_form.rb
@@ -100,6 +100,8 @@ def link_identity_to_service_provider(current_user, rails_session_id)
rails_session_id: rails_session_id,
ial: ial_context.ial,
aal: aal,
+ acr_values: acr_values&.join(' '),
+ vtr: vtr,
requested_aal_value: requested_aal_value,
scope: scope.join(' '),
code_challenge: code_challenge,
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index c6decbc77da..82a3d4b7865 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -50,7 +50,7 @@ def page_with_trust?
end
def ial2_requested?
- sp_session && sp_session[:ial2]
+ resolved_authn_context_result.identity_proofing?
end
def cancel_link_text
diff --git a/app/javascript/packages/address-search/components/address-input.spec.tsx b/app/javascript/packages/address-search/components/address-input.spec.tsx
index a46ad448622..c45262f2379 100644
--- a/app/javascript/packages/address-search/components/address-input.spec.tsx
+++ b/app/javascript/packages/address-search/components/address-input.spec.tsx
@@ -2,7 +2,7 @@ import { render } from '@testing-library/react';
import { useSandbox } from '@18f/identity-test-helpers';
import userEvent from '@testing-library/user-event';
import { setupServer } from 'msw/node';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import type { SetupServer } from 'msw/node';
import { SWRConfig } from 'swr';
import AddressInput from './address-input';
@@ -30,8 +30,8 @@ describe('AddressInput', () => {
let server: SetupServer;
before(() => {
server = setupServer(
- rest.post(LOCATIONS_URL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
- rest.post(ADDRESSES_URL, (_req, res, ctx) => res(ctx.json(DEFAULT_RESPONSE))),
+ http.post(LOCATIONS_URL, () => HttpResponse.json([{ name: 'Baltimore' }])),
+ http.post(ADDRESSES_URL, () => HttpResponse.json(DEFAULT_RESPONSE)),
);
server.listen();
});
diff --git a/app/javascript/packages/address-search/components/full-address-search.spec.tsx b/app/javascript/packages/address-search/components/full-address-search.spec.tsx
index 94be94460d6..4e7fb767dff 100644
--- a/app/javascript/packages/address-search/components/full-address-search.spec.tsx
+++ b/app/javascript/packages/address-search/components/full-address-search.spec.tsx
@@ -3,7 +3,7 @@ import sinon from 'sinon';
import { useSandbox } from '@18f/identity-test-helpers';
import userEvent from '@testing-library/user-event';
import { setupServer } from 'msw/node';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import type { SetupServer } from 'msw/node';
import { SWRConfig } from 'swr';
import FullAddressSearch from './full-address-search';
@@ -215,7 +215,7 @@ describe('FullAddressSearch', () => {
let server: SetupServer;
before(() => {
server = setupServer(
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
+ http.post(locationsURL, () => HttpResponse.json([{ name: 'Baltimore' }])),
);
server.listen();
});
diff --git a/app/javascript/packages/address-search/hooks/use-validated-usps-locations.spec.ts b/app/javascript/packages/address-search/hooks/use-validated-usps-locations.spec.ts
index 6f055c6fe83..d0cf0ca8e91 100644
--- a/app/javascript/packages/address-search/hooks/use-validated-usps-locations.spec.ts
+++ b/app/javascript/packages/address-search/hooks/use-validated-usps-locations.spec.ts
@@ -1,5 +1,5 @@
import { renderHook } from '@testing-library/react-hooks';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import type { SetupServer } from 'msw/node';
import useValidatedUspsLocations from './use-validated-usps-locations';
@@ -44,7 +44,7 @@ describe('useValidatedUspsLocations', () => {
beforeEach(() => {
server.resetHandlers();
- server.use(rest.post(locationsURL, (_req, res, ctx) => res(ctx.json(USPS_RESPONSE))));
+ server.use(http.post(locationsURL, () => HttpResponse.json(USPS_RESPONSE)));
});
it('returns location results', async () => {
diff --git a/app/javascript/packages/build-sass/package.json b/app/javascript/packages/build-sass/package.json
index 2941625c096..3af4876e61c 100644
--- a/app/javascript/packages/build-sass/package.json
+++ b/app/javascript/packages/build-sass/package.json
@@ -29,7 +29,7 @@
"dependencies": {
"@aduth/is-dependency": "^1.0.0",
"browserslist": "^4.22.3",
- "chokidar": "^3.5.3",
+ "chokidar": "^3.6.0",
"lightningcss": "^1.23.0",
"sass-embedded": "^1.70.0"
},
diff --git a/app/javascript/packages/document-capture/components/in-person-location-full-address-entry-post-office-search-step.spec.tsx b/app/javascript/packages/document-capture/components/in-person-location-full-address-entry-post-office-search-step.spec.tsx
index e7964cd0baa..5c4adab0d17 100644
--- a/app/javascript/packages/document-capture/components/in-person-location-full-address-entry-post-office-search-step.spec.tsx
+++ b/app/javascript/packages/document-capture/components/in-person-location-full-address-entry-post-office-search-step.spec.tsx
@@ -4,7 +4,7 @@ import userEvent from '@testing-library/user-event';
import { i18n } from '@18f/identity-i18n';
import { setupServer } from 'msw/node';
import type { SetupServer } from 'msw/node';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import { SWRConfig } from 'swr';
import { usePropertyValue } from '@18f/identity-test-helpers';
import { ComponentType } from 'react';
@@ -78,8 +78,8 @@ describe('InPersonLocationFullAddressEntryPostOfficeSearchStep', () => {
server.resetHandlers();
// todo: should we return USPS_RESPONSE here?
server.use(
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
- rest.put(locationsURL, (_req, res, ctx) => res(ctx.json({ success: true }))),
+ http.post(locationsURL, () => HttpResponse.json([{ name: 'Baltimore' }])),
+ http.put(locationsURL, () => HttpResponse.json({ success: true })),
);
});
@@ -94,7 +94,7 @@ describe('InPersonLocationFullAddressEntryPostOfficeSearchStep', () => {
context('USPS request returns an error', () => {
beforeEach(() => {
- server.use(rest.post(locationsURL, (_req, res, ctx) => res(ctx.status(500))));
+ server.use(http.post(locationsURL, () => new HttpResponse(null, { status: 500 })));
});
it('displays a try again error message', async () => {
@@ -259,7 +259,7 @@ describe('InPersonLocationFullAddressEntryPostOfficeSearchStep', () => {
it('displays correct pluralization for multiple location results', async () => {
server.resetHandlers();
- server.use(rest.post(locationsURL, (_req, res, ctx) => res(ctx.json(USPS_RESPONSE))));
+ server.use(http.post(locationsURL, () => HttpResponse.json(USPS_RESPONSE)));
const { findByLabelText, findByText } = render(
,
{ wrapper },
diff --git a/app/javascript/packages/document-capture/components/in-person-location-post-office-search-step.spec.tsx b/app/javascript/packages/document-capture/components/in-person-location-post-office-search-step.spec.tsx
index aa4e9e64582..8a3d6155bda 100644
--- a/app/javascript/packages/document-capture/components/in-person-location-post-office-search-step.spec.tsx
+++ b/app/javascript/packages/document-capture/components/in-person-location-post-office-search-step.spec.tsx
@@ -4,7 +4,7 @@ import userEvent from '@testing-library/user-event';
import { i18n } from '@18f/identity-i18n';
import { usePropertyValue } from '@18f/identity-test-helpers';
import { setupServer } from 'msw/node';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import type { SetupServer } from 'msw/node';
import { SWRConfig } from 'swr';
import { ComponentType } from 'react';
@@ -96,9 +96,7 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
context('initial ArcGIS API request throws an error', () => {
beforeEach(() => {
- server.use(
- rest.post(addressSearchURL, (_req, res, ctx) => res(ctx.json([]), ctx.status(422))),
- );
+ server.use(http.post(addressSearchURL, () => HttpResponse.json([], { status: 422 })));
});
it('displays a try again error message', async () => {
@@ -124,10 +122,8 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
context('initial USPS API request throws an error', () => {
beforeEach(() => {
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(ctx.json(DEFAULT_RESPONSE), ctx.status(200)),
- ),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.status(500))),
+ http.post(addressSearchURL, () => HttpResponse.json(DEFAULT_RESPONSE)),
+ http.post(locationsURL, () => new HttpResponse(null, { status: 500 })),
);
});
@@ -154,10 +150,8 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
context('initial API request is successful', () => {
beforeEach(() => {
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(ctx.json(DEFAULT_RESPONSE), ctx.status(200)),
- ),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
+ http.post(addressSearchURL, () => HttpResponse.json(DEFAULT_RESPONSE)),
+ http.post(locationsURL, () => HttpResponse.json([{ name: 'Baltimore' }])),
);
});
@@ -273,10 +267,8 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
it('displays correct pluralization for multiple location results', async () => {
server.resetHandlers();
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(ctx.json(DEFAULT_RESPONSE), ctx.status(200)),
- ),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json(MULTI_LOCATION_RESPONSE))),
+ http.post(addressSearchURL, () => HttpResponse.json(DEFAULT_RESPONSE)),
+ http.post(locationsURL, () => HttpResponse.json(MULTI_LOCATION_RESPONSE)),
);
const { findByLabelText, findByText } = render(
,
@@ -303,10 +295,8 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
context('subsequent network failures clear results', () => {
beforeEach(() => {
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(ctx.json(DEFAULT_RESPONSE), ctx.status(200)),
- ),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
+ http.post(addressSearchURL, () => HttpResponse.json(DEFAULT_RESPONSE)),
+ http.post(locationsURL, () => HttpResponse.json([{ name: 'Baltimore' }])),
);
});
@@ -328,25 +318,22 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
expect(result).to.exist();
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(
- ctx.json([
- {
- address: '500 Main St E, Bronwood, Georgia, 39826',
- location: {
- latitude: 31.831686000000005,
- longitude: -84.363768,
- },
- street_address: '500 Main St E',
- city: 'Bronwood',
- state: 'GA',
- zip_code: '39826',
+ http.post(addressSearchURL, () =>
+ HttpResponse.json([
+ {
+ address: '500 Main St E, Bronwood, Georgia, 39826',
+ location: {
+ latitude: 31.831686000000005,
+ longitude: -84.363768,
},
- ]),
- ctx.status(200),
- ),
+ street_address: '500 Main St E',
+ city: 'Bronwood',
+ state: 'GA',
+ zip_code: '39826',
+ },
+ ]),
),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.status(500))),
+ http.post(locationsURL, () => new HttpResponse(null, { status: 500 })),
);
await userEvent.type(
@@ -365,11 +352,9 @@ describe('InPersonLocationPostOfficeSearchStep', () => {
context('user deletes text from searchbox after location results load', () => {
beforeEach(() => {
server.use(
- rest.post(addressSearchURL, (_req, res, ctx) =>
- res(ctx.json(DEFAULT_RESPONSE), ctx.status(200)),
- ),
- rest.post(locationsURL, (_req, res, ctx) => res(ctx.json([{ name: 'Baltimore' }]))),
- rest.put(locationsURL, (_req, res, ctx) => res(ctx.json({ success: true }))),
+ http.post(addressSearchURL, () => HttpResponse.json(DEFAULT_RESPONSE)),
+ http.post(locationsURL, () => HttpResponse.json([{ name: 'Baltimore' }])),
+ http.put(locationsURL, () => HttpResponse.json({ success: true })),
);
});
diff --git a/app/javascript/packages/manageable-authenticator/manageable-authenticator-element.spec.ts b/app/javascript/packages/manageable-authenticator/manageable-authenticator-element.spec.ts
index 16094f50b2f..3489537ed05 100644
--- a/app/javascript/packages/manageable-authenticator/manageable-authenticator-element.spec.ts
+++ b/app/javascript/packages/manageable-authenticator/manageable-authenticator-element.spec.ts
@@ -1,7 +1,7 @@
import quibble from 'quibble';
import { screen, waitFor } from '@testing-library/dom';
import baseUserEvent from '@testing-library/user-event';
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import type { SetupServer } from 'msw/node';
import type { SinonStub } from 'sinon';
@@ -226,11 +226,7 @@ describe('ManageableAuthenticatorElement', () => {
context('successful response from server when submitting rename', () => {
beforeEach(() => {
- server.use(
- rest.put('/api/manage', (_req, res, ctx) =>
- res(ctx.json({ success: true }), ctx.status(200)),
- ),
- );
+ server.use(http.put('/api/manage', () => HttpResponse.json({ success: true })));
});
it('returns the user to summary details with new name for successful save', async () => {
@@ -278,9 +274,7 @@ describe('ManageableAuthenticatorElement', () => {
context('failed response from server when submitting rename', () => {
beforeEach(() => {
server.use(
- rest.put('/api/manage', (_req, res, ctx) =>
- res(ctx.json({ error: 'Uh oh!' }), ctx.status(400)),
- ),
+ http.put('/api/manage', () => HttpResponse.json({ error: 'Uh oh!' }, { status: 400 })),
);
});
@@ -360,11 +354,7 @@ describe('ManageableAuthenticatorElement', () => {
context('successful response from server when deleting', () => {
beforeEach(() => {
- server.use(
- rest.delete('/api/manage', (_req, res, ctx) =>
- res(ctx.json({ success: true }), ctx.status(200)),
- ),
- );
+ server.use(http.delete('/api/manage', () => HttpResponse.json({ success: true })));
});
it('deletes the authenticator and displays a confirmation message', async () => {
@@ -395,9 +385,7 @@ describe('ManageableAuthenticatorElement', () => {
context('failed response from server when deleting', () => {
beforeEach(() => {
server.use(
- rest.delete('/api/manage', (_req, res, ctx) =>
- res(ctx.json({ error: 'Uh oh!' }), ctx.status(400)),
- ),
+ http.delete('/api/manage', () => HttpResponse.json({ error: 'Uh oh!' }, { status: 400 })),
);
});
diff --git a/app/javascript/packages/session/requests.spec.ts b/app/javascript/packages/session/requests.spec.ts
index f2d078bb59f..2793584b50a 100644
--- a/app/javascript/packages/session/requests.spec.ts
+++ b/app/javascript/packages/session/requests.spec.ts
@@ -1,4 +1,4 @@
-import { rest } from 'msw';
+import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import type { SetupServer } from 'msw/node';
import { SESSIONS_URL, requestSessionStatus, extendSession } from './requests';
@@ -10,8 +10,8 @@ describe('requestSessionStatus', () => {
context('session inactive', () => {
before(() => {
server = setupServer(
- rest.get<{}, {}, SessionTimedOutStatusResponse>(SESSIONS_URL, (_req, res, ctx) =>
- res(ctx.json({ live: false, timeout: null })),
+ http.get<{}, {}, SessionTimedOutStatusResponse>(SESSIONS_URL, () =>
+ HttpResponse.json({ live: false, timeout: null }),
),
);
server.listen();
@@ -34,8 +34,8 @@ describe('requestSessionStatus', () => {
before(() => {
timeout = new Date(Date.now() + 1000).toISOString();
server = setupServer(
- rest.get<{}, {}, SessionLiveStatusResponse>(SESSIONS_URL, (_req, res, ctx) =>
- res(ctx.json({ live: true, timeout })),
+ http.get<{}, {}, SessionLiveStatusResponse>(SESSIONS_URL, () =>
+ HttpResponse.json({ live: true, timeout }),
),
);
server.listen();
@@ -55,7 +55,7 @@ describe('requestSessionStatus', () => {
context('server responds with 401', () => {
before(() => {
server = setupServer(
- rest.get<{}, {}>(SESSIONS_URL, (_req, res, ctx) => res(ctx.status(401))),
+ http.get<{}, {}>(SESSIONS_URL, () => new HttpResponse(null, { status: 401 })),
);
server.listen();
});
@@ -74,7 +74,7 @@ describe('requestSessionStatus', () => {
context('server responds with 500', () => {
before(() => {
server = setupServer(
- rest.get<{}, {}>(SESSIONS_URL, (_req, res, ctx) => res(ctx.status(500))),
+ http.get<{}, {}>(SESSIONS_URL, () => new HttpResponse(null, { status: 500 })),
);
server.listen();
});
@@ -97,8 +97,8 @@ describe('extendSession', () => {
before(() => {
server = setupServer(
- rest.put<{}, {}, SessionLiveStatusResponse>(SESSIONS_URL, (_req, res, ctx) =>
- res(ctx.json({ live: true, timeout })),
+ http.put<{}, {}, SessionLiveStatusResponse>(SESSIONS_URL, () =>
+ HttpResponse.json({ live: true, timeout }),
),
);
server.listen();
@@ -118,7 +118,7 @@ describe('extendSession', () => {
context('server responds with 401', () => {
before(() => {
server = setupServer(
- rest.put<{}, {}>(SESSIONS_URL, (_req, res, ctx) => res(ctx.status(401))),
+ http.put<{}, {}>(SESSIONS_URL, () => new HttpResponse(null, { status: 401 })),
);
server.listen();
});
@@ -137,7 +137,7 @@ describe('extendSession', () => {
context('server responds with 500', () => {
before(() => {
server = setupServer(
- rest.put<{}, {}>(SESSIONS_URL, (_req, res, ctx) => res(ctx.status(500))),
+ http.put<{}, {}>(SESSIONS_URL, () => new HttpResponse(null, { status: 500 })),
);
server.listen();
});
diff --git a/app/javascript/packages/stylelint-config/CHANGELOG.md b/app/javascript/packages/stylelint-config/CHANGELOG.md
index 0f30db00501..58b43111e43 100644
--- a/app/javascript/packages/stylelint-config/CHANGELOG.md
+++ b/app/javascript/packages/stylelint-config/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 4.0.0
+
+### Breaking Changes
+
+- Breaking changes included in updated dependencies:
+ - Dropped support for `stylelint` versions below `v16.0.2`.
+ - Dropped support for Node.js versions below `v18.12.0`.
+ - For full details, refer to release notes for affected dependencies:
+ - [`stylelint-prettier`](https://github.com/prettier/stylelint-prettier/blob/main/CHANGELOG.md)
+ - [`stylelint-config-recommended-scss`](https://github.com/stylelint-scss/stylelint-config-recommended-scss/blob/master/CHANGELOG.md)
+ - [`stylelint-scss`](https://github.com/stylelint-scss/stylelint-scss/blob/master/CHANGELOG.md)
+ - [`stylelint-config-recommended`](https://github.com/stylelint/stylelint-config-recommended/blob/main/CHANGELOG.md)
+
## 3.0.0
### Breaking Changes
diff --git a/app/javascript/packages/stylelint-config/package.json b/app/javascript/packages/stylelint-config/package.json
index 62cefac4729..2a7c76beb72 100644
--- a/app/javascript/packages/stylelint-config/package.json
+++ b/app/javascript/packages/stylelint-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@18f/identity-stylelint-config",
- "version": "3.0.0",
+ "version": "4.0.0",
"private": false,
"description": "Stylelint shareable configuration for Login.gov CSS/SASS standards",
"repository": {
@@ -17,12 +17,12 @@
},
"homepage": "https://github.com/18f/identity-idp",
"dependencies": {
- "stylelint-config-recommended-scss": "^13.1.0",
- "stylelint-prettier": "^4.0.2"
+ "stylelint-config-recommended-scss": "^14.0.0",
+ "stylelint-prettier": "^5.0.0"
},
"peerDependencies": {
"prettier": ">=3.0.0",
- "stylelint": ">=15.10.0"
+ "stylelint": ">=16.0.2"
},
"sideEffects": false
}
diff --git a/app/models/federated_protocols/saml.rb b/app/models/federated_protocols/saml.rb
index 7659d466abd..1187b133d36 100644
--- a/app/models/federated_protocols/saml.rb
+++ b/app/models/federated_protocols/saml.rb
@@ -9,7 +9,11 @@ def issuer
end
def ial
- request.requested_ial_authn_context || default_authn_context
+ if ialmax_requested_with_authn_context_comparison?
+ ::Saml::Idp::Constants::IALMAX_AUTHN_CONTEXT_CLASSREF
+ else
+ request.requested_ial_authn_context || default_authn_context
+ end
end
def aal
@@ -54,5 +58,29 @@ def current_service_provider
return @current_service_provider if defined?(@current_service_provider)
@current_service_provider = ServiceProvider.find_by(issuer: issuer)
end
+
+ ##
+ # A ServiceProvider can request an IAL authn context with a mimimum context comparison . In this
+ # case the IdP is expected to return a result with that IAL or a higher one.
+ #
+ # If a SP requests IAL1 with the mimium context comparison then the IdP can response with a
+ # IAL2 response. In order for this to happen the following need to be true:
+ #
+ # - The service provider is authorized to make IAL2 requests
+ # - The user has a verified account
+ #
+ # This methods checks that we are in a situation where the authn context comparison situation
+ # described above exists and the SP requirements are met (the requirement that the user is
+ # verified occurs as part of the IALMax functionality).
+ #
+ def ialmax_requested_with_authn_context_comparison?
+ return unless (current_service_provider&.ial || 1) > 1
+
+ acr_component_value = Vot::LegacyComponentValues.by_name[request.requested_ial_authn_context]
+ return unless acr_component_value.present?
+
+ !acr_component_value.requirements.include?(:identity_proofing) &&
+ request.requested_authn_context_comparison == 'minimum'
+ end
end
end
diff --git a/app/presenters/saml_request_presenter.rb b/app/presenters/saml_request_presenter.rb
index 7b8833f30cc..32f1433409b 100644
--- a/app/presenters/saml_request_presenter.rb
+++ b/app/presenters/saml_request_presenter.rb
@@ -41,7 +41,8 @@ def ial2_authn_context?
end
def ialmax_authn_context?
- ial_context.ialmax_requested?
+ ial_acr_value = FederatedProtocols::Saml.new(request).ial
+ Vot::LegacyComponentValues.by_name[ial_acr_value]&.requirements&.include?(:ialmax)
end
def authn_context
@@ -52,7 +53,6 @@ def ial_context
@ial_context ||= IalContext.new(
ial: request.requested_ial_authn_context || default_ial_context,
service_provider: service_provider,
- authn_context_comparison: request.requested_authn_context_comparison,
)
end
diff --git a/app/services/analytics_events.rb b/app/services/analytics_events.rb
index ff382d0c375..1f42066a428 100644
--- a/app/services/analytics_events.rb
+++ b/app/services/analytics_events.rb
@@ -353,7 +353,6 @@ def edit_password_visit
# @param [String] user_id
# @param [Boolean] user_locked_out if the user is currently locked out of their second factor
# @param [String] bad_password_count represents number of prior login failures
- # @param [String] stored_location the URL to return to after signing in
# @param [Boolean] sp_request_url_present if was an SP request URL in the session
# @param [Boolean] remember_device if the remember device cookie was present
# Tracks authentication attempts at the email/password screen
@@ -362,7 +361,6 @@ def email_and_password_auth(
user_id:,
user_locked_out:,
bad_password_count:,
- stored_location:,
sp_request_url_present:,
remember_device:,
**extra
@@ -373,7 +371,6 @@ def email_and_password_auth(
user_id: user_id,
user_locked_out: user_locked_out,
bad_password_count: bad_password_count,
- stored_location: stored_location,
sp_request_url_present: sp_request_url_present,
remember_device: remember_device,
**extra,
@@ -4365,15 +4362,9 @@ def session_total_duration_timeout
end
# @param [String] flash
- # @param [String] stored_location
# tracks when a user visits the sign in page
- def sign_in_page_visit(flash:, stored_location:, **extra)
- track_event(
- 'Sign in page visited',
- flash: flash,
- stored_location: stored_location,
- **extra,
- )
+ def sign_in_page_visit(flash:, **extra)
+ track_event('Sign in page visited', flash:, **extra)
end
# @param [Boolean] success
diff --git a/app/services/attribute_asserter.rb b/app/services/attribute_asserter.rb
index d55d0322c5a..b1238b4d091 100644
--- a/app/services/attribute_asserter.rb
+++ b/app/services/attribute_asserter.rb
@@ -34,7 +34,7 @@ def build
attrs = default_attrs
add_email(attrs) if bundle.include? :email
add_all_emails(attrs) if bundle.include? :all_emails
- add_bundle(attrs) if user.active_profile.present? && ial_context.ial2_or_greater?
+ add_bundle(attrs) if should_add_proofed_attributes?
add_verified_at(attrs) if bundle.include?(:verified_at) && ial_context.ial2_service_provider?
add_aal(attrs)
add_ial(attrs) if authn_request.requested_ial_authn_context || !service_provider.ial.nil?
@@ -51,12 +51,21 @@ def build
:decrypted_pii,
:user_session
+ def should_add_proofed_attributes?
+ return false if !user.active_profile.present?
+ ial_context.ial2_or_greater? || ial_max_requested?
+ end
+
+ def ial_max_requested?
+ ial_acr_value = FederatedProtocols::Saml.new(authn_request).ial
+ Vot::LegacyComponentValues.by_name[ial_acr_value]&.requirements&.include?(:ialmax)
+ end
+
def ial_context
@ial_context ||= IalContext.new(
ial: authn_context,
service_provider: service_provider,
user: user,
- authn_context_comparison: authn_request&.requested_authn_context_comparison,
)
end
@@ -126,14 +135,19 @@ def add_aal(attrs)
def add_ial(attrs)
requested_context = authn_request.requested_ial_authn_context
- context = if ial_context.ialmax_requested? && ial_context.ial2_requested?
- sp_ial # IAL2 since IALMAX only works for IAL2 SPs
+ context = if ialmax_requested_and_fullfilable?
+ # IAL2 since IALMAX only works for IAL2 SPs
+ sp_ial
else
requested_context.presence || sp_ial
end
attrs[:ial] = { getter: ial_getter_function(context) } if context
end
+ def ialmax_requested_and_fullfilable?
+ ial_max_requested? && user.active_profile.present?
+ end
+
def sp_ial
Saml::Idp::Constants::AUTHN_CONTEXT_IAL_TO_CLASSREF[service_provider.ial]
end
diff --git a/app/services/doc_auth/lexis_nexis/requests/true_id_request.rb b/app/services/doc_auth/lexis_nexis/requests/true_id_request.rb
index aa4e1e49ec6..bfe0213e211 100644
--- a/app/services/doc_auth/lexis_nexis/requests/true_id_request.rb
+++ b/app/services/doc_auth/lexis_nexis/requests/true_id_request.rb
@@ -23,6 +23,12 @@ def initialize(
@liveness_checking_required = liveness_checking_required
end
+ def request_context
+ {
+ workflow: workflow,
+ }
+ end
+
private
def body
@@ -43,6 +49,7 @@ def handle_http_response(http_response)
http_response,
config,
include_liveness?,
+ request_context,
)
end
diff --git a/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb b/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb
index bfa3acb7a82..aa68c94268d 100644
--- a/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb
+++ b/app/services/doc_auth/lexis_nexis/responses/true_id_response.rb
@@ -11,9 +11,11 @@ class TrueIdResponse < DocAuth::Response
attr_reader :config, :http_response
- def initialize(http_response, config, liveness_checking_enabled = false)
+ def initialize(http_response, config, liveness_checking_enabled = false,
+ request_context = {})
@config = config
@http_response = http_response
+ @request_context = request_context
@liveness_checking_enabled = liveness_checking_enabled
@pii_from_doc = read_pii(true_id_product)
super(
@@ -28,7 +30,10 @@ def initialize(http_response, config, liveness_checking_enabled = false)
success: false,
errors: { network: true },
exception: e,
- extra: { backtrace: e.backtrace },
+ extra: {
+ backtrace: e.backtrace,
+ reference: reference,
+ },
)
end
@@ -191,6 +196,7 @@ def basic_logging_info
reference: reference,
vendor: 'TrueID',
billed: billed?,
+ workflow: @request_context&.dig(:workflow),
}
end
diff --git a/app/services/doc_auth/mock/result_response.rb b/app/services/doc_auth/mock/result_response.rb
index 52bd4699761..b1778865ada 100644
--- a/app/services/doc_auth/mock/result_response.rb
+++ b/app/services/doc_auth/mock/result_response.rb
@@ -23,6 +23,7 @@ def initialize(uploaded_file, config, selfie_required = false)
portrait_match_results: portrait_match_results,
billed: true,
classification_info: classification_info,
+ workflow: workflow,
liveness_checking_required: @selfie_required,
}.compact,
)
@@ -148,6 +149,10 @@ def selfie_status
end
end
+ def workflow
+ selfie_check_performed? ? 'test_liveness_workflow' : 'test_non_liveness_workflow'
+ end
+
private
def parsed_alerts
diff --git a/app/services/frontend_error_logger.rb b/app/services/frontend_error_logger.rb
index fd5a08ae8c5..d292ab2a57a 100644
--- a/app/services/frontend_error_logger.rb
+++ b/app/services/frontend_error_logger.rb
@@ -2,6 +2,8 @@ class FrontendErrorLogger
class FrontendError < StandardError; end
def self.track_error(name:, message:, stack:, filename:)
+ return unless FrontendErrorForm.new.submit(filename:).success?
+
NewRelic::Agent.notice_error(
FrontendError.new,
expected: true,
diff --git a/app/services/ial_context.rb b/app/services/ial_context.rb
index ceeed8c283c..a0db10a9727 100644
--- a/app/services/ial_context.rb
+++ b/app/services/ial_context.rb
@@ -2,16 +2,15 @@
# Wraps up logic for querying the IAL level of an authorization request
class IalContext
- attr_reader :ial, :service_provider, :user, :authn_context_comparison
+ attr_reader :ial, :service_provider, :user
# @param ial [String, Integer] IAL level as either an integer (see ::Idp::Constants::IAL2, etc)
# or a string see Saml::Idp::Constants contexts
# @param service_provider [ServiceProvider, nil]
- def initialize(ial:, service_provider:, user: nil, authn_context_comparison: nil)
- @authn_context_comparison = authn_context_comparison
+ def initialize(ial:, service_provider:, user: nil)
@service_provider = service_provider
@user = user
- @ial = int_ial(ial)
+ @ial = convert_ial_to_int(ial)
end
def ial2_service_provider?
@@ -44,19 +43,6 @@ def ial2_or_greater?
private
- def int_ial(input)
- return 0 if saml_ialmax?(input)
-
- convert_ial_to_int(input)
- end
-
- def saml_ialmax?(input)
- int_ial_from_request = convert_ial_to_int(input)
- return false unless int_ial_from_request.present?
-
- service_provider&.ial == 2 && authn_context_comparison == 'minimum' && int_ial_from_request < 2
- end
-
def convert_ial_to_int(input)
Integer(input)
rescue TypeError # input was nil
diff --git a/app/services/identity_linker.rb b/app/services/identity_linker.rb
index 388524abf97..75a7e4b50dc 100644
--- a/app/services/identity_linker.rb
+++ b/app/services/identity_linker.rb
@@ -6,6 +6,8 @@ def initialize(user, service_provider)
@service_provider = service_provider
@ial = nil
@aal = nil
+ @acr_values = nil
+ @vtr = nil
@requested_aal_value = nil
end
@@ -13,6 +15,8 @@ def link_identity(
code_challenge: nil,
ial: nil,
aal: nil,
+ acr_values: nil,
+ vtr: nil,
requested_aal_value: nil,
nonce: nil,
rails_session_id: nil,
@@ -30,6 +34,8 @@ def link_identity(
code_challenge: code_challenge,
ial: ial,
aal: aal,
+ acr_values: acr_values,
+ vtr: vtr,
requested_aal_value: requested_aal_value,
nonce: nonce,
rails_session_id: rails_session_id,
diff --git a/app/services/vot/parser.rb b/app/services/vot/parser.rb
index 5f9eeffde03..95e162c498e 100644
--- a/app/services/vot/parser.rb
+++ b/app/services/vot/parser.rb
@@ -21,6 +21,10 @@ def self.no_sp_result
ialmax?: false,
)
end
+
+ def identity_proofing_or_ialmax?
+ identity_proofing? || ialmax?
+ end
end
attr_reader :vector_of_trust, :acr_values
diff --git a/bin/oncall/email-deliveries b/bin/oncall/email-deliveries
index 486f489bd00..2be5c445f9b 100755
--- a/bin/oncall/email-deliveries
+++ b/bin/oncall/email-deliveries
@@ -6,6 +6,7 @@ Dir.chdir(__dir__) { require 'bundler/setup' }
require 'active_support'
require 'active_support/core_ext/enumerable' # index_by
require 'active_support/core_ext/integer/time'
+require 'active_support/core_ext/string/access'
require 'optparse'
require 'terminal-table'
@@ -60,14 +61,15 @@ class EmailDeliveries
results = query_data(uuids)
table = Terminal::Table.new
- table << %w[user_id timestamp message_id email_action events]
+ table << %w[user_id email_address_id timestamp message_id email_action events]
table << :separator
results.each do |result|
table << [
result.user_id,
+ result.email_address_id,
result.timestamp,
- result.message_id,
+ result.message_id.reverse.truncate(27).reverse,
result.email_action,
result.events.join(', '),
]
@@ -78,6 +80,7 @@ class EmailDeliveries
Result = Struct.new(
:user_id,
+ :email_address_id,
:timestamp,
:message_id,
:email_action,
@@ -93,6 +96,7 @@ class EmailDeliveries
fields
@timestamp
, properties.user_id AS user_id
+ , properties.event_properties.email_address_id AS email_address_id
, properties.event_properties.ses_message_id AS ses_message_id
, properties.event_properties.action AS email_action
| filter name = 'Email Sent'
@@ -127,6 +131,7 @@ class EmailDeliveries
map do |message_id, events|
Result.new(
user_id: events_by_message_id[message_id]['user_id'],
+ email_address_id: events_by_message_id[message_id]['email_address_id'],
email_action: events_by_message_id[message_id]['email_action'],
timestamp: events_by_message_id[message_id]['@timestamp'],
message_id: message_id,
diff --git a/lib/cleanup/destroyable_records.rb b/lib/cleanup/destroyable_records.rb
index 47746e7ba6b..a329b1a3cd9 100644
--- a/lib/cleanup/destroyable_records.rb
+++ b/lib/cleanup/destroyable_records.rb
@@ -26,7 +26,7 @@ def print_data
stdout.puts '********'
stdout.puts 'Integration:'
- if integration.blank?
+ if integration.nil?
stdout.puts 'No associated integration'
else
stdout.puts integration.attributes.to_yaml
@@ -58,15 +58,14 @@ def print_data
end
def destroy_records
- stdout.puts 'Destroying integration usages'
- integration_usages.each do |integration_usage|
- integration_usage.destroy!
+ if integration.present?
+ stdout.puts 'Destroying integration usages'
+ integration_usages.destroy_all
+ integration.reload
+ stdout.puts "Destroying integration with issuer #{integration.issuer}"
+ integration.destroy!
+ service_provider.reload
end
- integration.reload
-
- stdout.puts "Destroying integration with issuer #{integration.issuer}"
- integration.destroy!
- service_provider.reload
stdout.puts "Destroying service provider issuer #{service_provider.issuer}"
service_provider.destroy!
@@ -79,11 +78,11 @@ def destroy_records
private
def integration_usages
- integration&.integration_usages || []
+ integration&.integration_usages
end
def iaa_orders
- integration&.iaa_orders || []
+ integration&.iaa_orders
end
def in_person_enrollments
diff --git a/package.json b/package.json
index 2fba5d67906..b6af7717477 100644
--- a/package.json
+++ b/package.json
@@ -81,13 +81,13 @@
"jsdom": "^22.1.0",
"mocha": "^10.0.0",
"mq-polyfill": "^1.1.8",
- "msw": "^1.3.2",
+ "msw": "^2.2.1",
"prettier": "^3.1.0",
"quibble": "^0.9.1",
"react-test-renderer": "^17.0.2",
"sinon": "^14.0.0",
"sinon-chai": "^3.7.0",
- "stylelint": "^15.10.1",
+ "stylelint": "^16.2.1",
"svgo": "^3.2.0",
"swr": "^2.0.0",
"typescript": "^5.2.2",
diff --git a/spec/bin/oncall/email-deliveries_spec.rb b/spec/bin/oncall/email-deliveries_spec.rb
index 136506978e4..3892c4de863 100644
--- a/spec/bin/oncall/email-deliveries_spec.rb
+++ b/spec/bin/oncall/email-deliveries_spec.rb
@@ -58,8 +58,8 @@
# rubocop:disable Layout/LineLength
let(:events_log) do
[
- { '@timestamp' => '2023-01-01 00:00:01', 'user_id' => 'abc123', 'email_action' => 'forgot_password', 'ses_message_id' => 'message-1' },
- { '@timestamp' => '2023-01-01 00:00:02', 'user_id' => 'def456', 'email_action' => 'forgot_password', 'ses_message_id' => 'message-2' },
+ { '@timestamp' => '2023-01-01 00:00:01', 'user_id' => 'abc123', 'email_action' => 'forgot_password', 'ses_message_id' => 'message-1', 'email_address_id' => '1' },
+ { '@timestamp' => '2023-01-01 00:00:02', 'user_id' => 'def456', 'email_action' => 'forgot_password', 'ses_message_id' => 'message-2', 'email_address_id' => '2' },
]
end
@@ -80,9 +80,9 @@
expect(table).to eq(
[
- ['user_id', 'timestamp', 'message_id', 'email_action', 'events'],
- ['abc123', '2023-01-01 00:00:01', 'message-1', 'forgot_password', 'Send, Delivery'],
- ['def456', '2023-01-01 00:00:02', 'message-2', 'forgot_password',
+ ['user_id', 'email_address_id', 'timestamp', 'message_id', 'email_action', 'events'],
+ ['abc123', '1', '2023-01-01 00:00:01', 'message-1', 'forgot_password', 'Send, Delivery'],
+ ['def456', '2', '2023-01-01 00:00:02', 'message-2', 'forgot_password',
'Send, Bounce-Transient-MailboxFull'],
],
)
diff --git a/spec/controllers/concerns/billable_event_trackable_spec.rb b/spec/controllers/concerns/billable_event_trackable_spec.rb
index f8cc8f9bc4b..a7ee097981e 100644
--- a/spec/controllers/concerns/billable_event_trackable_spec.rb
+++ b/spec/controllers/concerns/billable_event_trackable_spec.rb
@@ -9,7 +9,7 @@
:request_id,
:user_session,
:sp_session,
- :sp_session_ial,
+ :resolved_authn_context_result,
:session,
) do
include BillableEventTrackable
@@ -33,7 +33,7 @@
current_user:,
request_id:,
user_session: {},
- sp_session_ial: 1,
+ resolved_authn_context_result: double(identity_proofing?: false),
sp_session: {
issuer: current_sp.issuer,
},
diff --git a/spec/controllers/frontend_log_controller_spec.rb b/spec/controllers/frontend_log_controller_spec.rb
index 9ca398cedbb..35f4aed8324 100644
--- a/spec/controllers/frontend_log_controller_spec.rb
+++ b/spec/controllers/frontend_log_controller_spec.rb
@@ -206,6 +206,8 @@
end
it 'notices the error to NewRelic instead of analytics logger' do
+ allow_any_instance_of(FrontendErrorForm).to receive(:submit).
+ and_return(FormResponse.new(success: true))
expect(fake_analytics).not_to receive(:track_event)
expect(NewRelic::Agent).to receive(:notice_error).with(
FrontendErrorLogger::FrontendError.new,
diff --git a/spec/controllers/idv/image_uploads_controller_spec.rb b/spec/controllers/idv/image_uploads_controller_spec.rb
index b47ac427b08..4a45e0ed0c8 100644
--- a/spec/controllers/idv/image_uploads_controller_spec.rb
+++ b/spec/controllers/idv/image_uploads_controller_spec.rb
@@ -461,6 +461,7 @@
transaction_reason_code: nil,
transaction_status: nil,
vendor: nil,
+ workflow: an_instance_of(String),
)
expect(@analytics).to receive(:track_event).with(
@@ -1218,6 +1219,7 @@
transaction_reason_code: nil,
transaction_status: nil,
vendor: nil,
+ workflow: an_instance_of(String),
)
action
diff --git a/spec/controllers/idv/personal_key_controller_spec.rb b/spec/controllers/idv/personal_key_controller_spec.rb
index 93e919f8665..14b335d22b3 100644
--- a/spec/controllers/idv/personal_key_controller_spec.rb
+++ b/spec/controllers/idv/personal_key_controller_spec.rb
@@ -45,6 +45,8 @@ def assert_personal_key_generated_for_profiles(*profile_pii_pairs)
let(:threatmetrix_review_status) { nil }
+ let(:pii_cacher) { Pii::Cacher.new(user, controller.user_session) }
+
before do
stub_analytics
stub_attempts_tracker
@@ -190,6 +192,18 @@ def assert_personal_key_generated_for_profiles(*profile_pii_pairs)
end
describe '#show' do
+ context 'when we have no personal key or encrypted profiles in the session' do
+ it 'redirects to get the users password and fetch the PII' do
+ controller.idv_session.personal_key = nil
+ controller.user_session[:encrypted_profiles] = nil
+
+ response = get :show
+
+ expect(controller.user_session[:stored_location]).to eq(idv_personal_key_path)
+ expect(response).to redirect_to(capture_password_path)
+ end
+ end
+
context 'profile has been created from idv_session' do
it 'does not redirect' do
get :show
@@ -215,8 +229,17 @@ def assert_personal_key_generated_for_profiles(*profile_pii_pairs)
end
context 'but a profile is pending from a different session' do
+ before { pii_cacher.save(password, pending_profile) }
+
context 'due to fraud review' do
- let!(:pending_profile) { create(:profile, :fraud_review_pending, user: user) }
+ let!(:pending_profile) do
+ create(
+ :profile,
+ :fraud_review_pending,
+ :with_pii,
+ user: user,
+ )
+ end
it 'does not redirect' do
get :show
@@ -225,7 +248,14 @@ def assert_personal_key_generated_for_profiles(*profile_pii_pairs)
end
context 'due to in person proofing' do
- let!(:pending_profile) { create(:profile, :in_person_verification_pending, user: user) }
+ let!(:pending_profile) do
+ create(
+ :profile,
+ :in_person_verification_pending,
+ :with_pii,
+ user: user,
+ )
+ end
it 'does not redirect' do
get :show
@@ -389,7 +419,7 @@ def assert_personal_key_generated_for_profiles(*profile_pii_pairs)
describe '#update' do
context 'user selected phone verification' do
it 'redirects to sign up completed for an sp' do
- subject.session[:sp] = { ial2: true }
+ subject.session[:sp] = { issuer: create(:service_provider).issuer }
patch :update
expect(response).to redirect_to sign_up_completed_url
diff --git a/spec/controllers/idv_controller_spec.rb b/spec/controllers/idv_controller_spec.rb
index 03cf1467c77..ca92d38cd8c 100644
--- a/spec/controllers/idv_controller_spec.rb
+++ b/spec/controllers/idv_controller_spec.rb
@@ -194,13 +194,13 @@
describe 'SP for IdV requirement' do
let(:current_sp) { create(:service_provider) }
- let(:ial) { 2 }
+ let(:acr_values) { Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF }
let(:user) { build(:user, password: ControllerHelper::VALID_PASSWORD) }
before do
stub_sign_in(user)
if current_sp.present?
- session[:sp] = { issuer: current_sp.issuer, ial: ial }
+ session[:sp] = { issuer: current_sp.issuer, acr_values: acr_values }
else
session[:sp] = {}
end
@@ -237,7 +237,7 @@
end
context 'with an SP context that does not require IdV' do
- let(:ial) { 1 }
+ let(:acr_values) { Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF }
context 'when an SP is required' do
let(:idv_sp_required) { true }
@@ -266,7 +266,7 @@
end
context 'with an SP context that requires IdV' do
- let(:ial) { 2 }
+ let(:acr_values) { Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF }
context 'when an SP is required' do
let(:idv_sp_required) { true }
diff --git a/spec/controllers/sign_up/completions_controller_spec.rb b/spec/controllers/sign_up/completions_controller_spec.rb
index bc6fe2fc3f4..17d953e9c5b 100644
--- a/spec/controllers/sign_up/completions_controller_spec.rb
+++ b/spec/controllers/sign_up/completions_controller_spec.rb
@@ -17,6 +17,7 @@
stub_sign_in(user)
subject.session[:sp] = {
issuer: current_sp.issuer,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
}
get :show
@@ -31,7 +32,7 @@
stub_sign_in(user)
subject.session[:sp] = {
issuer: current_sp.issuer,
- ial2: false,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
requested_attributes: [:email],
request_url: 'http://localhost:3000',
}
@@ -42,7 +43,7 @@
expect(@analytics).to have_received(:track_event).with(
'User registration: agency handoff visited',
ial2: false,
- ialmax: nil,
+ ialmax: false,
service_provider_name: subject.decorated_sp_session.sp_name,
page_occurence: '',
needs_completion_screen_reason: :new_sp,
@@ -67,7 +68,7 @@
stub_sign_in(user)
subject.session[:sp] = {
issuer: current_sp.issuer,
- ial2: true,
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
requested_attributes: [:email],
request_url: 'http://localhost:3000',
}
@@ -80,7 +81,7 @@
expect(@analytics).to have_received(:track_event).with(
'User registration: agency handoff visited',
ial2: true,
- ialmax: nil,
+ ialmax: false,
service_provider_name: subject.decorated_sp_session.sp_name,
page_occurence: '',
needs_completion_screen_reason: :new_sp,
@@ -141,8 +142,7 @@
stub_sign_in(user)
subject.session[:sp] = {
issuer: current_sp.issuer,
- ial2: false,
- ialmax: true,
+ acr_values: Saml::Idp::Constants::IALMAX_AUTHN_CONTEXT_CLASSREF,
requested_attributes: [:email],
request_url: 'http://localhost:3000',
}
@@ -218,10 +218,13 @@
user = create(:user)
sp = create(:service_provider, issuer: 'https://awesome')
stub_sign_in(user)
- subject.session[:sp] = { issuer: sp.issuer,
- ial2: false,
- requested_attributes: [:email],
- request_url: 'http://localhost:3000' }
+ subject.session[:sp] = {
+ issuer: sp.issuer,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
+ requested_attributes: [:email],
+ request_url: 'http://localhost:3000',
+ }
+
get :show
expect(response).to render_template(:show)
@@ -245,7 +248,7 @@
it 'tracks analytics' do
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
issuer: 'foo',
request_url: 'http://example.com',
}
@@ -256,7 +259,7 @@
expect(@analytics).to have_received(:track_event).with(
'User registration: complete',
ial2: false,
- ialmax: nil,
+ ialmax: false,
service_provider_name: subject.decorated_sp_session.sp_name,
page_occurence: 'agency-page',
needs_completion_screen_reason: :new_sp,
@@ -271,7 +274,7 @@
stub_sign_in(user)
subject.session[:sp] = {
issuer: 'foo',
- ial: 1,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
request_url: 'http://example.com',
requested_attributes: ['email'],
}
@@ -290,7 +293,7 @@
it 'redirects to account page if the session request_url is removed' do
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
issuer: 'foo',
requested_attributes: ['email'],
}
@@ -306,7 +309,7 @@
DisposableEmailDomain.create(name: 'temporary.com')
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
issuer: 'foo',
request_url: 'http://example.com',
}
@@ -317,7 +320,7 @@
expect(@analytics).to have_received(:track_event).with(
'User registration: complete',
ial2: false,
- ialmax: nil,
+ ialmax: false,
service_provider_name: subject.decorated_sp_session.sp_name,
page_occurence: 'agency-page',
needs_completion_screen_reason: :new_sp,
@@ -343,7 +346,7 @@
sp = create(:service_provider, issuer: 'https://awesome')
subject.session[:sp] = {
issuer: sp.issuer,
- ial2: true,
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
request_url: 'http://example.com',
requested_attributes: ['email'],
}
@@ -354,7 +357,7 @@
expect(@analytics).to have_received(:track_event).with(
'User registration: complete',
ial2: true,
- ialmax: nil,
+ ialmax: false,
service_provider_name: subject.decorated_sp_session.sp_name,
page_occurence: 'agency-page',
needs_completion_screen_reason: :new_sp,
@@ -371,7 +374,7 @@
sp = create(:service_provider, issuer: 'https://awesome')
subject.session[:sp] = {
issuer: sp.issuer,
- ial: 2,
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
request_url: 'http://example.com',
requested_attributes: %w[email first_name verified_at],
}
@@ -395,12 +398,11 @@
sp = create(:service_provider, issuer: 'https://awesome')
subject.session[:sp] = {
issuer: sp.issuer,
- ial: 2,
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
request_url: 'http://example.com',
requested_attributes: %w[email first_name verified_at],
}
allow(@linker).to receive(:link_identity).with(
- ial: 2,
verified_attributes: %w[email first_name verified_at],
last_consented_at: now,
clear_deleted_at: true,
@@ -425,9 +427,9 @@
xit 'does not log a reproofing event during initial proofing' do
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
issuer: 'foo',
request_url: 'http://example.com',
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
}
patch :update
end
@@ -438,9 +440,9 @@
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
issuer: 'foo',
request_url: 'http://example.com',
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
}
expect(original_profile.activated_at).to be_present
@@ -466,8 +468,8 @@
user.profiles.create(verified_at: Time.zone.now, active: true, activated_at: Time.zone.now)
stub_sign_in(user)
subject.session[:sp] = {
- ial2: false,
request_url: 'http://example.com',
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
}
patch :update
diff --git a/spec/controllers/users/personal_keys_controller_spec.rb b/spec/controllers/users/personal_keys_controller_spec.rb
index 8064cd1d980..cb4d43c46b5 100644
--- a/spec/controllers/users/personal_keys_controller_spec.rb
+++ b/spec/controllers/users/personal_keys_controller_spec.rb
@@ -72,7 +72,10 @@
context 'user needs to reactive account' do
it 'redirects to the sign up completed url for ial 1' do
- controller.session[:sp] = { ial2: false }
+ controller.session[:sp] = {
+ issuer: create(:service_provider).issuer,
+ acr_values: Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF,
+ }
user = create(:user, :fully_registered)
create(:profile, :active, :verified, user: user, pii: { first_name: 'Jane' })
@@ -86,7 +89,10 @@
end
it 'redirects to the reactivate account url for ial 2' do
- controller.session[:sp] = { ial2: true }
+ controller.session[:sp] = {
+ issuer: create(:service_provider).issuer,
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
+ }
user = create(:user, :fully_registered)
create(:profile, :active, :verified, user: user, pii: { first_name: 'Jane' })
diff --git a/spec/controllers/users/piv_cac_login_controller_spec.rb b/spec/controllers/users/piv_cac_login_controller_spec.rb
index 3210a464570..220184e2027 100644
--- a/spec/controllers/users/piv_cac_login_controller_spec.rb
+++ b/spec/controllers/users/piv_cac_login_controller_spec.rb
@@ -44,7 +44,12 @@
context 'with a valid token' do
let(:service_provider) { create(:service_provider) }
- let(:sp_session) { { ial: 1, issuer: service_provider.issuer } }
+ let(:sp_session) do
+ {
+ acr_values: Saml::Idp::Constants::AAL2_AUTHN_CONTEXT_CLASSREF,
+ issuer: service_provider.issuer,
+ }
+ end
let(:nonce) { SecureRandom.base64(20) }
let(:data) do
{
@@ -175,7 +180,12 @@
end
context 'ial2 service_level' do
- let(:sp_session) { { ial: Idp::Constants::IAL2, issuer: service_provider.issuer } }
+ let(:sp_session) do
+ {
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
+ issuer: service_provider.issuer,
+ }
+ end
it 'redirects to account' do
expect(response).to redirect_to(account_url)
@@ -184,7 +194,10 @@
context 'ial_max service level' do
let(:sp_session) do
- { ial: Idp::Constants::IAL_MAX, issuer: service_provider.issuer }
+ {
+ acr_values: Saml::Idp::Constants::IALMAX_AUTHN_CONTEXT_CLASSREF,
+ issuer: service_provider.issuer,
+ }
end
it 'redirects to the after_sign_in_path_for' do
@@ -203,7 +216,12 @@
end
context 'ial2 service_level' do
- let(:sp_session) { { ial: Idp::Constants::IAL2, issuer: service_provider.issuer } }
+ let(:sp_session) do
+ {
+ acr_values: Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF,
+ issuer: service_provider.issuer,
+ }
+ end
it 'redirects to the capture_password_url' do
expect(response).to redirect_to(capture_password_url)
@@ -212,7 +230,10 @@
context 'ial_max service_level' do
let(:sp_session) do
- { ial: Idp::Constants::IAL_MAX, issuer: service_provider.issuer }
+ {
+ acr_values: Saml::Idp::Constants::IALMAX_AUTHN_CONTEXT_CLASSREF,
+ issuer: service_provider.issuer,
+ }
end
it 'redirects to the capture_password_url' do
diff --git a/spec/controllers/users/sessions_controller_spec.rb b/spec/controllers/users/sessions_controller_spec.rb
index cb740e54dfb..da59e990a77 100644
--- a/spec/controllers/users/sessions_controller_spec.rb
+++ b/spec/controllers/users/sessions_controller_spec.rb
@@ -43,7 +43,6 @@
it 'tracks the successful authentication for existing user' do
user = create(:user, :fully_registered)
- subject.session['user_return_to'] = mock_valid_site
stub_analytics
stub_attempts_tracker
@@ -52,7 +51,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 0,
- stored_location: mock_valid_site,
sp_request_url_present: false,
remember_device: false,
}
@@ -76,7 +74,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 1,
- stored_location: nil,
sp_request_url_present: false,
remember_device: false,
}
@@ -96,7 +93,6 @@
user_id: 'anonymous-uuid',
user_locked_out: false,
bad_password_count: 1,
- stored_location: nil,
sp_request_url_present: false,
remember_device: false,
}
@@ -135,7 +131,6 @@
user_id: user.uuid,
user_locked_out: true,
bad_password_count: 0,
- stored_location: nil,
sp_request_url_present: false,
remember_device: false,
}
@@ -159,7 +154,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 2,
- stored_location: nil,
sp_request_url_present: false,
remember_device: false,
}
@@ -178,7 +172,6 @@
user_id: 'anonymous-uuid',
user_locked_out: false,
bad_password_count: 1,
- stored_location: nil,
sp_request_url_present: true,
remember_device: false,
}
@@ -253,7 +246,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 0,
- stored_location: nil,
sp_request_url_present: false,
remember_device: false,
}
@@ -380,7 +372,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 0,
- stored_location: nil,
sp_request_url_present: false,
remember_device: true,
}
@@ -406,7 +397,6 @@
user_id: user.uuid,
user_locked_out: false,
bad_password_count: 0,
- stored_location: nil,
sp_request_url_present: false,
remember_device: true,
}
@@ -513,12 +503,10 @@
it 'tracks page visit, any alert flashes, and the Devise stored location' do
stub_analytics
allow(controller).to receive(:flash).and_return(alert: 'hello')
- subject.session['user_return_to'] = mock_valid_site
expect(@analytics).to receive(:track_event).with(
'Sign in page visited',
flash: 'hello',
- stored_location: mock_valid_site,
)
get :new
diff --git a/spec/features/idv/analytics_spec.rb b/spec/features/idv/analytics_spec.rb
index 28c244165c4..ffa7aa1cf13 100644
--- a/spec/features/idv/analytics_spec.rb
+++ b/spec/features/idv/analytics_spec.rb
@@ -129,7 +129,7 @@
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key visited' => {
- address_verification_method: 'phone', in_person_verification_pending: false,
+ address_verification_method: 'phone', encrypted_profiles_missing: false, in_person_verification_pending: false,
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key acknowledgment toggled' => {
@@ -237,7 +237,7 @@
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key visited' => {
- address_verification_method: 'phone', in_person_verification_pending: false,
+ address_verification_method: 'phone', encrypted_profiles_missing: false, in_person_verification_pending: false,
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key acknowledgment toggled' => {
@@ -448,7 +448,9 @@
},
'IdV: personal key visited' => {
in_person_verification_pending: true,
- proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }, address_verification_method: 'phone'
+ address_verification_method: 'phone',
+ encrypted_profiles_missing: false,
+ proofing_components: { document_check: 'usps', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' },
},
'IdV: personal key acknowledgment toggled' => {
checked: true,
@@ -563,7 +565,7 @@
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key visited' => {
- address_verification_method: 'phone', in_person_verification_pending: false,
+ address_verification_method: 'phone', in_person_verification_pending: false, encrypted_profiles_missing: false,
proofing_components: { document_check: 'mock', document_type: 'state_id', source_check: 'aamva', resolution_check: 'lexis_nexis', threatmetrix: threatmetrix, threatmetrix_review_status: 'pass', address_check: 'lexis_nexis_address' }
},
'IdV: personal key acknowledgment toggled' => {
diff --git a/spec/forms/frontend_error_form_spec.rb b/spec/forms/frontend_error_form_spec.rb
new file mode 100644
index 00000000000..d800d1fe0df
--- /dev/null
+++ b/spec/forms/frontend_error_form_spec.rb
@@ -0,0 +1,69 @@
+require 'rails_helper'
+
+RSpec.describe FrontendErrorForm do
+ let(:filename) { 'https://example.com/foo.js' }
+
+ subject(:form) { described_class.new }
+
+ before do
+ allow(IdentityConfig.store).to receive(:domain_name).and_return('example.com')
+ end
+
+ describe '#submit' do
+ subject(:result) { form.submit(filename:) }
+
+ context 'with valid filename' do
+ let(:filename) { 'https://example.com/foo.js' }
+
+ it 'is successful' do
+ expect(result.success?).to eq(true)
+ expect(result.errors).to eq({})
+ end
+ end
+
+ context 'without filename' do
+ let(:filename) { nil }
+
+ it 'is unsuccessful' do
+ expect(result.success?).to eq(false)
+ expect(result.errors).to eq(filename: [t('errors.general'), t('errors.general')])
+ end
+ end
+
+ context 'with filename without extension' do
+ let(:filename) { 'https://example.com/foo' }
+
+ it 'is unsuccessful' do
+ expect(result.success?).to eq(false)
+ expect(result.errors).to eq(filename: [t('errors.general')])
+ end
+ end
+
+ context 'with filename having extension other than js' do
+ let(:filename) { 'https://example.com/foo.txt' }
+
+ it 'is unsuccessful' do
+ expect(result.success?).to eq(false)
+ expect(result.errors).to eq(filename: [t('errors.general')])
+ end
+ end
+
+ context 'with filename from a different host' do
+ let(:filename) { 'https://wrong.example.com/foo.js' }
+
+ it 'is unsuccessful' do
+ expect(result.success?).to eq(false)
+ expect(result.errors).to eq(filename: [t('errors.general')])
+ end
+ end
+
+ context 'with filename that cannot be parsed as url' do
+ let(:filename) { '{' }
+
+ it 'is unsuccessful' do
+ expect(result.success?).to eq(false)
+ expect(result.errors).to eq(filename: [t('errors.general'), t('errors.general')])
+ end
+ end
+ end
+end
diff --git a/spec/forms/idv/api_image_upload_form_spec.rb b/spec/forms/idv/api_image_upload_form_spec.rb
index 4df0335f9ed..74fe6d69902 100644
--- a/spec/forms/idv/api_image_upload_form_spec.rb
+++ b/spec/forms/idv/api_image_upload_form_spec.rb
@@ -184,6 +184,7 @@
vendor: nil,
transaction_status: nil,
transaction_reason_code: nil,
+ workflow: 'test_non_liveness_workflow',
)
end
@@ -299,6 +300,7 @@
vendor: nil,
transaction_status: nil,
transaction_reason_code: nil,
+ workflow: 'test_liveness_workflow',
)
end
diff --git a/spec/forms/openid_connect_authorize_form_spec.rb b/spec/forms/openid_connect_authorize_form_spec.rb
index 3b8128759e0..38fd71ba28e 100644
--- a/spec/forms/openid_connect_authorize_form_spec.rb
+++ b/spec/forms/openid_connect_authorize_form_spec.rb
@@ -831,6 +831,8 @@
expect(identity.code_challenge).to eq(code_challenge)
expect(identity.nonce).to eq(nonce)
expect(identity.ial).to eq(1)
+ expect(identity.acr_values).to eq ''
+ expect(identity.vtr).to eq ['C1'].to_json
end
end
end
diff --git a/spec/lib/cleanup/destroyable_records_spec.rb b/spec/lib/cleanup/destroyable_records_spec.rb
index 269379bf495..752430df2ef 100644
--- a/spec/lib/cleanup/destroyable_records_spec.rb
+++ b/spec/lib/cleanup/destroyable_records_spec.rb
@@ -106,16 +106,27 @@
expect(iaa_order.integrations.include? integration).to be false
end
- describe 'integration without usages or iaa_orders' do
- let!(:empty_integration) { create(:integration) }
- let!(:service_provider) { empty_integration.service_provider }
+ context 'integration without integration usages' do
+ # int factory has no usages by default
+ let!(:integration) { create(:integration) }
+ let!(:service_provider) { integration.service_provider }
it 'destroys the integration' do
- deleted_int = Agreements::Integration.find_by(id: empty_integration.id)
+ deleted_int = Agreements::Integration.find_by(id: integration.id)
expect(deleted_int).to be nil
end
end
+ context 'no integration' do
+ # sp factory has no integrations by default
+ let!(:service_provider) { create(:service_provider) }
+
+ it 'destroys the service provider' do
+ deleted_sp = ServiceProvider.find_by(id: service_provider.id)
+ expect(deleted_sp).to be nil
+ end
+ end
+
it 'does not delete unrelated objects' do
iu2.reload
iaa_order.reload
diff --git a/spec/presenters/saml_request_presenter_spec.rb b/spec/presenters/saml_request_presenter_spec.rb
index 3517308d1fa..1db55365b71 100644
--- a/spec/presenters/saml_request_presenter_spec.rb
+++ b/spec/presenters/saml_request_presenter_spec.rb
@@ -21,6 +21,11 @@
phone address1 address2 city state zipcode foo
]
service_provider = ServiceProvider.new(attribute_bundle: all_attributes)
+ allow(request).to receive(
+ :service_provider,
+ ).and_return(
+ double(identifier: service_provider.issuer),
+ )
presenter = SamlRequestPresenter.new(request: request, service_provider: service_provider)
expect(presenter.requested_attributes).to eq(%i[email all_emails verified_at])
@@ -43,6 +48,11 @@
sp_attributes = %w[email first_name last_name ssn zipcode]
service_provider = ServiceProvider.new(attribute_bundle: sp_attributes, ial: 2)
+ allow(request).to receive(
+ :service_provider,
+ ).and_return(
+ double(identifier: service_provider.issuer),
+ )
presenter = SamlRequestPresenter.new(request: request, service_provider: service_provider)
expect(presenter.requested_attributes).to eq(
@@ -67,6 +77,11 @@
sp_attributes = %w[email first_name last_name ssn zipcode all_emails]
service_provider = ServiceProvider.new(attribute_bundle: sp_attributes, ial: 1)
+ allow(request).to receive(
+ :service_provider,
+ ).and_return(
+ double(identifier: service_provider.issuer),
+ )
presenter = SamlRequestPresenter.new(request: request, service_provider: service_provider)
expect(presenter.requested_attributes).to eq(%i[email all_emails])
@@ -86,6 +101,11 @@
email first_name last_name dob foo ssn phone verified_at
],
)
+ allow(request).to receive(
+ :service_provider,
+ ).and_return(
+ double(identifier: service_provider.issuer),
+ )
presenter = SamlRequestPresenter.new(request: request, service_provider: service_provider)
valid_attributes = %i[
email given_name family_name birthdate social_security_number phone verified_at
@@ -106,6 +126,11 @@
service_provider = ServiceProvider.new(
attribute_bundle: %w[address1 address2 city state zipcode],
)
+ allow(request).to receive(
+ :service_provider,
+ ).and_return(
+ double(identifier: service_provider.issuer),
+ )
presenter = SamlRequestPresenter.new(request: request, service_provider: service_provider)
expect(presenter.requested_attributes).to eq([:address])
diff --git a/spec/services/attribute_asserter_spec.rb b/spec/services/attribute_asserter_spec.rb
index 60eca6b7f96..f991fe6d162 100644
--- a/spec/services/attribute_asserter_spec.rb
+++ b/spec/services/attribute_asserter_spec.rb
@@ -544,9 +544,14 @@
expected_ial = Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF
expect(user.asserted_attributes[:ial][:getter].call(user)).to eq expected_ial
end
+
+ it 'does not include proofed attributes' do
+ expect(user.asserted_attributes[:first_name]).to eq(nil)
+ expect(user.asserted_attributes[:phone]).to eq(nil)
+ end
end
- context 'service provider requests IALMAX with IAL2 user' do
+ context 'IAL2 service provider requests IALMAX with IAL2 user' do
let(:service_provider_ial) { 2 }
let(:subject) do
described_class.new(
@@ -563,6 +568,7 @@
user.identities << identity
allow(service_provider.metadata).to receive(:[]).with(:attribute_bundle).
and_return(%w[email phone first_name])
+ ServiceProvider.find_by(issuer: sp1_issuer).update!(ial: 2)
subject.build
end
@@ -574,6 +580,47 @@
expected_ial = Saml::Idp::Constants::IAL2_AUTHN_CONTEXT_CLASSREF
expect(user.asserted_attributes[:ial][:getter].call(user)).to eq expected_ial
end
+
+ it 'includes proofed attributes' do
+ expect(user.asserted_attributes[:first_name][:getter].call(user)).to eq('Jåné')
+ expect(user.asserted_attributes[:phone][:getter].call(user)).to eq('+18888675309')
+ end
+ end
+ end
+
+ context 'non-IAL2 service provider requests IALMAX with IAL2 user' do
+ let(:service_provider_ial) { 1 }
+ let(:subject) do
+ described_class.new(
+ user: user,
+ name_id_format: name_id_format,
+ service_provider: service_provider,
+ authn_request: ialmax_authn_request,
+ decrypted_pii: decrypted_pii,
+ user_session: user_session,
+ )
+ end
+
+ before do
+ user.identities << identity
+ allow(service_provider.metadata).to receive(:[]).with(:attribute_bundle).
+ and_return(%w[email phone first_name])
+ ServiceProvider.find_by(issuer: sp1_issuer).update!(ial: 1)
+ subject.build
+ end
+
+ it 'includes ial' do
+ expect(user.asserted_attributes.keys).to include(:ial)
+ end
+
+ it 'creates a getter function for ial attribute' do
+ expected_ial = Saml::Idp::Constants::IAL1_AUTHN_CONTEXT_CLASSREF
+ expect(user.asserted_attributes[:ial][:getter].call(user)).to eq expected_ial
+ end
+
+ it 'includes proofed attributes' do
+ expect(user.asserted_attributes[:first_name]).to eq(nil)
+ expect(user.asserted_attributes[:phone]).to eq(nil)
end
end
diff --git a/spec/services/doc_auth/lexis_nexis/requests/true_id_request_spec.rb b/spec/services/doc_auth/lexis_nexis/requests/true_id_request_spec.rb
index 56f97ea60e3..2bc01966414 100644
--- a/spec/services/doc_auth/lexis_nexis/requests/true_id_request_spec.rb
+++ b/spec/services/doc_auth/lexis_nexis/requests/true_id_request_spec.rb
@@ -219,6 +219,13 @@ def include_liveness_expected
expect(response.network_error?).to eq(true)
end
end
+ describe '#request_context' do
+ it 'returns needed information including workflow' do
+ expect(subject.request_context).to include(
+ workflow: an_instance_of(String),
+ )
+ end
+ end
end
def response_body(include_liveness)
diff --git a/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb b/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb
index bc20b791e96..382015c3b32 100644
--- a/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb
+++ b/spec/services/doc_auth/lexis_nexis/responses/true_id_response_spec.rb
@@ -50,9 +50,17 @@
let(:config) do
DocAuth::LexisNexis::Config.new
end
-
+ let(:liveness_enabled) { false }
+ let(:workflow) { 'default_workflow' }
+ let(:request_context) do
+ {
+ workflow: workflow,
+ }
+ end
context 'when the response is a success' do
- let(:response) { described_class.new(success_response, config) }
+ let(:response) do
+ described_class.new(success_response, config, liveness_enabled, request_context)
+ end
it 'is a successful result' do
expect(response.successful_result?).to eq(true)
@@ -65,6 +73,8 @@
extra_attributes = response.extra_attributes
expect(extra_attributes).not_to be_empty
expect(extra_attributes[:classification_info]).to include(:Front, :Back)
+ expect(extra_attributes).to have_key(:workflow)
+ expect(extra_attributes).to have_key(:reference)
end
it 'has PII data' do
# This is the minimum expected by doc_pii_form in the core IDP
@@ -141,6 +151,7 @@
selfie_live: true,
selfie_quality_good: true,
liveness_enabled: false,
+ workflow: anything,
)
passed_alerts = response_hash.dig(:processed_alerts, :passed)
passed_alerts.each do |alert|
@@ -329,7 +340,10 @@ def get_decision_product(resp)
end
it 'produces expected hash output' do
- output = described_class.new(failure_response_with_all_failures, config).to_h
+ output = described_class.new(
+ failure_response_with_all_failures, config, liveness_enabled,
+ request_context
+ ).to_h
expect(output).to match(
success: false,
@@ -385,6 +399,7 @@ def get_decision_product(resp)
selfie_live: true,
selfie_quality_good: false,
liveness_enabled: false,
+ workflow: anything,
)
end
it 'produces appropriate errors with document tampering' do
@@ -422,7 +437,10 @@ def get_decision_product(resp)
end
it 'produces reasonable output for a TrueID failure without details' do
- output = described_class.new(failure_response_empty, config).to_h
+ output = described_class.new(
+ failure_response_empty, config, liveness_enabled,
+ request_context
+ ).to_h
expect(output[:success]).to eq(false)
expect(output[:errors]).to eq(
@@ -431,15 +449,20 @@ def get_decision_product(resp)
)
expect(output).to include(:lexis_nexis_status, :lexis_nexis_info, :exception)
expect(output[:vendor]).to eq('TrueID')
+ expect(output[:reference]).to match(a_kind_of(String))
end
it 'produces reasonable output for a malformed TrueID response' do
allow(NewRelic::Agent).to receive(:notice_error)
- output = described_class.new(failure_response_malformed, config).to_h
+ output = described_class.new(
+ failure_response_malformed, config, liveness_enabled,
+ request_context
+ ).to_h
expect(output[:success]).to eq(false)
expect(output[:errors]).to eq(network: true)
expect(output).to include(:backtrace)
+ expect(output[:reference]).to be_truthy
end
it 'is not billed' do
@@ -677,10 +700,20 @@ def get_decision_product(resp)
context 'when selfie check is enabled' do
context 'whe missing selfie result in response' do
- let(:response) { described_class.new(success_response, config, true) }
+ let(:request_context) do
+ {
+ workflow: 'selfie_workflow',
+ }
+ end
+ let(:response) { described_class.new(success_response, config, true, request_context) }
it 'returns :not_processed when missing selfie in response' do
expect(response.selfie_status).to eq(:not_processed)
end
+ it 'includes workflow in extra_attributes' do
+ expect(response.extra_attributes).to include(
+ workflow: 'selfie_workflow',
+ )
+ end
end
context 'when selfie passed' do
let(:response) { described_class.new(success_with_liveness_response, config, true) }
diff --git a/spec/services/doc_auth/mock/result_response_spec.rb b/spec/services/doc_auth/mock/result_response_spec.rb
index 15ca9496f72..5a731eb2201 100644
--- a/spec/services/doc_auth/mock/result_response_spec.rb
+++ b/spec/services/doc_auth/mock/result_response_spec.rb
@@ -303,6 +303,7 @@
doc_auth_result: DocAuth::Acuant::ResultCodes::PASSED.name,
billed: true,
classification_info: {},
+ workflow: 'test_non_liveness_workflow',
liveness_checking_required: false,
)
expect(response.doc_auth_success?).to eq(true)
@@ -334,6 +335,7 @@
billed: true,
classification_info: {},
liveness_checking_required: false,
+ workflow: 'test_non_liveness_workflow',
)
end
end
@@ -360,6 +362,7 @@
billed: true,
classification_info: {},
liveness_checking_required: false,
+ workflow: 'test_non_liveness_workflow',
)
end
end
@@ -407,6 +410,7 @@
billed: true,
classification_info: {},
liveness_checking_required: false,
+ workflow: 'test_non_liveness_workflow',
)
end
end
diff --git a/spec/services/frontend_error_logger_spec.rb b/spec/services/frontend_error_logger_spec.rb
index 33c570b5ce3..7f1922e35eb 100644
--- a/spec/services/frontend_error_logger_spec.rb
+++ b/spec/services/frontend_error_logger_spec.rb
@@ -1,6 +1,13 @@
require 'rails_helper'
RSpec.describe FrontendErrorLogger do
+ let(:valid) { true }
+
+ before do
+ allow_any_instance_of(FrontendErrorForm).to receive(:submit).
+ and_return(FormResponse.new(success: valid))
+ end
+
describe '.track_event' do
it 'notices an expected error to NewRelic with custom parameters' do
expect(NewRelic::Agent).to receive(:notice_error).with(
@@ -11,7 +18,7 @@
name: 'name',
message: 'message',
stack: 'stack',
- filename: 'filename',
+ filename: 'filename.js',
},
},
)
@@ -20,8 +27,23 @@
name: 'name',
message: 'message',
stack: 'stack',
- filename: 'filename',
+ filename: 'filename.js',
)
end
+
+ context 'with unsuccessful validation of request parameters' do
+ let(:valid) { false }
+
+ it 'does not notice an error' do
+ expect(NewRelic::Agent).not_to receive(:notice_error)
+
+ FrontendErrorLogger.track_error(
+ name: 'name',
+ message: 'message',
+ stack: 'stack',
+ filename: 'filename.js',
+ )
+ end
+ end
end
end
diff --git a/spec/services/ial_context_spec.rb b/spec/services/ial_context_spec.rb
index b90564c4e91..9d379376b8d 100644
--- a/spec/services/ial_context_spec.rb
+++ b/spec/services/ial_context_spec.rb
@@ -10,14 +10,12 @@
)
end
let(:user) { nil }
- let(:authn_context_comparison) { nil }
subject(:ial_context) do
IalContext.new(
ial: ial,
service_provider: service_provider,
user: user,
- authn_context_comparison: authn_context_comparison,
)
end
@@ -120,27 +118,6 @@
it { expect(ial_context.ialmax_requested?).to eq(true) }
end
- context 'when ial 1 is requested without Comparison=minimum and ial 2 SP' do
- let(:ial) { Idp::Constants::IAL1 }
- let(:authn_context_comparison) { 'exact' }
- let(:sp_ial) { 2 }
- it { expect(ial_context.ialmax_requested?).to eq(false) }
- end
-
- context 'when ial 1 is requested with Comparison=minimum and ial 2 SP' do
- let(:ial) { Idp::Constants::IAL1 }
- let(:authn_context_comparison) { 'minimum' }
- let(:sp_ial) { 2 }
- it { expect(ial_context.ialmax_requested?).to eq(true) }
- end
-
- context 'when ial 1 is requested with Comparison=minimum and ial 1 SP' do
- let(:ial) { Idp::Constants::IAL1 }
- let(:authn_context_comparison) { 'minimum' }
- let(:sp_ial) { 1 }
- it { expect(ial_context.ialmax_requested?).to eq(false) }
- end
-
context 'when ial 2 is requested' do
let(:ial) { Idp::Constants::IAL2 }
it { expect(ial_context.ialmax_requested?).to eq(false) }
diff --git a/spec/services/identity_linker_spec.rb b/spec/services/identity_linker_spec.rb
index 9e50e8e2211..99f1922f395 100644
--- a/spec/services/identity_linker_spec.rb
+++ b/spec/services/identity_linker_spec.rb
@@ -30,6 +30,8 @@
rails_session_id = SecureRandom.hex
nonce = SecureRandom.hex
ial = 3
+ acr_values = 'http://idmanagement.gov/ns/assurance/aal/1'
+ vtr = ['C2.Pb'].to_json
scope = 'openid profile email'
code_challenge = SecureRandom.hex
verified_attributes = %w[address email]
@@ -38,6 +40,8 @@
rails_session_id: rails_session_id,
nonce: nonce,
ial: ial,
+ acr_values: acr_values,
+ vtr: vtr,
scope: scope,
code_challenge: code_challenge,
verified_attributes: verified_attributes.map(&:to_sym),
@@ -48,6 +52,8 @@
expect(last_identity.nonce).to eq(nonce)
expect(last_identity.rails_session_id).to eq(rails_session_id)
expect(last_identity.ial).to eq(ial)
+ expect(last_identity.acr_values).to eq(acr_values)
+ expect(last_identity.vtr).to eq(vtr)
expect(last_identity.scope).to eq(scope)
expect(last_identity.code_challenge).to eq(code_challenge)
expect(last_identity.verified_attributes).to eq(verified_attributes)
diff --git a/spec/support/features/session_helper.rb b/spec/support/features/session_helper.rb
index 70f3ba3a267..782e14e00fc 100644
--- a/spec/support/features/session_helper.rb
+++ b/spec/support/features/session_helper.rb
@@ -148,20 +148,6 @@ def sign_up_with_backup_codes
user
end
- def begin_sign_up_with_sp_and_ial(ial2:)
- user = create(:user)
- login_as(user, scope: :user, run_callbacks: false)
-
- Warden.on_next_request do |proxy|
- session = proxy.env['rack.session']
- sp = ServiceProvider.find_by(issuer: 'http://localhost:3000')
- session[:sp] = { ial2: ial2, issuer: sp.issuer, request_id: '123' }
- end
-
- visit account_path
- user
- end
-
def sign_up_and_set_password
user = sign_up
user.password = VALID_PASSWORD
@@ -370,25 +356,6 @@ def enter_personal_key(personal_key:, selector: 'input[type="text"]')
field.set(personal_key)
end
- def ial1_sp_session
- Warden.on_next_request do |proxy|
- session = proxy.env['rack.session']
- sp = ServiceProvider.find_by(issuer: 'http://localhost:3000')
- session[:sp] = {
- ial2: false,
- issuer: sp.issuer,
- requested_attributes: [:email],
- }
- end
- end
-
- def ial2_sp_session(request_url: 'http://localhost:3000')
- Warden.on_next_request do |proxy|
- session = proxy.env['rack.session']
- session[:sp] = { ial2: true, request_url: request_url }
- end
- end
-
def cookies
page.driver.browser.rack_mock_session.cookie_jar.instance_variable_get(:@cookies)
end
diff --git a/spec/support/shared_examples/password_strength.rb b/spec/support/shared_examples/password_strength.rb
index 288b261d5d0..311d44f0bd5 100644
--- a/spec/support/shared_examples/password_strength.rb
+++ b/spec/support/shared_examples/password_strength.rb
@@ -42,13 +42,11 @@
expect(result.extra).to include(user_id: '123') if result.extra.present?
end
- # This test is disabled for now because zxcvbn doesn't support this
- # feature yet. See: https://github.com/dropbox/zxcvbn/issues/227
- xit 'does not allow a password containing words from the user email' do
- user = build_stubbed(:user, email: 'janedoe@gmail.com', uuid: '123')
+ it 'does not allow a password equal to a word from the user email' do
+ user = build_stubbed(:user, email: 'janedoelongname@example.com', uuid: '123')
allow(user).to receive(:reset_password_period_valid?).and_return(true)
form = form_class.constantize.new(user)
- password = 'janedoe gmail'
+ password = 'janedoelongname'
errors = {
password: ['Your password is not strong enough.' \
' Add another word or two.' \
diff --git a/yarn.lock b/yarn.lock
index 16b74664e85..6313b6499fe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1031,25 +1031,39 @@
resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.3.3.tgz#814562a5db0233a1ececda97b930c2dde5897de8"
integrity sha512-AoHSiIpTFF97SQgmQni4c+Tyr0CDhkaRaR2qGEJTEbauqQwLRpLrd9yVv//wVHOSxr/b4FJcL54VchhY6710xA==
-"@csstools/css-parser-algorithms@^2.3.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.0.tgz#0cc3a656dc2d638370ecf6f98358973bfbd00141"
- integrity sha512-dTKSIHHWc0zPvcS5cqGP+/TPFUJB0ekJ9dGKvMAFoNuBFhDPBt9OMGNZiIA5vTiNdGHHBeScYPXIGBMnVOahsA==
+"@bundled-es-modules/cookie@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164"
+ integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==
+ dependencies:
+ cookie "^0.5.0"
-"@csstools/css-tokenizer@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.1.1.tgz#07ae11a0a06365d7ec686549db7b729bc036528e"
- integrity sha512-GbrTj2Z8MCTUv+52GE0RbFGM527xuXZ0Xa5g0Z+YN573uveS4G0qi6WNOMyz3yrFM/jaILTTwJ0+umx81EzqfA==
+"@bundled-es-modules/statuses@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872"
+ integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==
+ dependencies:
+ statuses "^2.0.1"
-"@csstools/media-query-list-parser@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.2.tgz#6ef642b728d30c1009bfbba3211c7e4c11302728"
- integrity sha512-M8cFGGwl866o6++vIY7j1AKuq9v57cf+dGepScwCcbut9ypJNr4Cj+LLTWligYUZ0uyhEoJDKt5lvyBfh2L3ZQ==
+"@csstools/css-parser-algorithms@^2.5.0":
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz#b45d3c7cbdd4214261724c82f96e33c746fedd58"
+ integrity sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==
-"@csstools/selector-specificity@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247"
- integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==
+"@csstools/css-tokenizer@^2.2.3":
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz#b099d543ea57b64f495915a095ead583866c50c6"
+ integrity sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==
+
+"@csstools/media-query-list-parser@^2.1.7":
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz#36157fbe54ea30d5f2b1767c69fcdf92048a7b1d"
+ integrity sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==
+
+"@csstools/selector-specificity@^3.0.1":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz#ea61ba7bb24be3502c6aaa3190ed231f4633a81e"
+ integrity sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==
"@discoveryjs/json-ext@^0.5.0":
version "0.5.6"
@@ -1107,6 +1121,51 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+"@inquirer/confirm@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.0.0.tgz#6e1e35d18675fe659752d11021f9fddf547950b7"
+ integrity sha512-LHeuYP1D8NmQra1eR4UqvZMXwxEdDXyElJmmZfU44xdNLL6+GcQBS0uE16vyfZVjH8c22p9e+DStROfE/hyHrg==
+ dependencies:
+ "@inquirer/core" "^7.0.0"
+ "@inquirer/type" "^1.2.0"
+
+"@inquirer/core@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-7.0.0.tgz#18d2d2bb5cc6858765b4dcf3dce544ad15898e81"
+ integrity sha512-g13W5yEt9r1sEVVriffJqQ8GWy94OnfxLCreNSOTw0HPVcszmc/If1KIf7YBmlwtX4klmvwpZHnQpl3N7VX2xA==
+ dependencies:
+ "@inquirer/type" "^1.2.0"
+ "@types/mute-stream" "^0.0.4"
+ "@types/node" "^20.11.16"
+ "@types/wrap-ansi" "^3.0.0"
+ ansi-escapes "^4.3.2"
+ chalk "^4.1.2"
+ cli-spinners "^2.9.2"
+ cli-width "^4.1.0"
+ figures "^3.2.0"
+ mute-stream "^1.0.0"
+ run-async "^3.0.0"
+ signal-exit "^4.1.0"
+ strip-ansi "^6.0.1"
+ wrap-ansi "^6.2.0"
+
+"@inquirer/type@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.2.0.tgz#a569613628a881c2104289ca868a7def54e5c49d"
+ integrity sha512-/vvkUkYhrjbm+RolU7V1aUFDydZVKNKqKHR5TsE+j5DXgXFwrsOPcoGUJ02K0O7q7O53CU2DOTMYCHeGZ25WHA==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
"@jest/types@^26.6.2":
version "26.6.2"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
@@ -1163,27 +1222,22 @@
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
-"@mswjs/cookies@^0.2.2":
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.2.tgz#b4e207bf6989e5d5427539c2443380a33ebb922b"
- integrity sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==
- dependencies:
- "@types/set-cookie-parser" "^2.4.0"
- set-cookie-parser "^2.4.6"
-
-"@mswjs/interceptors@^0.17.10":
- version "0.17.10"
- resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.17.10.tgz#857b41f30e2b92345ed9a4e2b1d0a08b8b6fcad4"
- integrity sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw==
- dependencies:
- "@open-draft/until" "^1.0.3"
- "@types/debug" "^4.1.7"
- "@xmldom/xmldom" "^0.8.3"
- debug "^4.3.3"
- headers-polyfill "3.2.5"
+"@mswjs/cookies@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.0.tgz#1528eb43630caf83a1d75d5332b30e75e9bb1b5b"
+ integrity sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==
+
+"@mswjs/interceptors@^0.25.16":
+ version "0.25.16"
+ resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.25.16.tgz#7955fbb8da479bc691df117dd4c8d889e507ecc2"
+ integrity sha512-8QC8JyKztvoGAdPgyZy49c9vSHHAZjHagwl4RY9E8carULk8ym3iTaiawrT1YoLF/qb449h48f71XDPgkUSOUg==
+ dependencies:
+ "@open-draft/deferred-promise" "^2.2.0"
+ "@open-draft/logger" "^0.3.0"
+ "@open-draft/until" "^2.0.0"
+ is-node-process "^1.2.0"
outvariant "^1.2.1"
- strict-event-emitter "^0.2.4"
- web-encoding "^1.1.5"
+ strict-event-emitter "^0.5.1"
"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3":
version "2.1.8-no-fsevents.3"
@@ -1211,10 +1265,28 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@open-draft/until@^1.0.3":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca"
- integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==
+"@open-draft/deferred-promise@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd"
+ integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==
+
+"@open-draft/logger@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954"
+ integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==
+ dependencies:
+ is-node-process "^1.2.0"
+ outvariant "^1.4.0"
+
+"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda"
+ integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
"@pkgr/utils@^2.3.1":
version "2.4.2"
@@ -1369,17 +1441,10 @@
dependencies:
"@types/node" "*"
-"@types/cookie@^0.4.1":
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
- integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
-
-"@types/debug@^4.1.7":
- version "4.1.7"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
- integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
- dependencies:
- "@types/ms" "*"
+"@types/cookie@^0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
+ integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
"@types/dirty-chai@^2.0.2":
version "2.0.2"
@@ -1485,11 +1550,6 @@
dependencies:
"@types/sizzle" "*"
-"@types/js-levenshtein@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5"
- integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==
-
"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
version "7.0.13"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85"
@@ -1510,20 +1570,17 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
-"@types/minimist@^1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
- integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
-
"@types/mocha@^10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.0.tgz#3d9018c575f0e3f7386c1de80ee66cc21fbb7a52"
integrity sha512-rADY+HtTOA52l9VZWtgQfn4p+UDVM2eDVkMZT1I6syp0YKxW2F9v+0pbRZLsvskhQv/vMb6ZfCay81GHbz5SHg==
-"@types/ms@*":
- version "0.7.31"
- resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
- integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+"@types/mute-stream@^0.0.4":
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478"
+ integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==
+ dependencies:
+ "@types/node" "*"
"@types/node-forge@^1.3.0":
version "1.3.11"
@@ -1532,15 +1589,12 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@^20.2.5":
- version "20.2.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb"
- integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==
-
-"@types/normalize-package-data@^2.4.0":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
- integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+"@types/node@*", "@types/node@^20.11.16", "@types/node@^20.2.5":
+ version "20.11.19"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.19.tgz#b466de054e9cb5b3831bee38938de64ac7f81195"
+ integrity sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==
+ dependencies:
+ undici-types "~5.26.4"
"@types/prop-types@*":
version "15.7.3"
@@ -1619,13 +1673,6 @@
"@types/mime" "*"
"@types/node" "*"
-"@types/set-cookie-parser@^2.4.0":
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad"
- integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==
- dependencies:
- "@types/node" "*"
-
"@types/sinon-chai@^3.2.8":
version "3.2.8"
resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc"
@@ -1658,6 +1705,11 @@
dependencies:
"@types/node" "*"
+"@types/statuses@^2.0.4":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.4.tgz#041143ba4a918e8f080f8b0ffbe3d4cb514e2315"
+ integrity sha512-eqNDvZsCNY49OAXB0Firg/Sc2BgoWsntsLUdybGFOhAfCD6QJ2n9HXUIHGqt5qjrxmMv4wS8WLAw43ZkKcJ8Pw==
+
"@types/testing-library__react-hooks@^3.4.0":
version "3.4.1"
resolved "https://registry.yarnpkg.com/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz#b8d7311c6c1f7db3103e94095fe901f8fef6e433"
@@ -1665,6 +1717,11 @@
dependencies:
"@types/react-test-renderer" "*"
+"@types/wrap-ansi@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd"
+ integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==
+
"@types/ws@^8.5.5":
version "8.5.10"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787"
@@ -1975,11 +2032,6 @@
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1"
integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==
-"@xmldom/xmldom@^0.8.3":
- version "0.8.6"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440"
- integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==
-
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@@ -1990,11 +2042,6 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-"@zxing/text-encoding@0.9.0":
- version "0.9.0"
- resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b"
- integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==
-
abab@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -2074,7 +2121,7 @@ ansi-colors@4.1.1:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-ansi-escapes@^4.2.1:
+ansi-escapes@^4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
@@ -2091,6 +2138,11 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -2110,6 +2162,11 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
@@ -2185,11 +2242,6 @@ array.prototype.flatmap@^1.3.0, array.prototype.flatmap@^1.3.1:
es-abstract "^1.20.4"
es-shim-unscopables "^1.0.0"
-arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
- integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
-
assertion-error@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
@@ -2282,11 +2334,6 @@ balanced-match@^2.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9"
integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==
-base64-js@^1.3.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
@@ -2302,15 +2349,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bl@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
- integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
- dependencies:
- buffer "^5.5.0"
- inherits "^2.0.4"
- readable-stream "^3.4.0"
-
body-parser@1.20.1:
version "1.20.1"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
@@ -2396,14 +2434,6 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer@^5.5.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
bundle-name@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
@@ -2434,17 +2464,7 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-camelcase-keys@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252"
- integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==
- dependencies:
- camelcase "^6.3.0"
- map-obj "^4.1.0"
- quick-lru "^5.1.1"
- type-fest "^1.2.1"
-
-camelcase@^6.0.0, camelcase@^6.3.0:
+camelcase@^6.0.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
@@ -2483,7 +2503,7 @@ chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2491,11 +2511,6 @@ chalk@^4.0, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chardet@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
- integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-
check-error@^1.0.2, check-error@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
@@ -2503,7 +2518,7 @@ check-error@^1.0.2, check-error@^1.0.3:
dependencies:
get-func-name "^2.0.2"
-chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3:
+chokidar@3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -2518,6 +2533,21 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^3.4.0, chokidar@^3.5.3, chokidar@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@@ -2533,22 +2563,15 @@ cleave.js@^1.6.0:
resolved "https://registry.yarnpkg.com/cleave.js/-/cleave.js-1.6.0.tgz#0e4e011943bdd70c67c9dcf4ff800ce710529171"
integrity sha512-ivqesy3j5hQVG3gywPfwKPbi/7ZSftY/UNp5uphnqjr25yI2CP8FS2ODQPzuLXXnNLi29e2+PgPkkiKUXLs/Nw==
-cli-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
- integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
- dependencies:
- restore-cursor "^3.1.0"
+cli-spinners@^2.9.2:
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
+ integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
-cli-spinners@^2.5.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a"
- integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==
-
-cli-width@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
- integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+cli-width@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5"
+ integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==
clipboard-polyfill@^3.0.3:
version "3.0.3"
@@ -2582,11 +2605,6 @@ clone-deep@^4.0.1:
kind-of "^6.0.2"
shallow-clone "^3.0.0"
-clone@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
- integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
-
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -2725,16 +2743,11 @@ cookie-signature@1.0.6:
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
-cookie@0.5.0:
+cookie@0.5.0, cookie@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
-cookie@^0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
- integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
-
core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.21.0:
version "3.31.1"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0"
@@ -2757,17 +2770,17 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-cosmiconfig@^8.2.0:
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd"
- integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==
+cosmiconfig@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d"
+ integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==
dependencies:
- import-fresh "^3.2.1"
+ env-paths "^2.2.1"
+ import-fresh "^3.3.0"
js-yaml "^4.1.0"
- parse-json "^5.0.0"
- path-type "^4.0.0"
+ parse-json "^5.2.0"
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -2776,10 +2789,10 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
-css-functions-list@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b"
- integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==
+css-functions-list@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea"
+ integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==
css-select@^5.1.0:
version "5.1.0"
@@ -2865,7 +2878,7 @@ debug@2.6.9:
dependencies:
ms "2.0.0"
-debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
+debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -2879,29 +2892,11 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
-decamelize-keys@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
- integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
- dependencies:
- decamelize "^1.1.0"
- map-obj "^1.0.0"
-
-decamelize@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
decamelize@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
-decamelize@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9"
- integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==
-
decimal.js@^10.4.3:
version "10.4.3"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
@@ -2949,13 +2944,6 @@ default-gateway@^6.0.3:
dependencies:
execa "^5.0.0"
-defaults@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
- integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
- dependencies:
- clone "^1.0.2"
-
define-lazy-prop@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
@@ -3089,6 +3077,11 @@ domutils@^3.0.1:
domelementtype "^2.3.0"
domhandler "^5.0.3"
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -3132,6 +3125,11 @@ entities@^4.2.0, entities@^4.4.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+env-paths@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
envinfo@^7.7.3:
version "7.8.1"
resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475"
@@ -3483,7 +3481,7 @@ eventemitter3@^4.0.0:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-events@^3.2.0, events@^3.3.0:
+events@^3.2.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
@@ -3555,15 +3553,6 @@ express@^4.17.3:
utils-merge "1.0.1"
vary "~1.1.2"
-external-editor@^3.0.3:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
- integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
- dependencies:
- chardet "^0.7.0"
- iconv-lite "^0.4.24"
- tmp "^0.0.33"
-
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -3574,10 +3563,10 @@ fast-diff@^1.1.2:
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
-fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0"
- integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==
+fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
@@ -3614,7 +3603,7 @@ faye-websocket@^0.11.3:
dependencies:
websocket-driver ">=0.5.1"
-figures@^3.0.0:
+figures@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
@@ -3628,6 +3617,13 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
+file-entry-cache@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
+ integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
+ dependencies:
+ flat-cache "^4.0.0"
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -3697,15 +3693,24 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
+flat-cache@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.0.tgz#d12437636f83bb8a12b8f300c36fd1614e1c7224"
+ integrity sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.4"
+ rimraf "^5.0.5"
+
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
-flatted@^3.1.0:
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
- integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
+flatted@^3.1.0, flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
focus-trap@^6.7.1:
version "6.7.1"
@@ -3726,6 +3731,14 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
@@ -3858,6 +3871,17 @@ glob@7.2.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
+glob@^10.3.7:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
glob@^7.1.3, glob@^7.2.0:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
@@ -3949,11 +3973,6 @@ handle-thing@^2.0.0:
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
-hard-rejection@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
- integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
-
has-bigints@^1.0.1, has-bigints@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
@@ -4012,17 +4031,10 @@ he@1.2.0:
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
-headers-polyfill@3.2.5:
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed"
- integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA==
-
-hosted-git-info@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
- integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
- dependencies:
- lru-cache "^6.0.0"
+headers-polyfill@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a"
+ integrity sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==
hpack.js@^2.1.6:
version "2.1.6"
@@ -4129,7 +4141,7 @@ human-signals@^4.3.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
-iconv-lite@0.4.24, iconv-lite@^0.4.24:
+iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4143,22 +4155,17 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
-ieee754@^1.1.13:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-ignore@^5.2.0, ignore@^5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
- integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
immutable@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
-import-fresh@^3.0.0, import-fresh@^3.2.1:
+import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
@@ -4166,11 +4173,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
-import-lazy@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
- integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==
-
import-local@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
@@ -4184,11 +4186,6 @@ imurmurhash@^0.1.4:
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-indent-string@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5"
- integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==
-
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -4197,7 +4194,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -4212,27 +4209,6 @@ ini@^1.3.5:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-inquirer@^8.2.0:
- version "8.2.5"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8"
- integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==
- dependencies:
- ansi-escapes "^4.2.1"
- chalk "^4.1.1"
- cli-cursor "^3.1.0"
- cli-width "^3.0.0"
- external-editor "^3.0.3"
- figures "^3.0.0"
- lodash "^4.17.21"
- mute-stream "0.0.8"
- ora "^5.4.1"
- run-async "^2.4.0"
- rxjs "^7.5.5"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
- through "^2.3.6"
- wrap-ansi "^7.0.0"
-
internal-slot@^1.0.3, internal-slot@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
@@ -4262,14 +4238,6 @@ ipaddr.js@^2.0.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f"
integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==
-is-arguments@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
- integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
@@ -4311,7 +4279,7 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.2.0, is-core-module@^2.5.0:
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.2.0:
version "2.13.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
@@ -4345,13 +4313,6 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-generator-function@^1.0.7:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
- integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
- dependencies:
- has-tostringtag "^1.0.0"
-
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -4366,11 +4327,6 @@ is-inside-container@^1.0.0:
dependencies:
is-docker "^3.0.0"
-is-interactive@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
- integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
-
is-negative-zero@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
@@ -4398,11 +4354,6 @@ is-path-inside@^3.0.3:
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-is-plain-obj@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
- integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-
is-plain-obj@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
@@ -4469,7 +4420,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9:
+is-typed-array@^1.1.10, is-typed-array@^1.1.9:
version "1.1.10"
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f"
integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==
@@ -4519,6 +4470,15 @@ isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
jest-worker@^27.4.5:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
@@ -4528,11 +4488,6 @@ jest-worker@^27.4.5:
merge-stream "^2.0.0"
supports-color "^8.0.0"
-js-levenshtein@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
- integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
-
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -4584,6 +4539,11 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -4634,16 +4594,18 @@ keyboardevent-key-polyfill@^1.0.2:
resolved "https://registry.yarnpkg.com/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz#8a319d8e45a13172fca56286372f90c1d4c7014c"
integrity sha512-NTDqo7XhzL1fqmUzYroiyK2qGua7sOMzLav35BfNA/mPUSCtw8pZghHFMTYR9JdnJ23IQz695FcaM6EE6bpbFQ==
-kind-of@^6.0.2, kind-of@^6.0.3:
+keyv@^4.5.4:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-known-css-properties@^0.27.0:
- version "0.27.0"
- resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.27.0.tgz#82a9358dda5fe7f7bd12b5e7142c0a205393c0c5"
- integrity sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==
-
known-css-properties@^0.29.0:
version "0.29.0"
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f"
@@ -4813,7 +4775,7 @@ lodash@^4.17.21:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-log-symbols@4.1.0, log-symbols@^4.1.0:
+log-symbols@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
@@ -4849,6 +4811,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+ integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
lz-string@^1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26"
@@ -4869,16 +4836,6 @@ make-dir@^3.0.2:
dependencies:
semver "^6.0.0"
-map-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
- integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
-
-map-obj@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
- integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
-
matches-selector@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/matches-selector/-/matches-selector-1.2.0.tgz#d1814e7e8f43e69d22ac33c9af727dc884ecf12a"
@@ -4911,23 +4868,10 @@ memfs@^3.4.3:
dependencies:
fs-monkey "^1.0.4"
-meow@^10.1.5:
- version "10.1.5"
- resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.5.tgz#be52a1d87b5f5698602b0f32875ee5940904aa7f"
- integrity sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==
- dependencies:
- "@types/minimist" "^1.2.2"
- camelcase-keys "^7.0.0"
- decamelize "^5.0.0"
- decamelize-keys "^1.1.0"
- hard-rejection "^2.1.0"
- minimist-options "4.1.0"
- normalize-package-data "^3.0.2"
- read-pkg-up "^8.0.0"
- redent "^4.0.0"
- trim-newlines "^4.0.2"
- type-fest "^1.2.2"
- yargs-parser "^20.2.9"
+meow@^13.1.0:
+ version "13.2.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
+ integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
merge-descriptors@1.0.1:
version "1.0.1"
@@ -4984,11 +4928,6 @@ mimic-fn@^4.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
-min-indent@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
- integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-
minimalistic-assert@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -5008,20 +4947,23 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
-minimist-options@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
- integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
dependencies:
- arrify "^1.0.1"
- is-plain-obj "^1.1.0"
- kind-of "^6.0.3"
+ brace-expansion "^2.0.1"
minimist@1.2.6, minimist@^1.2.0, minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
mocha@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9"
@@ -5070,30 +5012,28 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-msw@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/msw/-/msw-1.3.2.tgz#35e0271293e893fc3c55116e90aad5d955c66899"
- integrity sha512-wKLhFPR+NitYTkQl5047pia0reNGgf0P6a1eTnA5aNlripmiz0sabMvvHcicE8kQ3/gZcI0YiPFWmYfowfm3lA==
- dependencies:
- "@mswjs/cookies" "^0.2.2"
- "@mswjs/interceptors" "^0.17.10"
- "@open-draft/until" "^1.0.3"
- "@types/cookie" "^0.4.1"
- "@types/js-levenshtein" "^1.1.1"
- chalk "^4.1.1"
- chokidar "^3.4.2"
- cookie "^0.4.2"
+msw@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/msw/-/msw-2.2.1.tgz#5ece7ee81331aabe632fe331f07e71e8a3949499"
+ integrity sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w==
+ dependencies:
+ "@bundled-es-modules/cookie" "^2.0.0"
+ "@bundled-es-modules/statuses" "^1.0.1"
+ "@inquirer/confirm" "^3.0.0"
+ "@mswjs/cookies" "^1.1.0"
+ "@mswjs/interceptors" "^0.25.16"
+ "@open-draft/until" "^2.1.0"
+ "@types/cookie" "^0.6.0"
+ "@types/statuses" "^2.0.4"
+ chalk "^4.1.2"
graphql "^16.8.1"
- headers-polyfill "3.2.5"
- inquirer "^8.2.0"
+ headers-polyfill "^4.0.2"
is-node-process "^1.2.0"
- js-levenshtein "^1.1.6"
- node-fetch "^2.6.7"
- outvariant "^1.4.0"
+ outvariant "^1.4.2"
path-to-regexp "^6.2.0"
- strict-event-emitter "^0.4.3"
- type-fest "^2.19.0"
- yargs "^17.3.1"
+ strict-event-emitter "^0.5.1"
+ type-fest "^4.9.0"
+ yargs "^17.7.2"
multicast-dns@^7.2.5:
version "7.2.5"
@@ -5103,10 +5043,10 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
-mute-stream@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
- integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+mute-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e"
+ integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==
nanoid@3.3.3:
version "3.3.3"
@@ -5114,9 +5054,9 @@ nanoid@3.3.3:
integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
nanoid@^3.3.6:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
- integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
natural-compare@^1.4.0:
version "1.4.0"
@@ -5144,13 +5084,6 @@ nise@^5.1.1:
just-extend "^4.0.2"
path-to-regexp "^1.7.0"
-node-fetch@^2.6.7:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
- integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
- dependencies:
- whatwg-url "^5.0.0"
-
node-forge@^1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -5166,16 +5099,6 @@ node-releases@^2.0.14:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
-normalize-package-data@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
- integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
- dependencies:
- hosted-git-info "^4.0.1"
- is-core-module "^2.5.0"
- semver "^7.3.4"
- validate-npm-package-license "^3.0.1"
-
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -5291,7 +5214,7 @@ once@^1.3.0:
dependencies:
wrappy "1"
-onetime@^5.1.0, onetime@^5.1.2:
+onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -5336,30 +5259,10 @@ optionator@^0.9.1:
prelude-ls "^1.2.1"
type-check "^0.4.0"
-ora@^5.4.1:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
- integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
- dependencies:
- bl "^4.1.0"
- chalk "^4.1.0"
- cli-cursor "^3.1.0"
- cli-spinners "^2.5.0"
- is-interactive "^1.0.0"
- is-unicode-supported "^0.1.0"
- log-symbols "^4.1.0"
- strip-ansi "^6.0.0"
- wcwidth "^1.0.1"
-
-os-tmpdir@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
- integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
-
-outvariant@^1.2.1, outvariant@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.0.tgz#e742e4bda77692da3eca698ef5bfac62d9fba06e"
- integrity sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==
+outvariant@^1.2.1, outvariant@^1.4.0, outvariant@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066"
+ integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==
p-limit@^2.0.0, p-limit@^2.2.0:
version "2.3.0"
@@ -5416,7 +5319,7 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-json@^5.0.0, parse-json@^5.2.0:
+parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
@@ -5468,6 +5371,14 @@ path-parse@^1.0.6, path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
@@ -5541,20 +5452,20 @@ postcss-resolve-nested-selector@^0.1.1:
resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=
-postcss-safe-parser@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1"
- integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==
+postcss-safe-parser@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz#6273d4e5149e286db5a45bc6cf6eafcad464014a"
+ integrity sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==
postcss-scss@^4.0.9:
version "4.0.9"
resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.9.tgz#a03c773cd4c9623cb04ce142a52afcec74806685"
integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==
-postcss-selector-parser@^6.0.13:
- version "6.0.13"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b"
- integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
+postcss-selector-parser@^6.0.15:
+ version "6.0.15"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
+ integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
@@ -5564,7 +5475,7 @@ postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@8.4.31, postcss@^8.4.24:
+postcss@8.4.31, postcss@^8.4.33:
version "8.4.31"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
@@ -5666,11 +5577,6 @@ quibble@^0.9.1:
lodash "^4.17.21"
resolve "^1.22.8"
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
rambda@^7.1.0:
version "7.2.1"
resolved "https://registry.yarnpkg.com/rambda/-/rambda-7.2.1.tgz#c533f6e2def4edcd59f967df938ace5dd6da56af"
@@ -5743,25 +5649,6 @@ react@^17.0.2:
loose-envify "^1.1.0"
object-assign "^4.1.1"
-read-pkg-up@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670"
- integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==
- dependencies:
- find-up "^5.0.0"
- read-pkg "^6.0.0"
- type-fest "^1.0.1"
-
-read-pkg@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c"
- integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==
- dependencies:
- "@types/normalize-package-data" "^2.4.0"
- normalize-package-data "^3.0.2"
- parse-json "^5.2.0"
- type-fest "^1.0.1"
-
readable-stream@^2.0.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
@@ -5775,7 +5662,7 @@ readable-stream@^2.0.1:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@^3.0.6, readable-stream@^3.4.0:
+readable-stream@^3.0.6:
version "3.6.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
@@ -5808,14 +5695,6 @@ rechoir@^0.7.0:
dependencies:
resolve "^1.9.0"
-redent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9"
- integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==
- dependencies:
- indent-string "^5.0.0"
- strip-indent "^4.0.0"
-
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
@@ -5932,14 +5811,6 @@ resolve@^2.0.0-next.3:
is-core-module "^2.2.0"
path-parse "^1.0.6"
-restore-cursor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
- integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
- dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
-
retry@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
@@ -5957,6 +5828,13 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+rimraf@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
+ integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
+ dependencies:
+ glob "^10.3.7"
+
rrweb-cssom@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1"
@@ -5969,10 +5847,10 @@ run-applescript@^5.0.0:
dependencies:
execa "^5.0.0"
-run-async@^2.4.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
- integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+run-async@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad"
+ integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==
run-parallel@^1.1.9:
version "1.2.0"
@@ -5981,7 +5859,7 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-rxjs@^7.4.0, rxjs@^7.5.5, rxjs@^7.8.1:
+rxjs@^7.4.0, rxjs@^7.8.1:
version "7.8.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
@@ -6178,7 +6056,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.3.4, semver@^7.3.7, semver@^7.5.4:
+semver@^7.3.7, semver@^7.5.4:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
@@ -6234,11 +6112,6 @@ serve-static@1.15.0:
parseurl "~1.3.3"
send "0.18.0"
-set-cookie-parser@^2.4.6:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b"
- integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==
-
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
@@ -6287,10 +6160,10 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
- integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
+signal-exit@^4.0.1, signal-exit@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
sinon-chai@^3.7.0:
version "3.7.0"
@@ -6379,32 +6252,6 @@ spawn-command@0.0.2:
resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e"
integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==
-spdx-correct@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
- integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
- dependencies:
- spdx-expression-parse "^3.0.0"
- spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
- integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
-
-spdx-expression-parse@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
- integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
- dependencies:
- spdx-exceptions "^2.1.0"
- spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
- integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
-
spdy-transport@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@@ -6428,7 +6275,7 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
-statuses@2.0.1:
+statuses@2.0.1, statuses@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
@@ -6438,19 +6285,12 @@ statuses@2.0.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
-strict-event-emitter@^0.2.4:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz#b4e768927c67273c14c13d20e19d5e6c934b47ca"
- integrity sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==
- dependencies:
- events "^3.3.0"
-
-strict-event-emitter@^0.4.3:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3"
- integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==
+strict-event-emitter@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93"
+ integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -6459,6 +6299,15 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
string.prototype.matchall@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
@@ -6514,13 +6363,20 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
dependencies:
ansi-regex "^5.0.1"
+strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
@@ -6536,96 +6392,82 @@ strip-final-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-strip-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853"
- integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==
- dependencies:
- min-indent "^1.0.1"
-
strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-style-search@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
- integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=
-
-stylelint-config-recommended-scss@^13.1.0:
- version "13.1.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz#04e529ae0e9c1abb1e04de79258461c07811876f"
- integrity sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==
+stylelint-config-recommended-scss@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.0.0.tgz#d3482c9817dada80b5ec01685b38fc8af8f7263f"
+ integrity sha512-HDvpoOAQ1RpF+sPbDOT2Q2/YrBDEJDnUymmVmZ7mMCeNiFSdhRdyGEimBkz06wsN+HaFwUh249gDR+I9JR7Onw==
dependencies:
postcss-scss "^4.0.9"
- stylelint-config-recommended "^13.0.0"
- stylelint-scss "^5.3.0"
+ stylelint-config-recommended "^14.0.0"
+ stylelint-scss "^6.0.0"
-stylelint-config-recommended@^13.0.0:
- version "13.0.0"
- resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz#c48a358cc46b629ea01f22db60b351f703e00597"
- integrity sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==
+stylelint-config-recommended@^14.0.0:
+ version "14.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz#b395c7014838d2aaca1755eebd914d0bb5274994"
+ integrity sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==
-stylelint-prettier@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-4.0.2.tgz#9d82f5ab77781429f0049dede44665ee603f4986"
- integrity sha512-EoHnR2PiaWgpGtoI4VW7AzneMfwmwQsNwQ+3/E2k/a+ju5yO6rfPfop4vzPQKcJN4ZM1YbspEOPu88D8538sbg==
+stylelint-prettier@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-5.0.0.tgz#515a87800228f6bea603966462f7119755ee9b82"
+ integrity sha512-RHfSlRJIsaVg5Br94gZVdWlz/rBTyQzZflNE6dXvSxt/GthWMY3gEHsWZEBaVGg7GM+XrtVSp4RznFlB7i0oyw==
dependencies:
prettier-linter-helpers "^1.0.0"
-stylelint-scss@^5.3.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-5.3.1.tgz#7f0f5f06d0a2a3c515aa71d3a8de3548045e03e1"
- integrity sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==
+stylelint-scss@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-6.1.0.tgz#b7ef162c417132e8df2b69d1759ae07395d54fb5"
+ integrity sha512-kCfK8TQzthGwb4vaZniZgxRsVbCM4ZckmT1b/H5m4FU3I8Dz0id9llKsy1NMp3XXqC8+OPD4rVKtUbSxXlJb5g==
dependencies:
known-css-properties "^0.29.0"
postcss-media-query-parser "^0.2.3"
postcss-resolve-nested-selector "^0.1.1"
- postcss-selector-parser "^6.0.13"
+ postcss-selector-parser "^6.0.15"
postcss-value-parser "^4.2.0"
-stylelint@^15.10.1:
- version "15.10.1"
- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.1.tgz#93f189958687e330c106b010cbec0c41dcae506d"
- integrity sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==
+stylelint@^16.2.1:
+ version "16.2.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.2.1.tgz#895d6d42523c5126ec0895f0ca2a58febeb77e89"
+ integrity sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==
dependencies:
- "@csstools/css-parser-algorithms" "^2.3.0"
- "@csstools/css-tokenizer" "^2.1.1"
- "@csstools/media-query-list-parser" "^2.1.2"
- "@csstools/selector-specificity" "^3.0.0"
+ "@csstools/css-parser-algorithms" "^2.5.0"
+ "@csstools/css-tokenizer" "^2.2.3"
+ "@csstools/media-query-list-parser" "^2.1.7"
+ "@csstools/selector-specificity" "^3.0.1"
balanced-match "^2.0.0"
colord "^2.9.3"
- cosmiconfig "^8.2.0"
- css-functions-list "^3.1.0"
+ cosmiconfig "^9.0.0"
+ css-functions-list "^3.2.1"
css-tree "^2.3.1"
debug "^4.3.4"
- fast-glob "^3.3.0"
+ fast-glob "^3.3.2"
fastest-levenshtein "^1.0.16"
- file-entry-cache "^6.0.1"
+ file-entry-cache "^8.0.0"
global-modules "^2.0.0"
globby "^11.1.0"
globjoin "^0.1.4"
html-tags "^3.3.1"
- ignore "^5.2.4"
- import-lazy "^4.0.0"
+ ignore "^5.3.0"
imurmurhash "^0.1.4"
is-plain-object "^5.0.0"
- known-css-properties "^0.27.0"
+ known-css-properties "^0.29.0"
mathml-tag-names "^2.1.3"
- meow "^10.1.5"
+ meow "^13.1.0"
micromatch "^4.0.5"
normalize-path "^3.0.0"
picocolors "^1.0.0"
- postcss "^8.4.24"
+ postcss "^8.4.33"
postcss-resolve-nested-selector "^0.1.1"
- postcss-safe-parser "^6.0.0"
- postcss-selector-parser "^6.0.13"
+ postcss-safe-parser "^7.0.0"
+ postcss-selector-parser "^6.0.15"
postcss-value-parser "^4.2.0"
resolve-from "^5.0.0"
string-width "^4.2.3"
- strip-ansi "^6.0.1"
- style-search "^0.1.0"
+ strip-ansi "^7.1.0"
supports-hyperlinks "^3.0.0"
svg-tags "^1.0.0"
table "^6.8.1"
@@ -6750,11 +6592,6 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
-through@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
@@ -6765,13 +6602,6 @@ titleize@^3.0.0:
resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
-tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
- dependencies:
- os-tmpdir "~1.0.2"
-
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -6806,21 +6636,11 @@ tr46@^4.1.1:
dependencies:
punycode "^2.3.0"
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
tree-kill@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
-trim-newlines@^4.0.2:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.1.1.tgz#28c88deb50ed10c7ba6dc2474421904a00139125"
- integrity sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==
-
ts-api-utils@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
@@ -6875,15 +6695,10 @@ type-fest@^0.21.3:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1"
- integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
-
-type-fest@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
- integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+type-fest@^4.9.0:
+ version "4.10.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.10.2.tgz#3abdb144d93c5750432aac0d73d3e85fcab45738"
+ integrity sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==
type-is@~1.6.18:
version "1.6.18"
@@ -6917,6 +6732,11 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -6988,17 +6808,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-util@^0.12.3:
- version "0.12.5"
- resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc"
- integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==
- dependencies:
- inherits "^2.0.3"
- is-arguments "^1.0.4"
- is-generator-function "^1.0.7"
- is-typed-array "^1.1.3"
- which-typed-array "^1.1.2"
-
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -7009,14 +6818,6 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-validate-npm-package-license@^3.0.1:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
- integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
- dependencies:
- spdx-correct "^3.0.0"
- spdx-expression-parse "^3.0.0"
-
varint@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0"
@@ -7049,27 +6850,6 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
-wcwidth@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
- integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
- dependencies:
- defaults "^1.0.3"
-
-web-encoding@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864"
- integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==
- dependencies:
- util "^0.12.3"
- optionalDependencies:
- "@zxing/text-encoding" "0.9.0"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
webidl-conversions@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
@@ -7238,14 +7018,6 @@ whatwg-url@^12.0.0, whatwg-url@^12.0.1:
tr46 "^4.1.1"
webidl-conversions "^7.0.0"
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -7257,7 +7029,7 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
-which-typed-array@^1.1.2, which-typed-array@^1.1.9:
+which-typed-array@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"
integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==
@@ -7293,7 +7065,7 @@ workerpool@6.2.1:
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
-wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -7302,6 +7074,24 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0"
strip-ansi "^6.0.0"
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -7355,7 +7145,7 @@ yargs-parser@20.2.4:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
-yargs-parser@^20.2.2, yargs-parser@^20.2.9:
+yargs-parser@^20.2.2:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
@@ -7388,7 +7178,7 @@ yargs@16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
-yargs@^17.3.1, yargs@^17.7.2:
+yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==