From 4792040240ad35895801bc319fef628993bbcf6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <2887858+deivid-rodriguez@users.noreply.github.com> Date: Wed, 26 Nov 2025 12:17:29 +0100 Subject: [PATCH 001/270] Cover tax category removal with a spec --- .../system/admin/configuration/tax_categories_spec.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spec/system/admin/configuration/tax_categories_spec.rb b/spec/system/admin/configuration/tax_categories_spec.rb index ea5074d8bf..56605a5848 100644 --- a/spec/system/admin/configuration/tax_categories_spec.rb +++ b/spec/system/admin/configuration/tax_categories_spec.rb @@ -55,4 +55,15 @@ RSpec.describe "Tax Categories" do expect(page).to have_content("desc 99") end end + + context "admin deleting a tax category" do + it "should be able to delete an existing tax category" do + create(:tax_category, name: "To be removed") + click_link "Tax Categories" + accept_confirm('Are you sure?') do + within_row(1) { find(".icon-trash").click } + end + expect(page).not_to have_content("To be removed") + end + end end From 7bf54088a63f5ec5fb3f5511bb8972c7501dc811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <2887858+deivid-rodriguez@users.noreply.github.com> Date: Tue, 25 Nov 2025 11:40:13 +0100 Subject: [PATCH 002/270] Use `Spree.t` directly for translating the `not_found` message Since none of the current keys interpolate a `%{resource}` parameter. --- app/controllers/admin/resource_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/resource_controller.rb b/app/controllers/admin/resource_controller.rb index b15a576f40..e863de0f7d 100644 --- a/app/controllers/admin/resource_controller.rb +++ b/app/controllers/admin/resource_controller.rb @@ -76,7 +76,7 @@ module Admin protected def resource_not_found - flash[:error] = flash_message_for(model_class.new, :not_found) + flash[:error] = Spree.t(:not_found) redirect_to collection_url end From 6bd2f5af8d3666195851b0adfefc4bde77b13085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <2887858+deivid-rodriguez@users.noreply.github.com> Date: Tue, 25 Nov 2025 19:05:20 +0100 Subject: [PATCH 003/270] Use `Spree.t` directly for translating the `successfully_removed` flash message Since none of the current keys have a `%{resource}` parameter. --- app/controllers/admin/resource_controller.rb | 2 +- app/controllers/spree/admin/images_controller.rb | 2 +- app/controllers/spree/admin/product_properties_controller.rb | 2 +- app/controllers/spree/admin/shipping_methods_controller.rb | 2 +- app/controllers/spree/admin/tax_categories_controller.rb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/admin/resource_controller.rb b/app/controllers/admin/resource_controller.rb index e863de0f7d..31a7b657f2 100644 --- a/app/controllers/admin/resource_controller.rb +++ b/app/controllers/admin/resource_controller.rb @@ -61,7 +61,7 @@ module Admin def destroy if @object.destroy - flash[:success] = flash_message_for(@object, :successfully_removed) + flash[:success] = Spree.t(:successfully_removed) respond_with(@object) do |format| format.html { redirect_to collection_url } format.js { render partial: "spree/admin/shared/destroy" } diff --git a/app/controllers/spree/admin/images_controller.rb b/app/controllers/spree/admin/images_controller.rb index cb1ebe40ac..193b013562 100644 --- a/app/controllers/spree/admin/images_controller.rb +++ b/app/controllers/spree/admin/images_controller.rb @@ -68,7 +68,7 @@ module Spree destroy_before if @object.destroy - flash[:success] = flash_message_for(@object, :successfully_removed) + flash[:success] = Spree.t(:successfully_removed) end redirect_to location_after_save diff --git a/app/controllers/spree/admin/product_properties_controller.rb b/app/controllers/spree/admin/product_properties_controller.rb index aebdff556e..b92208c924 100644 --- a/app/controllers/spree/admin/product_properties_controller.rb +++ b/app/controllers/spree/admin/product_properties_controller.rb @@ -16,7 +16,7 @@ module Spree @url_filters = ::ProductFilters.new.extract(request.query_parameters) if @object.destroy - flash[:success] = flash_message_for(@object, :successfully_removed) + flash[:success] = Spree.t(:successfully_removed) end # if destroy fails it won't show any errors to the user redirect_to spree.admin_product_product_properties_url(params[:product_id], @url_filters) diff --git a/app/controllers/spree/admin/shipping_methods_controller.rb b/app/controllers/spree/admin/shipping_methods_controller.rb index 25433b213f..8b24f0cc09 100644 --- a/app/controllers/spree/admin/shipping_methods_controller.rb +++ b/app/controllers/spree/admin/shipping_methods_controller.rb @@ -36,7 +36,7 @@ module Spree end @object.touch :deleted_at - flash[:success] = flash_message_for(@object, :successfully_removed) + flash[:success] = Spree.t(:successfully_removed) respond_with(@object) do |format| format.html { redirect_to collection_url } diff --git a/app/controllers/spree/admin/tax_categories_controller.rb b/app/controllers/spree/admin/tax_categories_controller.rb index e9d6547f48..7d7e82c86a 100644 --- a/app/controllers/spree/admin/tax_categories_controller.rb +++ b/app/controllers/spree/admin/tax_categories_controller.rb @@ -5,7 +5,7 @@ module Spree class TaxCategoriesController < ::Admin::ResourceController def destroy if @object.destroy - flash[:success] = flash_message_for(@object, :successfully_removed) + flash[:success] = Spree.t(:successfully_removed) respond_with(@object) do |format| format.html { redirect_to collection_url } format.js { render partial: "spree/admin/shared/destroy" } From bf0e5c0d442079f306c39450e4a562d2da727ace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <2887858+deivid-rodriguez@users.noreply.github.com> Date: Fri, 21 Nov 2025 19:07:21 +0100 Subject: [PATCH 004/270] Let "Tag Rule" and "Voucher" be translated in flash messages --- app/controllers/admin/tag_rules_controller.rb | 2 +- app/controllers/admin/vouchers_controller.rb | 2 +- config/locales/en.yml | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/tag_rules_controller.rb b/app/controllers/admin/tag_rules_controller.rb index 620de16ee3..79bd815405 100644 --- a/app/controllers/admin/tag_rules_controller.rb +++ b/app/controllers/admin/tag_rules_controller.rb @@ -30,7 +30,7 @@ module Admin status = :ok if @rule.destroy - flash[:success] = Spree.t(:successfully_removed, resource: "Tag Rule") + flash[:success] = Spree.t(:successfully_removed, resource: Spree.t(:tag_rule)) else flash.now[:error] = t(".destroy_error") status = :internal_server_error diff --git a/app/controllers/admin/vouchers_controller.rb b/app/controllers/admin/vouchers_controller.rb index 72bb759e10..272de55966 100644 --- a/app/controllers/admin/vouchers_controller.rb +++ b/app/controllers/admin/vouchers_controller.rb @@ -14,7 +14,7 @@ module Admin ) if @voucher.save - flash[:success] = I18n.t(:successfully_created, resource: "Voucher") + flash[:success] = I18n.t(:successfully_created, resource: Spree.t(:voucher)) redirect_to edit_admin_enterprise_path(@enterprise, anchor: :vouchers_panel) else render_error diff --git a/config/locales/en.yml b/config/locales/en.yml index 589257fbfb..60d91e17ea 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4194,6 +4194,8 @@ en: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + tag_rule: "Tag Rule" + voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" From f4d59305d71d288332e40e31c32553656cd368c6 Mon Sep 17 00:00:00 2001 From: Prikesh Savla Date: Mon, 8 Dec 2025 09:08:35 +0530 Subject: [PATCH 005/270] Upgraded gem active_storage_validations from 1.1.2 to 3.0.2 and fixed any upgrade related issues Changed all references of processable_image to processable_file which was a breaking change from v1 to v2 https://github.com/igorkasyanchuk/active_storage_validations/tree/3.0.2?tab=readme-ov-file#upgrading-from-1x-to-2x Also it upgraded the way of validating files from just the file name and content type, so tests also needed to change for file upload checks Refactored all the similar file image validator content type in Spree::Image::ACCEPTED_CONTENT_TYPES and Updated ImageBuilder.import method to use the url.path when getting filename. --- Gemfile.lock | 11 ++++---- app/models/enterprise.rb | 12 ++++---- app/models/enterprise_group.rb | 8 +++--- app/models/spree/image.rb | 6 ++-- .../app/services/image_builder.rb | 2 +- .../supplied_product_importer_spec.rb | 4 +-- spec/fixtures/files/logo.bmp | Bin 0 -> 1818 bytes .../_import/downloads_from_the_Internet.yml | 2 +- spec/models/enterprise_spec.rb | 26 ++++++------------ spec/services/image_importer_spec.rb | 2 +- spec/system/admin/products_spec.rb | 2 +- spec/system/admin/products_v3/update_spec.rb | 4 +-- 12 files changed, 36 insertions(+), 43 deletions(-) create mode 100644 spec/fixtures/files/logo.bmp diff --git a/Gemfile.lock b/Gemfile.lock index 1f02aa3ad8..1dfd9a5d42 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -104,11 +104,12 @@ GEM rails-html-sanitizer (~> 1.6) active_model_serializers (0.8.4) activemodel (>= 3.0) - active_storage_validations (1.1.4) - activejob (>= 5.2.0) - activemodel (>= 5.2.0) - activestorage (>= 5.2.0) - activesupport (>= 5.2.0) + active_storage_validations (3.0.2) + activejob (>= 6.1.4) + activemodel (>= 6.1.4) + activestorage (>= 6.1.4) + activesupport (>= 6.1.4) + marcel (>= 1.0.3) activejob (7.1.6) activesupport (= 7.1.6) globalid (>= 0.3.6) diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index b36c3cb33e..c126b28984 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -110,14 +110,14 @@ class Enterprise < ApplicationRecord end validates :logo, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ::Spree::Image::ACCEPTED_CONTENT_TYPES validates :promo_image, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ::Spree::Image::ACCEPTED_CONTENT_TYPES validates :white_label_logo, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ::Spree::Image::ACCEPTED_CONTENT_TYPES validates :terms_and_conditions, content_type: { in: "application/pdf", message: I18n.t(:enterprise_terms_and_conditions_type_error), diff --git a/app/models/enterprise_group.rb b/app/models/enterprise_group.rb index e6208e3000..cb2252b2d4 100644 --- a/app/models/enterprise_group.rb +++ b/app/models/enterprise_group.rb @@ -29,11 +29,11 @@ class EnterpriseGroup < ApplicationRecord has_one_attached :promo_image, service: image_service validates :logo, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ::Spree::Image::ACCEPTED_CONTENT_TYPES validates :promo_image, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ::Spree::Image::ACCEPTED_CONTENT_TYPES scope :by_position, -> { order('position ASC') } scope :on_front_page, -> { where(on_front_page: true) } diff --git a/app/models/spree/image.rb b/app/models/spree/image.rb index 350b1c5b4c..431b1679b0 100644 --- a/app/models/spree/image.rb +++ b/app/models/spree/image.rb @@ -2,6 +2,8 @@ module Spree class Image < Asset + ACCEPTED_CONTENT_TYPES = %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + has_one_attached :attachment, service: image_service do |attachment| attachment.variant :mini, resize_to_fill: [48, 48] attachment.variant :small, resize_to_fill: [227, 227] @@ -11,8 +13,8 @@ module Spree validates :attachment, attached: true, - processable_image: true, - content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z} + processable_file: true, + content_type: ACCEPTED_CONTENT_TYPES validate :no_attachment_errors def self.default_image_url(size) diff --git a/engines/dfc_provider/app/services/image_builder.rb b/engines/dfc_provider/app/services/image_builder.rb index 06ab056e0c..798a5d0f38 100644 --- a/engines/dfc_provider/app/services/image_builder.rb +++ b/engines/dfc_provider/app/services/image_builder.rb @@ -19,7 +19,7 @@ class ImageBuilder < DfcBuilder def self.import(image_link) url = URI.parse(image_link) - filename = File.basename(image_link) + filename = File.basename(url.path) metadata = { custom: { origin: image_link } } Spree::Image.new.tap do |image| diff --git a/engines/dfc_provider/spec/services/supplied_product_importer_spec.rb b/engines/dfc_provider/spec/services/supplied_product_importer_spec.rb index 815a1c6897..07a8d1bbda 100644 --- a/engines/dfc_provider/spec/services/supplied_product_importer_spec.rb +++ b/engines/dfc_provider/spec/services/supplied_product_importer_spec.rb @@ -251,7 +251,7 @@ RSpec.describe SuppliedProductImporter do supplied_product.isVariantOf << tomatoes imported_product = importer.import_variant(supplied_product, supplier).product - expect(imported_product.image.attachment.filename).to eq "tomato.png?v=1" + expect(imported_product.image.attachment.filename).to eq "tomato.png" expect { importer.import_variant(supplied_product, supplier).product @@ -266,7 +266,7 @@ RSpec.describe SuppliedProductImporter do } .to change { imported_product.image } - expect(imported_product.image.attachment.filename).to eq "tomato.png?v=2" + expect(imported_product.image.attachment.filename).to eq "tomato.png" end context "when spree_product_uri doesn't match the server host" do diff --git a/spec/fixtures/files/logo.bmp b/spec/fixtures/files/logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f03e68b138349937618b46d6561098e48e82f842 GIT binary patch literal 1818 zcmbu9NoZ6-5Qg7mm`pUHLOdm|5pwb>2oeUzU=R}!MNt$*R75l$Od!D}3Q=58)Qj=p zMT6po8^nW}1o!2jiAxj(#|0JikSOj5&+mUz72ZKl7V}O0UEN*XUH#t6)|RG&$aeC- z0Y<>bFbosH*dU4CTNnf-#d&C&g+Y-2sU2pkXVrVp|9UMAtV-g%UXE{v2k_RAR!n^f z8(Zkw_nm(KAG##_7yo$@j0DNqH2EtWzTnJ!0bZl&5X zbT>4ZRxYpQd~^|>ugYHFpyaURi`rHDoH4KVDYwv(9AX8oRP51yyZQttGS~V6Q zhu7Wcz0=(u1>KAGru)=8Q2{xdKMJiix4{vRRaxH^w4Q&}@F#RwyczuqH2x9DbXL_! z_6GKW>L0xyHZMb4wi%YeId~7U^)^P&%_-Ae=uXq+=p1CM?eG0MVoxll+Vp|Wq8k4O z*>>0+sW3c_*B!|kJr_Cw1=em+r&*cBI%r>nEcAo+y%L^+%)cY5ef*p1IctgE1?7=x xo}Mw)QqREwXonl%XB^0-J;> Date: Mon, 8 Dec 2025 22:08:59 +0530 Subject: [PATCH 006/270] Extended imageImport and ImageBuilder to get the content type of the file for the attacment for avoiding issues for files without extensions. Updated config/locale/en.yml for the active_storage_validations related error messages --- app/services/image_importer.rb | 4 +- config/locales/en.yml | 80 ++++++++++++++----- .../app/services/image_builder.rb | 4 +- .../api/v0/product_images_controller_spec.rb | 3 +- .../_import/downloads_from_the_Internet.yml | 2 +- spec/services/image_importer_spec.rb | 4 +- 6 files changed, 71 insertions(+), 26 deletions(-) diff --git a/app/services/image_importer.rb b/app/services/image_importer.rb index 9cef10548a..78f525323a 100644 --- a/app/services/image_importer.rb +++ b/app/services/image_importer.rb @@ -11,7 +11,9 @@ class ImageImporter image = Spree::Image.create do |img| PrivateAddressCheck.only_public_connections do - img.attachment.attach(io: valid_url.open, filename:, metadata:) + io = valid_url.open + content_type = Marcel::MimeType.for(io) + img.attachment.attach(io:, filename:, metadata:, content_type:) end end product.image = image if image diff --git a/config/locales/en.yml b/config/locales/en.yml index d3fe23123d..985a743048 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -138,26 +138,66 @@ en: # Used by active_storage_validations errors: messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not between required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixel." - dimension_width_inclusion: "width is not included between %{min} and %{max} pixel." - dimension_height_inclusion: "height is not included between %{min} and %{max} pixel." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixel." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixel." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixel." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixel." - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "height must be equal to %{length} pixel." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ratio of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ratio" - image_not_processable: "is not a valid image" + content_type_invalid: + one: "has an invalid content type (authorized content type is %{authorized_human_content_types})" + other: "has an invalid content type (authorized content types are %{authorized_human_content_types})" + content_type_spoofed: + one: "has a content type that is not equivalent to the one that is detected through its content (authorized content type is %{authorized_human_content_types})" + other: "has a content type that is not equivalent to the one that is detected through its content (authorized content types are %{authorized_human_content_types})" + file_size_not_less_than: "file size must be less than %{max} (current size is %{file_size})" + file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max} (current size is %{file_size})" + file_size_not_greater_than: "file size must be greater than %{min} (current size is %{file_size})" + file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min} (current size is %{file_size})" + file_size_not_between: "file size must be between %{min} and %{max} (current size is %{file_size})" + file_size_not_equal_to: "file size must be equal to %{exact} (current size is %{file_size})" + total_file_size_not_less_than: "total file size must be less than %{max} (current size is %{total_file_size})" + total_file_size_not_less_than_or_equal_to: "total file size must be less than or equal to %{max} (current size is %{total_file_size})" + total_file_size_not_greater_than: "total file size must be greater than %{min} (current size is %{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "total file size must be greater than or equal to %{min} (current size is %{total_file_size})" + total_file_size_not_between: "total file size must be between %{min} and %{max} (current size is %{total_file_size})" + total_file_size_not_equal_to: "total file size must be equal to %{exact} (current size is %{total_file_size})" + duration_not_less_than: "duration must be less than %{max} (current duration is %{duration})" + duration_not_less_than_or_equal_to: "duration must be less than or equal to %{max} (current duration is %{duration})" + duration_not_greater_than: "duration must be greater than %{min} (current duration is %{duration})" + duration_not_greater_than_or_equal_to: "duration must be greater than or equal to %{min} (current duration is %{duration})" + duration_not_between: "duration must be between %{min} and %{max} (current duration is %{duration})" + duration_not_equal_to: "duration must be equal to %{exact} (current duration is %{duration})" + limit_out_of_range: + zero: "no files attached (must have between %{min} and %{max} files)" + one: "only 1 file attached (must have between %{min} and %{max} files)" + other: "total number of files must be between %{min} and %{max} files (there are %{count} files attached)" + limit_min_not_reached: + zero: "no files attached (must have at least %{min} files)" + one: "only 1 file attached (must have at least %{min} files)" + other: "%{count} files attached (must have at least %{min} files)" + limit_max_exceeded: + zero: "no files attached (maximum is %{max} files)" + one: "too many files attached (maximum is %{max} files, got %{count})" + other: "too many files attached (maximum is %{max} files, got %{count})" + attachment_missing: "is missing its attachment" + media_metadata_missing: "is not a valid media file" + dimension_min_not_included_in: "must be greater than or equal to %{width} x %{height} pixels" + dimension_max_not_included_in: "must be less than or equal to %{width} x %{height} pixels" + dimension_width_not_included_in: "width is not included between %{min} and %{max} pixels" + dimension_height_not_included_in: "height is not included between %{min} and %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels" + dimension_width_not_less_than_or_equal_to: "width must be less than or equal to %{length} pixels" + dimension_height_not_less_than_or_equal_to: "height must be less than or equal to %{length} pixels" + dimension_width_not_equal_to: "width must be equal to %{length} pixels" + dimension_height_not_equal_to: "height must be equal to %{length} pixels" + aspect_ratio_not_square: "must be square (current file is %{width}x%{height}px)" + aspect_ratio_not_portrait: "must be portrait (current file is %{width}x%{height}px)" + aspect_ratio_not_landscape: "must be landscape (current file is %{width}x%{height}px)" + aspect_ratio_not_x_y: "must be %{authorized_aspect_ratios} (current file is %{width}x%{height}px)" + aspect_ratio_invalid: "has an invalid aspect ratio (valid aspect ratios are %{authorized_aspect_ratios})" + file_not_processable: "is not identified as a valid media file" + pages_not_less_than: "page count must be less than %{max} (current page count is %{pages})" + pages_not_less_than_or_equal_to: "page count must be less than or equal to %{max} (current page count is %{pages})" + pages_not_greater_than: "page count must be greater than %{min} (current page count is %{pages})" + pages_not_greater_than_or_equal_to: "page count must be greater than or equal to %{min} (current page count is %{pages})" + pages_not_between: "page count must be between %{min} and %{max} (current page count is %{pages})" + pages_not_equal_to: "page count must be equal to %{exact} (current page count is %{pages})" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again diff --git a/engines/dfc_provider/app/services/image_builder.rb b/engines/dfc_provider/app/services/image_builder.rb index 798a5d0f38..e9da4aa36a 100644 --- a/engines/dfc_provider/app/services/image_builder.rb +++ b/engines/dfc_provider/app/services/image_builder.rb @@ -24,7 +24,9 @@ class ImageBuilder < DfcBuilder Spree::Image.new.tap do |image| PrivateAddressCheck.only_public_connections do - image.attachment.attach(io: url.open, filename:, metadata:) + io = url.open + content_type = Marcel::MimeType.for(io) + image.attachment.attach(io:, filename:, metadata:, content_type:) end end rescue StandardError diff --git a/spec/controllers/api/v0/product_images_controller_spec.rb b/spec/controllers/api/v0/product_images_controller_spec.rb index 5fe0e4bb24..ac46c412f4 100644 --- a/spec/controllers/api/v0/product_images_controller_spec.rb +++ b/spec/controllers/api/v0/product_images_controller_spec.rb @@ -45,7 +45,8 @@ RSpec.describe Api::V0::ProductImagesController do expect(response).to have_http_status :unprocessable_entity expect(product_without_image.image).to be_nil expect(json_response["id"]).to eq nil - expect(json_response["errors"]).to include "Attachment has an invalid content type" + expect(json_response["errors"]).to include "Attachment is " \ + "not identified as a valid media file" end end end diff --git a/spec/fixtures/vcr_cassettes/ImageImporter/_import/downloads_from_the_Internet.yml b/spec/fixtures/vcr_cassettes/ImageImporter/_import/downloads_from_the_Internet.yml index eb4760b32b..86808900fb 100644 --- a/spec/fixtures/vcr_cassettes/ImageImporter/_import/downloads_from_the_Internet.yml +++ b/spec/fixtures/vcr_cassettes/ImageImporter/_import/downloads_from_the_Internet.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://s3.amazonaws.com/ofn_production/eofop2en1y6tu9fr1x9b0wzwgs5r.png + uri: https://s3.amazonaws.com/ofn_production/eofop2en1y6tu9fr1x9b0wzwgs5r body: encoding: US-ASCII string: '' diff --git a/spec/services/image_importer_spec.rb b/spec/services/image_importer_spec.rb index d5cc88b375..d9c7e5cd0b 100644 --- a/spec/services/image_importer_spec.rb +++ b/spec/services/image_importer_spec.rb @@ -3,11 +3,11 @@ require 'spec_helper' RSpec.describe ImageImporter do - let(:ofn_url) { "https://s3.amazonaws.com/ofn_production/eofop2en1y6tu9fr1x9b0wzwgs5r.png" } + let(:ofn_url) { "https://s3.amazonaws.com/ofn_production/eofop2en1y6tu9fr1x9b0wzwgs5r" } let(:product) { create(:product) } describe "#import" do - it "downloads from the Internet", :vcr do + it "downloads from the Internet", :vcr, :aggregate_failures do expect { subject.import(ofn_url, product) }.to change { From c01cca33c7e7bc7b112d20a7b73a68abaa30691e Mon Sep 17 00:00:00 2001 From: Prikesh Savla Date: Tue, 9 Dec 2025 11:43:10 +0530 Subject: [PATCH 007/270] Fix encoding issue for Producer name to allow special characters in the text using ng-bind-html --- app/views/admin/order_cycles/_row.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/order_cycles/_row.html.haml b/app/views/admin/order_cycles/_row.html.haml index f331e4ca83..2019b0ddc3 100644 --- a/app/views/admin/order_cycles/_row.html.haml +++ b/app/views/admin/order_cycles/_row.html.haml @@ -18,7 +18,7 @@ %span{ "ofn-with-tip": '{{ orderCycle.producerNames }}', "ng-show": 'orderCycle.producers.length > 3' } {{ orderCycle.producers.length }} = t('.suppliers') - %span{ "ng-hide": 'orderCycle.producers.length > 3', "ng-bind": 'orderCycle.producerNames' } + %span{ "ng-hide": 'orderCycle.producers.length > 3', "ng-bind-html": 'orderCycle.producerNames' } %td.coordinator{ "ng-show": 'columns.coordinator.visible', "ng-bind-html": 'orderCycle.coordinator.name' } %td.shops{ "ng-show": 'columns.shops.visible' } %span{ "ofn-with-tip": '{{ orderCycle.shopNames }}', "ng-show": 'orderCycle.shops.length > 3' } From 7a72121b1b44a8b9dce2b8fcaaca817d21d4f7ea Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 26 Nov 2025 14:21:57 +1100 Subject: [PATCH 008/270] Remove flipper groups that are not used anymore --- config/initializers/flipper.rb | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/config/initializers/flipper.rb b/config/initializers/flipper.rb index 0c6c82d624..9095b76014 100644 --- a/config/initializers/flipper.rb +++ b/config/initializers/flipper.rb @@ -27,18 +27,6 @@ end Flipper.register(:new_2024_07_03) do |actor| actor.respond_to?(:created_at?) && actor.created_at >= Time.zone.parse("2024-07-03") end -Flipper.register(:enterprise_created_before_2025_08_11) do |actor| - # This group applies to enterprises only, so we return false if the actor is not an Enterprise - next false unless actor.actor.instance_of? Enterprise - - actor.respond_to?(:created_at?) && actor.created_at < Time.zone.parse("2025-08-11") -end -Flipper.register(:enterprise_created_after_2025_08_11) do |actor| - # This group applies to enterprises only, so we return false if the actor is not an Enterprise - next false unless actor.actor.instance_of? Enterprise - - actor.respond_to?(:created_at?) && actor.created_at >= Time.zone.parse("2025-08-11") -end Flipper.register(:enterprise_with_no_inventory) do |actor| # This group applies to enterprises only, so we return false if the actor is not an Enterprise From 059e36318e69a43bb73db84313c3db87bebc82dc Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 24 Nov 2025 16:13:11 +1100 Subject: [PATCH 009/270] Add type to WebhookEnpoints Add migration to update existing endpoint to "order_cycle_opened" type --- app/models/webhook_endpoint.rb | 3 +++ ...251124043324_add_type_to_webhook_endpoints.rb | 16 ++++++++++++++++ db/schema.rb | 1 + spec/models/webhook_endpoint_spec.rb | 4 ++++ 4 files changed, 24 insertions(+) create mode 100644 db/migrate/20251124043324_add_type_to_webhook_endpoints.rb diff --git a/app/models/webhook_endpoint.rb b/app/models/webhook_endpoint.rb index 8626e11b93..4c5d45dcef 100644 --- a/app/models/webhook_endpoint.rb +++ b/app/models/webhook_endpoint.rb @@ -2,5 +2,8 @@ # Records a webhook url to send notifications to class WebhookEndpoint < ApplicationRecord + WEBHOOK_TYPES = %w(order_cycle_opened payment_status_changed).freeze + validates :url, presence: true + validates :webhook_type, presence: true, inclusion: { in: WEBHOOK_TYPES } end diff --git a/db/migrate/20251124043324_add_type_to_webhook_endpoints.rb b/db/migrate/20251124043324_add_type_to_webhook_endpoints.rb new file mode 100644 index 0000000000..d4dd6238f7 --- /dev/null +++ b/db/migrate/20251124043324_add_type_to_webhook_endpoints.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class AddTypeToWebhookEndpoints < ActiveRecord::Migration[7.1] + def up + # Using "order_cycle_opened" as default will update existing record + change_table(:webhook_endpoints, bulk: true) do |t| + t.column :webhook_type, :string, limit: 255, null: false, default: "order_cycle_opened" + end + # Drop the default value + change_column_default :webhook_endpoints, :webhook_type, nil + end + + def down + remove_column :webhook_endpoints, :webhook_type + end +end diff --git a/db/schema.rb b/db/schema.rb index acbc0d48cd..9ebfe7a970 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1143,6 +1143,7 @@ ActiveRecord::Schema[7.1].define(version: 2025_11_26_005628) do t.datetime "created_at", null: false t.datetime "updated_at", null: false t.bigint "user_id", default: 0, null: false + t.string "webhook_type", limit: 255, null: false t.index ["user_id"], name: "index_webhook_endpoints_on_user_id" end diff --git a/spec/models/webhook_endpoint_spec.rb b/spec/models/webhook_endpoint_spec.rb index 2aba887175..30b3ab4395 100644 --- a/spec/models/webhook_endpoint_spec.rb +++ b/spec/models/webhook_endpoint_spec.rb @@ -5,5 +5,9 @@ require 'spec_helper' RSpec.describe WebhookEndpoint do describe "validations" do it { is_expected.to validate_presence_of(:url) } + it { + is_expected.to validate_inclusion_of(:webhook_type) + .in_array(%w(order_cycle_opened payment_status_changed)) + } end end From d6ef56af6e7702653de1266db44d20f380c69859 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 25 Nov 2025 14:43:08 +1100 Subject: [PATCH 010/270] Fix existing code to support webhook_type --- app/controllers/webhook_endpoints_controller.rb | 2 +- app/models/webhook_endpoint.rb | 3 +++ app/services/order_cycles/webhook_service.rb | 6 ++++-- .../spree/users/_webhook_endpoints.html.haml | 6 ++++-- .../services/order_cycles/webhook_service_spec.rb | 15 ++++++++++----- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/controllers/webhook_endpoints_controller.rb b/app/controllers/webhook_endpoints_controller.rb index 44580391de..a696400b35 100644 --- a/app/controllers/webhook_endpoints_controller.rb +++ b/app/controllers/webhook_endpoints_controller.rb @@ -30,7 +30,7 @@ class WebhookEndpointsController < BaseController end def webhook_endpoint_params - params.require(:webhook_endpoint).permit(:url) + params.require(:webhook_endpoint).permit(:url, :webhook_type) end def redirect_path diff --git a/app/models/webhook_endpoint.rb b/app/models/webhook_endpoint.rb index 4c5d45dcef..03268f5acf 100644 --- a/app/models/webhook_endpoint.rb +++ b/app/models/webhook_endpoint.rb @@ -6,4 +6,7 @@ class WebhookEndpoint < ApplicationRecord validates :url, presence: true validates :webhook_type, presence: true, inclusion: { in: WEBHOOK_TYPES } + + scope :order_cycle_opened, -> { where(webhook_type: "order_cycle_opened") } + scope :payment_status, -> { where(webhook_type: "payment_status_changed") } end diff --git a/app/services/order_cycles/webhook_service.rb b/app/services/order_cycles/webhook_service.rb index b45c5c6e41..4fa6064800 100644 --- a/app/services/order_cycles/webhook_service.rb +++ b/app/services/order_cycles/webhook_service.rb @@ -11,10 +11,12 @@ module OrderCycles .merge(coordinator_name: order_cycle.coordinator.name) # Endpoints for coordinator owner - webhook_endpoints = order_cycle.coordinator.owner.webhook_endpoints + webhook_endpoints = order_cycle.coordinator.owner.webhook_endpoints.order_cycle_opened # Plus unique endpoints for distributor owners (ignore duplicates) - webhook_endpoints |= order_cycle.distributors.map(&:owner).flat_map(&:webhook_endpoints) + webhook_endpoints |= order_cycle.distributors.map(&:owner).flat_map { |owner| + owner.webhook_endpoints.order_cycle_opened + } webhook_endpoints.each do |endpoint| WebhookDeliveryJob.perform_later(endpoint.url, event, webhook_payload, at:) diff --git a/app/views/spree/users/_webhook_endpoints.html.haml b/app/views/spree/users/_webhook_endpoints.html.haml index 8bd60e2f8b..f9ec7aac60 100644 --- a/app/views/spree/users/_webhook_endpoints.html.haml +++ b/app/views/spree/users/_webhook_endpoints.html.haml @@ -10,8 +10,9 @@ %th= t('.url.header') %th.actions %tbody + -# TODO handle multiple endpoint and type and tooltip -# Existing endpoints - - @user.webhook_endpoints.each do |webhook_endpoint| + - @user.webhook_endpoints.order_cycle_opened.each do |webhook_endpoint| %tr %td= t('.event_types.order_cycle_opened') # For now, we only support one type. %td= webhook_endpoint.url @@ -23,11 +24,12 @@ = I18n.t(:delete) -# Create new - - if @user.webhook_endpoints.empty? # Only one allowed for now. + - if @user.webhook_endpoints.order_cycle_opened.empty? # Only one allowed for now. %tr %td= t('.event_types.order_cycle_opened') # For now, we only support one type. %td = form_for(@user.webhook_endpoints.build, url: account_webhook_endpoints_path, id: 'new_webhook_endpoint') do |f| = f.url_field :url, placeholder: t('.url.create_placeholder'), required: true, size: 64 + = f.hidden_field :webhook_type, value: "order_cycle_opened" %td.actions = button_tag t(:create), class: 'button primary tiny no-margin', form: 'new_webhook_endpoint' diff --git a/spec/services/order_cycles/webhook_service_spec.rb b/spec/services/order_cycles/webhook_service_spec.rb index a006d1e68e..d99cde6a8b 100644 --- a/spec/services/order_cycles/webhook_service_spec.rb +++ b/spec/services/order_cycles/webhook_service_spec.rb @@ -22,7 +22,8 @@ RSpec.describe OrderCycles::WebhookService do # The co-ordinating enterprise has a non-owner user with an endpoint. # They shouldn't receive a notification. coordinator_user = create(:user, enterprises: [coordinator]) - coordinator_user.webhook_endpoints.create!(url: "http://coordinator_user_url") + coordinator_user.webhook_endpoints.create!(url: "http://coordinator_user_url", + webhook_type: "order_cycle_opened") expect{ subject } .not_to enqueue_job(WebhookDeliveryJob).with("http://coordinator_user_url", any_args) @@ -30,7 +31,8 @@ RSpec.describe OrderCycles::WebhookService do context "coordinator owner has endpoint configured" do before do - coordinator.owner.webhook_endpoints.create! url: "http://coordinator_owner_url" + coordinator.owner.webhook_endpoints.create! url: "http://coordinator_owner_url", + webhook_type: "order_cycle_opened" end it "creates webhook payload for order cycle coordinator" do @@ -77,7 +79,8 @@ RSpec.describe OrderCycles::WebhookService do let(:two_distributors) { (1..2).map do |i| user = create(:user) - user.webhook_endpoints.create!(url: "http://distributor#{i}_owner_url") + user.webhook_endpoints.create!(url: "http://distributor#{i}_owner_url", + webhook_type: "order_cycle_opened") create(:distributor_enterprise, owner: user) end } @@ -109,7 +112,8 @@ RSpec.describe OrderCycles::WebhookService do } it "creates only one webhook payload for the user's endpoint" do - user.webhook_endpoints.create! url: "http://coordinator_owner_url" + user.webhook_endpoints.create! url: "http://coordinator_owner_url", + webhook_type: "order_cycle_opened" expect{ subject } .to enqueue_job(WebhookDeliveryJob).with("http://coordinator_owner_url", any_args) @@ -128,7 +132,8 @@ RSpec.describe OrderCycles::WebhookService do } let(:supplier) { user = create(:user) - user.webhook_endpoints.create!(url: "http://supplier_owner_url") + user.webhook_endpoints.create!(url: "http://supplier_owner_url", + webhook_type: "order_cycle_opened") create(:supplier_enterprise, owner: user) } From 23c57cb354301af4d7c8a25ae8f1964060e556bb Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 25 Nov 2025 16:48:53 +1100 Subject: [PATCH 011/270] Add UI to manage payment staus webhook endpoint --- .../webhook_endpoint_form_component.rb | 12 +++++++++ .../webhook_endpoint_form_component.html.haml | 22 ++++++++++++++++ .../spree/users/_webhook_endpoints.html.haml | 25 ++----------------- config/locales/en.yml | 9 ++++--- 4 files changed, 42 insertions(+), 26 deletions(-) create mode 100644 app/components/webhook_endpoint_form_component.rb create mode 100644 app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml diff --git a/app/components/webhook_endpoint_form_component.rb b/app/components/webhook_endpoint_form_component.rb new file mode 100644 index 0000000000..914eb22c61 --- /dev/null +++ b/app/components/webhook_endpoint_form_component.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class WebhookEndpointFormComponent < ViewComponent::Base + def initialize(webhooks:, webhook_type:) + @webhooks = webhooks + @webhook_type = webhook_type + end + + private + + attr_reader :webhooks, :webhook_type +end diff --git a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml new file mode 100644 index 0000000000..4f27faf025 --- /dev/null +++ b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml @@ -0,0 +1,22 @@ +-# Existing endpoints +- if webhooks.empty? # Only one allowed for now. + %tr + %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") + %td + = form_with(url: helpers.account_webhook_endpoints_path, id: "#{webhook_type}_webhook_endpoint") do |f| + = f.url_field :'webhook_endpoint[url]', id: "#{webhook_type}_webhook_endpoint_url", placeholder: t('components.webhook_endpoint_form.url.create_placeholder'), required: true, size: 64 + = f.hidden_field :'webhook_endpoint[webhook_type]', id: "#{webhook_type}_webhook_endpoint_webhook_type", value: webhook_type + %td.actions + = button_tag t(:create), class: 'button primary tiny no-margin', form: "#{webhook_type}_webhook_endpoint" + +- webhooks.each do |webhook_endpoint| + %tr + %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") + %td= webhook_endpoint.url + %td.actions + - if webhook_endpoint.persisted? + = button_to helpers.account_webhook_endpoint_path(webhook_endpoint), method: :delete, + class: "tiny alert no-margin", + data: { confirm: I18n.t(:are_you_sure) } do + = I18n.t(:delete) + diff --git a/app/views/spree/users/_webhook_endpoints.html.haml b/app/views/spree/users/_webhook_endpoints.html.haml index f9ec7aac60..1ca719a8bb 100644 --- a/app/views/spree/users/_webhook_endpoints.html.haml +++ b/app/views/spree/users/_webhook_endpoints.html.haml @@ -10,26 +10,5 @@ %th= t('.url.header') %th.actions %tbody - -# TODO handle multiple endpoint and type and tooltip - -# Existing endpoints - - @user.webhook_endpoints.order_cycle_opened.each do |webhook_endpoint| - %tr - %td= t('.event_types.order_cycle_opened') # For now, we only support one type. - %td= webhook_endpoint.url - %td.actions - - if webhook_endpoint.persisted? - = button_to account_webhook_endpoint_path(webhook_endpoint), method: :delete, - class: "tiny alert no-margin", - data: { confirm: I18n.t(:are_you_sure)} do - = I18n.t(:delete) - - -# Create new - - if @user.webhook_endpoints.order_cycle_opened.empty? # Only one allowed for now. - %tr - %td= t('.event_types.order_cycle_opened') # For now, we only support one type. - %td - = form_for(@user.webhook_endpoints.build, url: account_webhook_endpoints_path, id: 'new_webhook_endpoint') do |f| - = f.url_field :url, placeholder: t('.url.create_placeholder'), required: true, size: 64 - = f.hidden_field :webhook_type, value: "order_cycle_opened" - %td.actions - = button_tag t(:create), class: 'button primary tiny no-margin', form: 'new_webhook_endpoint' + = render WebhookEndpointFormComponent.new(webhooks: @user.webhook_endpoints.order_cycle_opened, webhook_type: "order_cycle_opened") + = render WebhookEndpointFormComponent.new(webhooks: @user.webhook_endpoints.payment_status, webhook_type: "payment_status_changed") diff --git a/config/locales/en.yml b/config/locales/en.yml index d3fe23123d..7b4e8fab31 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4938,13 +4938,10 @@ en: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remote webhook endpoint developer_settings: title: Developer Settings form: @@ -5093,6 +5090,12 @@ en: add_tag_rule_modal: select_rule_type: "Select a rule type:" add_rule: "Add Rule" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remote webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened + payment_status_changed: Post webhook on Payment status change # Gem to prevent bot form submissions From ac662de78904c0a15ffc5f42f28d55976b941410 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 25 Nov 2025 16:54:34 +1100 Subject: [PATCH 012/270] Fix spec use actual translation --- spec/system/consumer/account/developer_settings_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/system/consumer/account/developer_settings_spec.rb b/spec/system/consumer/account/developer_settings_spec.rb index 06b204d762..d1382fdde0 100644 --- a/spec/system/consumer/account/developer_settings_spec.rb +++ b/spec/system/consumer/account/developer_settings_spec.rb @@ -41,12 +41,12 @@ RSpec.describe "Developer Settings" do within "#webhook_endpoints" do fill_in "webhook_endpoint_url", with: "https://url" - click_button I18n.t(:create) - expect(page.document).to have_content I18n.t('webhook_endpoints.create.success') + click_button "Create" + expect(page.document).to have_content "Webhook endpoint successfully created" expect(page).to have_content "https://url" - click_button I18n.t(:delete) - expect(page.document).to have_content I18n.t('webhook_endpoints.destroy.success') + click_button "Delete" + expect(page.document).to have_content "Webhook endpoint successfully deleted" expect(page).not_to have_content "https://url" end end From 0ac4021729afe9eb806d7701149e8c0ecb86ceeb Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 26 Nov 2025 15:13:27 +1100 Subject: [PATCH 013/270] Update spec to include payment status webhook --- .../account/developer_settings_spec.rb | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/spec/system/consumer/account/developer_settings_spec.rb b/spec/system/consumer/account/developer_settings_spec.rb index d1382fdde0..dd0a264844 100644 --- a/spec/system/consumer/account/developer_settings_spec.rb +++ b/spec/system/consumer/account/developer_settings_spec.rb @@ -39,15 +39,30 @@ RSpec.describe "Developer Settings" do describe "Webhook Endpoints" do it "creates a new webhook endpoint and deletes it" do within "#webhook_endpoints" do - fill_in "webhook_endpoint_url", with: "https://url" + fill_in "order_cycle_opened_webhook_endpoint_url", with: "https://url" click_button "Create" expect(page.document).to have_content "Webhook endpoint successfully created" expect(page).to have_content "https://url" - click_button "Delete" + accept_confirm do + click_button "Delete" + end expect(page.document).to have_content "Webhook endpoint successfully deleted" expect(page).not_to have_content "https://url" + + within(:xpath, second_table_line) do + fill_in "payment_status_changed_webhook_endpoint_url", with: "https://url/payment" + click_button "Create" + end + expect(page.document).to have_content "Webhook endpoint successfully created" + expect(page).to have_content "https://url/payment" + + accept_confirm do + click_button "Delete" + end + expect(page.document).to have_content "Webhook endpoint successfully deleted" + expect(page).not_to have_content "https://urlpayment" end end end @@ -64,4 +79,9 @@ RSpec.describe "Developer Settings" do end end end + + def second_table_line + # It's actually the third line when you include the header + '(//tr)[3]' + end end From 7f961d90c296931a4919fe730a7351c9462e1fbd Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 28 Nov 2025 14:09:00 +1100 Subject: [PATCH 014/270] Enable active_job.use_big_decimal_serializer It prevents the following deprecation warning: DEPRECATION WARNING: Primitive serialization of BigDecimal job arguments is deprecated as it may serialize via .to_s using certain queue adapters. Enable config.active_job.use_big_decimal_serializer to use BigDecimalSerializer instead, which will be mandatory in Rails 7.2. --- config/initializers/new_framework_defaults_7_1.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/new_framework_defaults_7_1.rb b/config/initializers/new_framework_defaults_7_1.rb index 3dc295db6d..988fe1b3a5 100644 --- a/config/initializers/new_framework_defaults_7_1.rb +++ b/config/initializers/new_framework_defaults_7_1.rb @@ -93,7 +93,7 @@ # serializer. Therefore, this setting should only be enabled after all replicas # have been successfully upgraded to Rails 7.1. #++ -# Rails.application.config.active_job.use_big_decimal_serializer = true +Rails.application.config.active_job.use_big_decimal_serializer = true ### # Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or From 4a6ba29b99982ba253a42cf7a5052be2f31d70a8 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 28 Nov 2025 14:12:50 +1100 Subject: [PATCH 015/270] Add Payments::WebhookService It enqueues jobs to post the generated payload to the various configured webhook endpoints for payment status change --- app/services/payments/webhook_service.rb | 47 +++++++ .../services/payments/webhook_service_spec.rb | 124 ++++++++++++++++++ 2 files changed, 171 insertions(+) create mode 100644 app/services/payments/webhook_service.rb create mode 100644 spec/services/payments/webhook_service_spec.rb diff --git a/app/services/payments/webhook_service.rb b/app/services/payments/webhook_service.rb new file mode 100644 index 0000000000..451a073e3c --- /dev/null +++ b/app/services/payments/webhook_service.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +# Create a webhook payload for an payment status event. +# The payload will be delivered asynchronously. + +module Payments + class WebhookService + def self.create_webhook_job(payment:, event:, at:) + order = payment.order + enterprise = order.distributor + + line_items = order.line_items.map do |li| + li.slice(:quantity, :price) + .merge( + tax_category_name: li.tax_category&.name, + product_name: li.product.name, + name_to_display: li.display_name, + unit_to_display: li.unit_presentation + ) + end + + payload = { + payment: payment.slice(:updated_at, :amount, :state), + enterprise: enterprise.slice(:abn, :acn, :name) + .merge(address: enterprise.address.slice(:address1, :address2, :city, :zipcode)), + order: order.slice(:total, :currency).merge(line_items: line_items) + } + + coordinator = order.order_cycle.coordinator + webhook_urls(coordinator).each do |url| + WebhookDeliveryJob.perform_later(url, event, payload, at:) + end + end + + def self.webhook_urls(coordinator) + # url for coordinator owner + webhook_urls = coordinator.owner.webhook_endpoints.payment_status.map(&:url) + + # plus url for coordinator manager (ignore duplicate) + users_webhook_urls = coordinator.users.flat_map do |user| + user.webhook_endpoints.payment_status.map(&:url) + end + + webhook_urls | users_webhook_urls + end + end +end diff --git a/spec/services/payments/webhook_service_spec.rb b/spec/services/payments/webhook_service_spec.rb new file mode 100644 index 0000000000..e73216bd20 --- /dev/null +++ b/spec/services/payments/webhook_service_spec.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Payments::WebhookService do + let(:order) { create(:completed_order_with_totals, order_cycle: ) } + let(:order_cycle) { create(:simple_order_cycle) } + let(:payment) { create(:payment, :completed, amount: order.total, order:) } + let(:tax_category) { create(:tax_category) } + let(:at) { Time.zone.parse("2025-11-26 09:00:02") } + + subject { described_class.create_webhook_job(payment: payment, event: "payment.completed", at:) } + + describe "creating payloads" do + context "with order cycle coordinator owner webhook endpoints configured" do + before do + order.order_cycle.coordinator.owner.webhook_endpoints.create!( + url: "http://coordinator.payment.url", webhook_type: "payment_status_changed" + ) + end + + it "calls endpoint for the owner if the order cycle coordinator" do + expect{ subject } + .to enqueue_job(WebhookDeliveryJob).exactly(1).times + .with("http://coordinator.payment.url", "payment.completed", any_args) + end + + it "creates webhook payload with payment details" do + order.line_items.update_all(tax_category_id: tax_category.id) + + enterprise = order.distributor + line_items = order.line_items.map do |li| + { + quantity: li.quantity, + price: li.price, + tax_category_name: li.tax_category&.name, + product_name: li.product.name, + name_to_display: li.display_name, + unit_to_display: li.unit_presentation # TODO check this + } + end + + data = { + payment: { + updated_at: payment.updated_at, + amount: payment.amount, + state: payment.state + }, + enterprise: { + abn: enterprise.abn, + acn: enterprise.acn, + name: enterprise.name, + address: { + address1: enterprise.address.address1, + address2: enterprise.address.address2, + city: enterprise.address.city, + zipcode: enterprise.address.zipcode + } + }, + order: { + total: order.total, + currency: order.currency, + line_items: line_items + } + } + + expect{ subject } + .to enqueue_job(WebhookDeliveryJob).exactly(1).times + .with("http://coordinator.payment.url", "payment.completed", hash_including(data), at:) + end + + context "with coordinator manager with webhook endpoint configured" do + let(:user1) { create(:user) } + let(:user2) { create(:user) } + + before do + coordinator = order.order_cycle.coordinator + coordinator.users << user1 + coordinator.users << user2 + end + + it "calls endpoint for all user managing the order cycle coordinator" do + user1.webhook_endpoints.create!( + url: "http://user1.payment.url", webhook_type: "payment_status_changed" + ) + user2.webhook_endpoints.create!( + url: "http://user2.payment.url", webhook_type: "payment_status_changed" + ) + + expect{ subject } + .to enqueue_job(WebhookDeliveryJob) + .with("http://coordinator.payment.url", "payment.completed", any_args) + .and enqueue_job(WebhookDeliveryJob) + .with("http://user1.payment.url", "payment.completed", any_args) + .and enqueue_job(WebhookDeliveryJob) + .with("http://user2.payment.url", "payment.completed", any_args) + end + + context "wiht duplicate webhook endpoints configured" do + it "calls each unique configured endpoint" do + user1.webhook_endpoints.create!( + url: "http://coordinator.payment.url", webhook_type: "payment_status_changed" + ) + user2.webhook_endpoints.create!( + url: "http://user2.payment.url", webhook_type: "payment_status_changed" + ) + + expect{ subject } + .to enqueue_job(WebhookDeliveryJob) + .with("http://coordinator.payment.url", "payment.completed", any_args) + .and enqueue_job(WebhookDeliveryJob) + .with("http://user2.payment.url", "payment.completed", any_args) + end + end + end + end + + context "with no webhook configured" do + it "does not call endpoint" do + expect{ subject }.not_to enqueue_job(WebhookDeliveryJob) + end + end + end +end From a38023475c7fa9ab7a70add87533c9682131e8dd Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 1 Dec 2025 16:29:22 +1100 Subject: [PATCH 016/270] Trigger payment webhook when a payment status changes It used ActiveSupport::Notifications and a listener : StatusChangedListenerService to trigger the WebhookService --- app/models/spree/payment.rb | 19 +++++++++++++++ .../status_changed_listener_service.rb | 13 ++++++++++ config/application.rb | 9 +++++-- spec/models/spree/payment_spec.rb | 7 ++++++ .../status_changed_listener_service_spec.rb | 24 +++++++++++++++++++ 5 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 app/services/payments/status_changed_listener_service.rb create mode 100644 spec/services/payments/status_changed_listener_service_spec.rb diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index b68595c801..f198e122bd 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -101,6 +101,25 @@ module Spree end after_transition to: :completed, do: :set_captured_at + after_transition do |payment, transition| + # Catch any exceptions to prevent any rollback potentially + # preventing payment from going through + ActiveSupport::Notifications.instrument( + "ofn.payment_transition", payment: payment, event: transition.to + ) + rescue StandardError => e + Alert.raise( + e, + metadata: { + event_tye: "ofn.payment_transition", payment_id: payment.id, event: transition.to + } + ) + ensure + Rails.logger.fatal "ActiveSupport::Notification.instrument failed params: " \ + " " \ + " " \ + "" + end end def money diff --git a/app/services/payments/status_changed_listener_service.rb b/app/services/payments/status_changed_listener_service.rb new file mode 100644 index 0000000000..086f81c5da --- /dev/null +++ b/app/services/payments/status_changed_listener_service.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +# Called by "ActiveSupport::Notifications" when an "ofn.payment_transition" occurs +# Event originate from Spree::Payment event machine +# +module Payments + class StatusChangedListenerService + def call(_name, started, _finished, _unique_id, payload) + event = "payment.#{payload[:event]}" + Payments::WebhookService.create_webhook_job(payment: payload[:payment], event:, at: started) + end + end +end diff --git a/config/application.rb b/config/application.rb index 97d69a606b..6de448f6eb 100644 --- a/config/application.rb +++ b/config/application.rb @@ -58,10 +58,15 @@ module Openfoodnetwork Spree::Core::Engine.routes.default_url_options[:host] = ENV["SITE_URL"] if Rails.env == 'test' end - # We reload the routes here - # so that the appended/prepended routes are available to the application. config.after_initialize do + # We reload the routes here + # so that the appended/prepended routes are available to the application. Rails.application.routes_reloader.reload! + + # Subscribe to payment transition events + ActiveSupport::Notifications.subscribe( + "ofn.payment_transition", Payments::StatusChangedListenerService.new + ) end initializer "spree.environment", before: :load_config_initializers do |app| diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 18050ebf13..7f060f0b13 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -3,6 +3,13 @@ require 'spec_helper' RSpec.describe Spree::Payment do + before do + # mock the call with "ofn.payment_transition" so we don't call the related listener and services + allow(ActiveSupport::Notifications).to receive(:instrument).and_call_original + allow(ActiveSupport::Notifications).to receive(:instrument) + .with("ofn.payment_transition", any_args).and_return(nil) + end + context 'original specs from Spree' do before { Stripe.api_key = "sk_test_12345" } let(:order) { create(:order) } diff --git a/spec/services/payments/status_changed_listener_service_spec.rb b/spec/services/payments/status_changed_listener_service_spec.rb new file mode 100644 index 0000000000..114635fc7a --- /dev/null +++ b/spec/services/payments/status_changed_listener_service_spec.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Payments::StatusChangedListenerService do + let(:name) { "ofn.payment_transition" } + let(:started) { Time.zone.parse("2025-11-28 09:00:00") } + let(:finished) { Time.zone.parse("2025-11-28 09:00:02") } + let(:unique_id) { "d3a7ac9f635755fcff2c" } + let(:payload) { { payment:, event: "completed" } } + let(:payment) { build(:payment) } + + subject { described_class.new } + + describe "#call" do + it "calls Payments::WebhookService" do + expect(Payments::WebhookService).to receive(:create_webhook_job).with( + payment:, event: "payment.completed", at: started + ) + + subject.call(name, started, finished, unique_id, payload) + end + end +end From efcb442a80359f6bfad711a5271973bb96984ecf Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 2 Dec 2025 15:11:40 +1100 Subject: [PATCH 017/270] Add spec to test notification is triggered --- spec/models/spree/payment_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 7f060f0b13..6b7dda5d04 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1071,4 +1071,17 @@ RSpec.describe Spree::Payment do expect(payment.captured_at).to be_present end end + + describe "payment transition" do + it "notifies of payment status change" do + payment = create(:payment) + + allow(ActiveSupport::Notifications).to receive(:instrument).and_call_original + expect(ActiveSupport::Notifications).to receive(:instrument).with( + "ofn.payment_transition", payment: payment, event: "processing" + ) + + payment.started_processing! + end + end end From e0bc8f9cdce7124ac1722da357c88e8f3f1734a5 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 2 Dec 2025 13:19:15 +1100 Subject: [PATCH 018/270] Fix webhook endpoints controller spec --- .../webhook_endpoints_controller_spec.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/spec/controllers/webhook_endpoints_controller_spec.rb b/spec/controllers/webhook_endpoints_controller_spec.rb index 4eb2e50f1a..65fa59dcb4 100644 --- a/spec/controllers/webhook_endpoints_controller_spec.rb +++ b/spec/controllers/webhook_endpoints_controller_spec.rb @@ -11,14 +11,16 @@ RSpec.describe WebhookEndpointsController do describe "#create" do it "creates a webhook_endpoint" do expect { - spree_post :create, { url: "https://url" } + spree_post :create, { url: "https://url", webhook_type: "order_cycle_opened" } }.to change { user.webhook_endpoints.count }.by(1) expect(flash[:success]).to be_present expect(flash[:error]).to be_blank - expect(user.webhook_endpoints.first.url).to eq "https://url" + webhook = user.webhook_endpoints.first + expect(webhook.url).to eq "https://url" + expect(webhook.webhook_type).to eq "order_cycle_opened" end it "shows error if parameters not specified" do @@ -33,17 +35,20 @@ RSpec.describe WebhookEndpointsController do end it "redirects back to referrer" do - spree_post :create, { url: "https://url" } + spree_post :create, { url: "https://url", webhook_type: "order_cycle_opened" } expect(response).to redirect_to "/account#/developer_settings" end end describe "#destroy" do - let!(:webhook_endpoint) { user.webhook_endpoints.create(url: "https://url") } + let!(:webhook_endpoint) { + user.webhook_endpoints.create(url: "https://url", webhook_type: "order_cycle_opened") + } it "destroys a webhook_endpoint" do - webhook_endpoint2 = user.webhook_endpoints.create!(url: "https://url2") + webhook_endpoint2 = user.webhook_endpoints.create!(url: "https://url2", + webhook_type: "order_cycle_opened") expect { spree_delete :destroy, { id: webhook_endpoint.id } From 72085be896ab6f6693df44c991a39eb7d5d53608 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 2 Dec 2025 14:17:33 +1100 Subject: [PATCH 019/270] Format account.scss with prettier --- app/webpacker/css/darkswarm/account.scss | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/app/webpacker/css/darkswarm/account.scss b/app/webpacker/css/darkswarm/account.scss index 782c97cc32..8c067f87d9 100644 --- a/app/webpacker/css/darkswarm/account.scss +++ b/app/webpacker/css/darkswarm/account.scss @@ -9,7 +9,8 @@ } } - .saved_cards, .no_cards { + .saved_cards, + .no_cards { margin-bottom: 1em; } @@ -26,7 +27,7 @@ } } - .authorised_shops{ + .authorised_shops { table { width: 100%; } @@ -39,7 +40,9 @@ a { color: $clr-brick; - &:hover, &:active, &:focus { + &:hover, + &:active, + &:focus { color: $clr-brick-med-bright; } } @@ -60,7 +63,8 @@ } } - i.ofn-i_059-producer, i.ofn-i_060-producer-reversed { + i.ofn-i_059-producer, + i.ofn-i_060-producer-reversed { font-size: 3rem; display: inline-block; margin-right: 0.25rem; @@ -92,7 +96,8 @@ visibility: hidden; } - .transaction-group {} + .transaction-group { + } table { border-radius: $radius-medium $radius-medium 0 0; @@ -161,6 +166,6 @@ table { // // Unfortunately we can't use Scss's interpolation // https://sass-lang.com/documentation/interpolation. We're using a too old version perhaps? - right: calc(12px + 2*2px + 2*1px); + right: calc(12px + 2 * 2px + 2 * 1px); } } From 5e4df41ec80fb3e56ffeb461237622aaf95c13d3 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 2 Dec 2025 16:05:44 +1100 Subject: [PATCH 020/270] Add button to send test data to endpoint It will allow a user to easily test the endpoint --- .../webhook_endpoint_form_component.html.haml | 7 ++- .../webhook_endpoints_controller.rb | 51 ++++++++++++++++++- app/webpacker/css/darkswarm/account.scss | 9 ++++ config/locales/en.yml | 4 +- config/routes/spree.rb | 1 + .../webhook_endpoints_controller_spec.rb | 18 +++++++ 6 files changed, 86 insertions(+), 4 deletions(-) diff --git a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml index 4f27faf025..1c715b51a6 100644 --- a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml +++ b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml @@ -1,7 +1,7 @@ -# Existing endpoints - if webhooks.empty? # Only one allowed for now. %tr - %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") + %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") %td = form_with(url: helpers.account_webhook_endpoints_path, id: "#{webhook_type}_webhook_endpoint") do |f| = f.url_field :'webhook_endpoint[url]', id: "#{webhook_type}_webhook_endpoint_url", placeholder: t('components.webhook_endpoint_form.url.create_placeholder'), required: true, size: 64 @@ -13,10 +13,13 @@ %tr %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") %td= webhook_endpoint.url - %td.actions + %td.actions.endpoints-actions - if webhook_endpoint.persisted? = button_to helpers.account_webhook_endpoint_path(webhook_endpoint), method: :delete, class: "tiny alert no-margin", data: { confirm: I18n.t(:are_you_sure) } do = I18n.t(:delete) + = form_tag helpers.webhook_endpoint_test_account_path(webhook_endpoint), class: "button_to", 'data-turbo': true do + = button_tag type: "submit", class: "tiny alert no-margin", data: { confirm: I18n.t(:are_you_sure) } do + = I18n.t("components.webhook_endpoint_form.test_endpoint") diff --git a/app/controllers/webhook_endpoints_controller.rb b/app/controllers/webhook_endpoints_controller.rb index a696400b35..730362df57 100644 --- a/app/controllers/webhook_endpoints_controller.rb +++ b/app/controllers/webhook_endpoints_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class WebhookEndpointsController < BaseController - before_action :load_resource, only: :destroy + before_action :load_resource, only: [:destroy, :test] def create webhook_endpoint = spree_current_user.webhook_endpoints.new(webhook_endpoint_params) @@ -25,6 +25,55 @@ class WebhookEndpointsController < BaseController redirect_to redirect_path end + def test # rubocop:disable Metrics/MethodLength + at = Time.zone.now + test_payload = { + payment: { + updated_at: at, + amount: 0.00, + state: "completed" + }, + enterprise: { + abn: "65797115831", + acn: "", + name: "TEST Enterprise", + address: { + address1: "1 testing street", + address2: "", + city: "TestCity", + zipcode: "1234" + } + }, + order: { + total: 0.00, + currency: "AUD", + line_items: [ + { + quantity: 1, + price: 20.00, + tax_category_name: "VAT", + product_name: "Test product", + name_to_display: "", + unit_to_display: "1kg" + } + ] + } + } + + WebhookDeliveryJob.perform_later(@webhook_endpoint.url, "payment.completed", test_payload, at:) + + flash[:success] = t(".success") + respond_with do |format| + format.turbo_stream do + render turbo_stream: turbo_stream.update( + :flashes, partial: "shared/flashes", locals: { flashes: flash } + ) + end + end + end + + private + def load_resource @webhook_endpoint = spree_current_user.webhook_endpoints.find(params[:id]) end diff --git a/app/webpacker/css/darkswarm/account.scss b/app/webpacker/css/darkswarm/account.scss index 8c067f87d9..6cb24bf05b 100644 --- a/app/webpacker/css/darkswarm/account.scss +++ b/app/webpacker/css/darkswarm/account.scss @@ -169,3 +169,12 @@ table { right: calc(12px + 2 * 2px + 2 * 1px); } } + +// Webhook Endpoints +td.endpoints-actions { + display: flex; + + form { + padding-right: $padding-small; + } +} diff --git a/config/locales/en.yml b/config/locales/en.yml index 7b4e8fab31..3082e4e0bf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4088,6 +4088,8 @@ en: destroy: success: Webhook endpoint successfully deleted error: Webhook endpoint failed to delete + test: + success: Some test data has been sent to the webhook url spree: order_updated: "Order Updated" @@ -5096,7 +5098,7 @@ en: event_types: order_cycle_opened: Order Cycle Opened payment_status_changed: Post webhook on Payment status change - + test_endpoint: Test webhook endpoint # Gem to prevent bot form submissions invisible_captcha: diff --git a/config/routes/spree.rb b/config/routes/spree.rb index 512f708b14..66eb12ede9 100644 --- a/config/routes/spree.rb +++ b/config/routes/spree.rb @@ -34,6 +34,7 @@ Spree::Core::Engine.routes.draw do resource :account, :controller => 'users' do resources :webhook_endpoints, only: [:create, :destroy], controller: '/webhook_endpoints' + post '/webhook_endpoints/:id/test', to: "/webhook_endpoints#test", as: "webhook_endpoint_test" end match '/admin/orders/bulk_management' => 'admin/orders#bulk_management', :as => "admin_bulk_order_management", via: :get diff --git a/spec/controllers/webhook_endpoints_controller_spec.rb b/spec/controllers/webhook_endpoints_controller_spec.rb index 65fa59dcb4..9cac19f5d5 100644 --- a/spec/controllers/webhook_endpoints_controller_spec.rb +++ b/spec/controllers/webhook_endpoints_controller_spec.rb @@ -69,4 +69,22 @@ RSpec.describe WebhookEndpointsController do expect(response).to redirect_to "/account#/developer_settings" end end + + describe "#test" do + let(:webhook_endpoint) { + user.webhook_endpoints.create(url: "https://url", webhook_type: "payment_status_changed" ) + } + + subject { spree_post :test, id: webhook_endpoint.id, format: :turbo_stream } + + it "enqueus a webhook job" do + expect { subject }.to enqueue_job(WebhookDeliveryJob).exactly(1).times + end + + it "shows a success mesage" do + subject + + expect(flash[:success]).to eq "Some test data has been sent to the webhook url" + end + end end From 0b497fbb778cf78d0a2e4fd413e82baddf28622c Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 2 Dec 2025 16:09:47 +1100 Subject: [PATCH 021/270] Fix order payment spec --- spec/models/spree/order/payment_spec.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spec/models/spree/order/payment_spec.rb b/spec/models/spree/order/payment_spec.rb index a3527849ba..3c61d7fe93 100644 --- a/spec/models/spree/order/payment_spec.rb +++ b/spec/models/spree/order/payment_spec.rb @@ -35,6 +35,12 @@ module Spree } before do + # mock the call with "ofn.payment_transition" so we don't call the related listener + # and services + allow(ActiveSupport::Notifications).to receive(:instrument).and_call_original + allow(ActiveSupport::Notifications).to receive(:instrument) + .with("ofn.payment_transition", any_args).and_return(nil) + allow(order).to receive_message_chain(:line_items, :empty?).and_return(false) allow(order).to receive_messages total: 100 stub_request(:get, "https://api.stripe.com/v1/payment_intents/12345"). From 73b27f14ab8a1a6235cdd2cfb026eb9772f8969e Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 3 Dec 2025 13:36:27 +1100 Subject: [PATCH 022/270] Per review, fix comment --- .../webhook_endpoint_form_component.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml index 1c715b51a6..1ad729b18c 100644 --- a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml +++ b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml @@ -1,4 +1,4 @@ --# Existing endpoints +-# Create new endpoints - if webhooks.empty? # Only one allowed for now. %tr %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") @@ -9,6 +9,7 @@ %td.actions = button_tag t(:create), class: 'button primary tiny no-margin', form: "#{webhook_type}_webhook_endpoint" +-# Existing endpoints - webhooks.each do |webhook_endpoint| %tr %td= t("components.webhook_endpoint_form.event_types.#{webhook_type}") From 377f33b64f0a209558166676e74a5822bacb2987 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 3 Dec 2025 14:12:30 +1100 Subject: [PATCH 023/270] Use a better selector to pick table row --- .../account/developer_settings_spec.rb | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/spec/system/consumer/account/developer_settings_spec.rb b/spec/system/consumer/account/developer_settings_spec.rb index dd0a264844..6c9c57f6bf 100644 --- a/spec/system/consumer/account/developer_settings_spec.rb +++ b/spec/system/consumer/account/developer_settings_spec.rb @@ -39,30 +39,33 @@ RSpec.describe "Developer Settings" do describe "Webhook Endpoints" do it "creates a new webhook endpoint and deletes it" do within "#webhook_endpoints" do - fill_in "order_cycle_opened_webhook_endpoint_url", with: "https://url" + within(:table_row, ["Order Cycle Opened"]) do + fill_in "order_cycle_opened_webhook_endpoint_url", with: "https://url" - click_button "Create" - expect(page.document).to have_content "Webhook endpoint successfully created" - expect(page).to have_content "https://url" + click_button "Create" + expect(page.document).to have_content "Webhook endpoint successfully created" + expect(page).to have_content "https://url" - accept_confirm do - click_button "Delete" + accept_confirm do + click_button "Delete" + end end expect(page.document).to have_content "Webhook endpoint successfully deleted" expect(page).not_to have_content "https://url" - within(:xpath, second_table_line) do + within(:table_row, ["Post webhook on Payment status change"]) do fill_in "payment_status_changed_webhook_endpoint_url", with: "https://url/payment" click_button "Create" - end - expect(page.document).to have_content "Webhook endpoint successfully created" - expect(page).to have_content "https://url/payment" + expect(page.document).to have_content "Webhook endpoint successfully created" + expect(page).to have_content "https://url/payment" - accept_confirm do - click_button "Delete" + accept_confirm do + click_button "Delete" + end end + expect(page.document).to have_content "Webhook endpoint successfully deleted" - expect(page).not_to have_content "https://urlpayment" + expect(page).not_to have_content "https://url/payment" end end end @@ -79,9 +82,4 @@ RSpec.describe "Developer Settings" do end end end - - def second_table_line - # It's actually the third line when you include the header - '(//tr)[3]' - end end From f6a7225c477ce1de7354e4a238e1826b1607b3d0 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 3 Dec 2025 14:24:35 +1100 Subject: [PATCH 024/270] Per review, remove the ensure --- app/models/spree/payment.rb | 9 ++++----- spec/services/payments/webhook_service_spec.rb | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index f198e122bd..da38a29665 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -108,17 +108,16 @@ module Spree "ofn.payment_transition", payment: payment, event: transition.to ) rescue StandardError => e + Rails.logger.fatal "ActiveSupport::Notification.instrument failed params: " \ + " " \ + " " \ + "" Alert.raise( e, metadata: { event_tye: "ofn.payment_transition", payment_id: payment.id, event: transition.to } ) - ensure - Rails.logger.fatal "ActiveSupport::Notification.instrument failed params: " \ - " " \ - " " \ - "" end end diff --git a/spec/services/payments/webhook_service_spec.rb b/spec/services/payments/webhook_service_spec.rb index e73216bd20..a4893d31fd 100644 --- a/spec/services/payments/webhook_service_spec.rb +++ b/spec/services/payments/webhook_service_spec.rb @@ -36,7 +36,7 @@ RSpec.describe Payments::WebhookService do tax_category_name: li.tax_category&.name, product_name: li.product.name, name_to_display: li.display_name, - unit_to_display: li.unit_presentation # TODO check this + unit_to_display: li.unit_presentation } end From d7505bcef43880f5f678bd3357038348dd1d3a10 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 3 Dec 2025 17:06:45 +1100 Subject: [PATCH 025/270] Add Payments::WebhookPayload to manage payload data It includes test data so any change in the payload should not affect the test webhook enpoint functionality --- .../webhook_endpoints_controller.rb | 35 +------ app/services/payments/webhook_payload.rb | 84 ++++++++++++++++ app/services/payments/webhook_service.rb | 21 +--- .../services/payments/webhook_payload_spec.rb | 95 +++++++++++++++++++ 4 files changed, 183 insertions(+), 52 deletions(-) create mode 100644 app/services/payments/webhook_payload.rb create mode 100644 spec/services/payments/webhook_payload_spec.rb diff --git a/app/controllers/webhook_endpoints_controller.rb b/app/controllers/webhook_endpoints_controller.rb index 730362df57..f78c101484 100644 --- a/app/controllers/webhook_endpoints_controller.rb +++ b/app/controllers/webhook_endpoints_controller.rb @@ -25,40 +25,9 @@ class WebhookEndpointsController < BaseController redirect_to redirect_path end - def test # rubocop:disable Metrics/MethodLength + def test at = Time.zone.now - test_payload = { - payment: { - updated_at: at, - amount: 0.00, - state: "completed" - }, - enterprise: { - abn: "65797115831", - acn: "", - name: "TEST Enterprise", - address: { - address1: "1 testing street", - address2: "", - city: "TestCity", - zipcode: "1234" - } - }, - order: { - total: 0.00, - currency: "AUD", - line_items: [ - { - quantity: 1, - price: 20.00, - tax_category_name: "VAT", - product_name: "Test product", - name_to_display: "", - unit_to_display: "1kg" - } - ] - } - } + test_payload = Payments::WebhookPayload.test_data.to_hash WebhookDeliveryJob.perform_later(@webhook_endpoint.url, "payment.completed", test_payload, at:) diff --git a/app/services/payments/webhook_payload.rb b/app/services/payments/webhook_payload.rb new file mode 100644 index 0000000000..92745fd1ff --- /dev/null +++ b/app/services/payments/webhook_payload.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +module Payments + class WebhookPayload + def initialize(payment:, order:, enterprise:) + @payment = payment + @order = order + @enterprise = enterprise + end + + def to_hash + { + payment: @payment.slice(:updated_at, :amount, :state), + enterprise: @enterprise.slice(:abn, :acn, :name) + .merge(address: @enterprise.address.slice(:address1, :address2, :city, :zipcode)), + order: @order.slice(:total, :currency).merge(line_items: line_items) + }.with_indifferent_access + end + + def self.test_data + new(payment: test_payment, order: test_order, enterprise: test_enterprise) + end + + def self.test_payment + { + updated_at: Time.zone.now, + amount: 0.00, + state: "completed" + } + end + + def self.test_order + order = Spree::Order.new( + total: 0.00, + currency: "AUD", + ) + + tax_category = Spree::TaxCategory.new(name: "VAT") + product = Spree::Product.new(name: "Test product") + Spree::Variant.new(product:, display_name: "") + order.line_items << Spree::LineItem.new( + quantity: 1, + price: 20.00, + tax_category:, + product:, + unit_presentation: "1kg" + ) + + order + end + + def self.test_enterprise + enterprise = Enterprise.new( + abn: "65797115831", + acn: "", + name: "TEST Enterprise", + ) + enterprise.address = Spree::Address.new( + address1: "1 testing street", + address2: "", + city: "TestCity", + zipcode: "1234" + ) + + enterprise + end + + private_class_method :test_payment, :test_order, :test_enterprise + + private + + def line_items + @order.line_items.map do |li| + li.slice(:quantity, :price) + .merge( + tax_category_name: li.tax_category&.name, + product_name: li.product.name, + name_to_display: li.display_name, + unit_to_display: li.unit_presentation + ) + end + end + end +end diff --git a/app/services/payments/webhook_service.rb b/app/services/payments/webhook_service.rb index 451a073e3c..427811d3b6 100644 --- a/app/services/payments/webhook_service.rb +++ b/app/services/payments/webhook_service.rb @@ -7,26 +7,9 @@ module Payments class WebhookService def self.create_webhook_job(payment:, event:, at:) order = payment.order - enterprise = order.distributor + payload = WebhookPayload.new(payment:, order:, enterprise: order.distributor).to_hash - line_items = order.line_items.map do |li| - li.slice(:quantity, :price) - .merge( - tax_category_name: li.tax_category&.name, - product_name: li.product.name, - name_to_display: li.display_name, - unit_to_display: li.unit_presentation - ) - end - - payload = { - payment: payment.slice(:updated_at, :amount, :state), - enterprise: enterprise.slice(:abn, :acn, :name) - .merge(address: enterprise.address.slice(:address1, :address2, :city, :zipcode)), - order: order.slice(:total, :currency).merge(line_items: line_items) - } - - coordinator = order.order_cycle.coordinator + coordinator = payment.order.order_cycle.coordinator webhook_urls(coordinator).each do |url| WebhookDeliveryJob.perform_later(url, event, payload, at:) end diff --git a/spec/services/payments/webhook_payload_spec.rb b/spec/services/payments/webhook_payload_spec.rb new file mode 100644 index 0000000000..936fb49a86 --- /dev/null +++ b/spec/services/payments/webhook_payload_spec.rb @@ -0,0 +1,95 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Payments::WebhookPayload do + describe "#to_hash" do + let(:order) { create(:completed_order_with_totals, order_cycle: ) } + let(:order_cycle) { create(:simple_order_cycle) } + let(:payment) { create(:payment, :completed, amount: order.total, order:) } + let(:tax_category) { create(:tax_category) } + + subject { described_class.new(payment:, order:, enterprise: order.distributor) } + + it "returns a formated hash" do + order.line_items.update_all(tax_category_id: tax_category.id) + + enterprise = order.distributor + line_items = order.line_items.map do |li| + { + quantity: li.quantity, + price: li.price, + tax_category_name: li.tax_category&.name, + product_name: li.product.name, + name_to_display: li.display_name, + unit_to_display: li.unit_presentation + } + end + + payload = { + payment: { + updated_at: payment.updated_at, + amount: payment.amount, + state: payment.state + }, + enterprise: { + abn: enterprise.abn, + acn: enterprise.acn, + name: enterprise.name, + address: { + address1: enterprise.address.address1, + address2: enterprise.address.address2, + city: enterprise.address.city, + zipcode: enterprise.address.zipcode + } + }, + order: { + total: order.total, + currency: order.currency, + line_items: line_items + } + }.with_indifferent_access + + expect(subject.to_hash).to eq(payload) + end + end + + describe ".test_data" do + it "returns a hash with test data" do + test_payload = { + payment: { + updated_at: kind_of(Time), + amount: 0.00, + state: "completed" + }, + enterprise: { + abn: "65797115831", + acn: "", + name: "TEST Enterprise", + address: { + address1: "1 testing street", + address2: "", + city: "TestCity", + zipcode: "1234" + } + }, + order: { + total: 0.00, + currency: "AUD", + line_items: [ + { + quantity: 1, + price: 20.00.to_d, + tax_category_name: "VAT", + product_name: "Test product", + name_to_display: nil, + unit_to_display: "1kg" + } + ] + } + }.with_indifferent_access + + expect(described_class.test_data.to_hash).to match(test_payload) + end + end +end From 4073238654f8048245f5ee9cdb2c055b146ca493 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 5 Dec 2025 10:47:19 +1100 Subject: [PATCH 026/270] Per review, fix test webhook - only show button for payment status changed webhook - update translation --- app/components/webhook_endpoint_form_component.rb | 4 ++++ .../webhook_endpoint_form_component.html.haml | 7 ++++--- config/locales/en.yml | 2 +- spec/controllers/webhook_endpoints_controller_spec.rb | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/components/webhook_endpoint_form_component.rb b/app/components/webhook_endpoint_form_component.rb index 914eb22c61..eff832f707 100644 --- a/app/components/webhook_endpoint_form_component.rb +++ b/app/components/webhook_endpoint_form_component.rb @@ -9,4 +9,8 @@ class WebhookEndpointFormComponent < ViewComponent::Base private attr_reader :webhooks, :webhook_type + + def is_webhook_payment_status? + webhook_type == "payment_status_changed" + end end diff --git a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml index 1ad729b18c..80f0147043 100644 --- a/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml +++ b/app/components/webhook_endpoint_form_component/webhook_endpoint_form_component.html.haml @@ -21,6 +21,7 @@ data: { confirm: I18n.t(:are_you_sure) } do = I18n.t(:delete) - = form_tag helpers.webhook_endpoint_test_account_path(webhook_endpoint), class: "button_to", 'data-turbo': true do - = button_tag type: "submit", class: "tiny alert no-margin", data: { confirm: I18n.t(:are_you_sure) } do - = I18n.t("components.webhook_endpoint_form.test_endpoint") + - if is_webhook_payment_status? + = form_tag helpers.webhook_endpoint_test_account_path(webhook_endpoint), class: "button_to", 'data-turbo': true do + = button_tag type: "submit", class: "tiny alert no-margin", data: { confirm: I18n.t(:are_you_sure) } do + = I18n.t("components.webhook_endpoint_form.test_endpoint") diff --git a/config/locales/en.yml b/config/locales/en.yml index 3082e4e0bf..aa44a7c2e6 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4089,7 +4089,7 @@ en: success: Webhook endpoint successfully deleted error: Webhook endpoint failed to delete test: - success: Some test data has been sent to the webhook url + success: Some test data will be sent to the webhook url spree: order_updated: "Order Updated" diff --git a/spec/controllers/webhook_endpoints_controller_spec.rb b/spec/controllers/webhook_endpoints_controller_spec.rb index 9cac19f5d5..d1db36d53b 100644 --- a/spec/controllers/webhook_endpoints_controller_spec.rb +++ b/spec/controllers/webhook_endpoints_controller_spec.rb @@ -84,7 +84,7 @@ RSpec.describe WebhookEndpointsController do it "shows a success mesage" do subject - expect(flash[:success]).to eq "Some test data has been sent to the webhook url" + expect(flash[:success]).to eq "Some test data will be sent to the webhook url" end end end From 584b976dffdb52ee3acd465568956f23d6e321d5 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 8 Dec 2025 16:20:27 +1100 Subject: [PATCH 027/270] Per review, small code improvment --- app/services/payments/webhook_service.rb | 6 +++--- .../order_cycles/webhook_service_spec.rb | 15 +++++--------- .../services/payments/webhook_payload_spec.rb | 2 +- .../services/payments/webhook_service_spec.rb | 20 ++++++------------- 4 files changed, 15 insertions(+), 28 deletions(-) diff --git a/app/services/payments/webhook_service.rb b/app/services/payments/webhook_service.rb index 427811d3b6..2997e7a394 100644 --- a/app/services/payments/webhook_service.rb +++ b/app/services/payments/webhook_service.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -# Create a webhook payload for an payment status event. +# Create a webhook payload for a payment status event. # The payload will be delivered asynchronously. module Payments @@ -17,11 +17,11 @@ module Payments def self.webhook_urls(coordinator) # url for coordinator owner - webhook_urls = coordinator.owner.webhook_endpoints.payment_status.map(&:url) + webhook_urls = coordinator.owner.webhook_endpoints.payment_status.pluck(:url) # plus url for coordinator manager (ignore duplicate) users_webhook_urls = coordinator.users.flat_map do |user| - user.webhook_endpoints.payment_status.map(&:url) + user.webhook_endpoints.payment_status.pluck(:url) end webhook_urls | users_webhook_urls diff --git a/spec/services/order_cycles/webhook_service_spec.rb b/spec/services/order_cycles/webhook_service_spec.rb index d99cde6a8b..015b10d4b8 100644 --- a/spec/services/order_cycles/webhook_service_spec.rb +++ b/spec/services/order_cycles/webhook_service_spec.rb @@ -22,8 +22,7 @@ RSpec.describe OrderCycles::WebhookService do # The co-ordinating enterprise has a non-owner user with an endpoint. # They shouldn't receive a notification. coordinator_user = create(:user, enterprises: [coordinator]) - coordinator_user.webhook_endpoints.create!(url: "http://coordinator_user_url", - webhook_type: "order_cycle_opened") + coordinator_user.webhook_endpoints.order_cycle_opened.create!(url: "http://coordinator_user_url") expect{ subject } .not_to enqueue_job(WebhookDeliveryJob).with("http://coordinator_user_url", any_args) @@ -31,8 +30,7 @@ RSpec.describe OrderCycles::WebhookService do context "coordinator owner has endpoint configured" do before do - coordinator.owner.webhook_endpoints.create! url: "http://coordinator_owner_url", - webhook_type: "order_cycle_opened" + coordinator.owner.webhook_endpoints.order_cycle_opened.create!(url: "http://coordinator_owner_url") end it "creates webhook payload for order cycle coordinator" do @@ -79,8 +77,7 @@ RSpec.describe OrderCycles::WebhookService do let(:two_distributors) { (1..2).map do |i| user = create(:user) - user.webhook_endpoints.create!(url: "http://distributor#{i}_owner_url", - webhook_type: "order_cycle_opened") + user.webhook_endpoints.order_cycle_opened.create!(url: "http://distributor#{i}_owner_url") create(:distributor_enterprise, owner: user) end } @@ -112,8 +109,7 @@ RSpec.describe OrderCycles::WebhookService do } it "creates only one webhook payload for the user's endpoint" do - user.webhook_endpoints.create! url: "http://coordinator_owner_url", - webhook_type: "order_cycle_opened" + user.webhook_endpoints.order_cycle_opened.create!(url: "http://coordinator_owner_url") expect{ subject } .to enqueue_job(WebhookDeliveryJob).with("http://coordinator_owner_url", any_args) @@ -132,8 +128,7 @@ RSpec.describe OrderCycles::WebhookService do } let(:supplier) { user = create(:user) - user.webhook_endpoints.create!(url: "http://supplier_owner_url", - webhook_type: "order_cycle_opened") + user.webhook_endpoints.order_cycle_opened.create!(url: "http://supplier_owner_url") create(:supplier_enterprise, owner: user) } diff --git a/spec/services/payments/webhook_payload_spec.rb b/spec/services/payments/webhook_payload_spec.rb index 936fb49a86..8ad15ae774 100644 --- a/spec/services/payments/webhook_payload_spec.rb +++ b/spec/services/payments/webhook_payload_spec.rb @@ -11,7 +11,7 @@ RSpec.describe Payments::WebhookPayload do subject { described_class.new(payment:, order:, enterprise: order.distributor) } - it "returns a formated hash" do + it "returns a hash with the relevant data" do order.line_items.update_all(tax_category_id: tax_category.id) enterprise = order.distributor diff --git a/spec/services/payments/webhook_service_spec.rb b/spec/services/payments/webhook_service_spec.rb index a4893d31fd..6e559267a5 100644 --- a/spec/services/payments/webhook_service_spec.rb +++ b/spec/services/payments/webhook_service_spec.rb @@ -14,8 +14,8 @@ RSpec.describe Payments::WebhookService do describe "creating payloads" do context "with order cycle coordinator owner webhook endpoints configured" do before do - order.order_cycle.coordinator.owner.webhook_endpoints.create!( - url: "http://coordinator.payment.url", webhook_type: "payment_status_changed" + order.order_cycle.coordinator.owner.webhook_endpoints.payment_status.create!( + url: "http://coordinator.payment.url" ) end @@ -80,12 +80,8 @@ RSpec.describe Payments::WebhookService do end it "calls endpoint for all user managing the order cycle coordinator" do - user1.webhook_endpoints.create!( - url: "http://user1.payment.url", webhook_type: "payment_status_changed" - ) - user2.webhook_endpoints.create!( - url: "http://user2.payment.url", webhook_type: "payment_status_changed" - ) + user1.webhook_endpoints.payment_status.create!(url: "http://user1.payment.url") + user2.webhook_endpoints.payment_status.create!(url: "http://user2.payment.url") expect{ subject } .to enqueue_job(WebhookDeliveryJob) @@ -98,12 +94,8 @@ RSpec.describe Payments::WebhookService do context "wiht duplicate webhook endpoints configured" do it "calls each unique configured endpoint" do - user1.webhook_endpoints.create!( - url: "http://coordinator.payment.url", webhook_type: "payment_status_changed" - ) - user2.webhook_endpoints.create!( - url: "http://user2.payment.url", webhook_type: "payment_status_changed" - ) + user1.webhook_endpoints.payment_status.create!(url: "http://coordinator.payment.url") + user2.webhook_endpoints.payment_status.create!(url: "http://user2.payment.url") expect{ subject } .to enqueue_job(WebhookDeliveryJob) From e1f4210aa864bc927c31a9a512a3461ec7a47605 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 10 Dec 2025 15:50:50 +1100 Subject: [PATCH 028/270] Upgrade stripe to version 15 --- Gemfile | 2 +- Gemfile.lock | 4 +- .../redirects_to_unauthorized.yml | 56 +-- .../redirects_to_unauthorized.yml | 58 +-- .../redirects_to_unauthorized.yml | 58 +-- ...turns_with_a_status_of_access_revoked_.yml | 68 ++-- .../returns_with_a_status_of_connected_.yml | 88 ++--- .../saves_the_card_locally.yml | 91 ++--- .../_credit/refunds_the_payment.yml | 207 +++++------ ...t_intent_state_is_not_requires_capture.yml | 145 ++++---- .../calls_Checkout_StripeRedirect.yml | 58 +-- ...urns_nil_when_an_order_is_not_supplied.yml | 58 +-- .../_purchase/completes_the_purchase.yml | 236 ++++++------ ..._error_message_to_help_developer_debug.yml | 153 ++++---- .../refunds_the_payment.yml | 266 +++++++------- .../void_the_payment.yml | 184 +++++----- ...stroys_the_record_and_notifies_Bugsnag.yml | 54 +-- .../destroys_the_record.yml | 88 ++--- .../returns_true.yml | 165 ++++----- .../returns_false.yml | 135 +++---- .../returns_failed_response.yml | 63 ++-- ...tus_with_Stripe_PaymentIntentValidator.yml | 91 ++--- .../returns_nil.yml | 63 ++-- .../clones_the_payment_method_only.yml | 167 +++++---- ...th_the_payment_method_and_the_customer.yml | 346 +++++++++--------- .../raises_an_error.yml | 70 ++-- .../deletes_the_credit_card_clone.yml | 122 +++--- ...the_credit_card_clone_and_the_customer.yml | 173 ++++----- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 123 ++++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- ...t_intent_last_payment_error_as_message.yml | 121 +++--- .../captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../from_Diners_Club/captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../from_Discover/captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../from_JCB/captures_the_payment.yml | 207 +++++------ .../from_JCB/returns_payment_intent_id.yml | 137 +++---- .../from_Mastercard/captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../from_UnionPay/captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- .../from_Visa/captures_the_payment.yml | 207 +++++------ .../from_Visa/returns_payment_intent_id.yml | 135 +++---- .../from_Visa_debit_/captures_the_payment.yml | 207 +++++------ .../returns_payment_intent_id.yml | 137 +++---- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 86 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- ...t_intent_last_payment_error_as_message.yml | 84 ++--- .../captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../from_Diners_Club/captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../from_Discover/captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../from_JCB/captures_the_payment.yml | 164 ++++----- .../from_JCB/returns_payment_intent_id.yml | 98 ++--- .../from_Mastercard/captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../from_UnionPay/captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- .../from_Visa/captures_the_payment.yml | 164 ++++----- .../from_Visa/returns_payment_intent_id.yml | 98 ++--- .../from_Visa_debit_/captures_the_payment.yml | 164 ++++----- .../returns_payment_intent_id.yml | 98 ++--- ...rd_id_from_the_correct_response_fields.yml | 83 +++-- .../when_request_fails/raises_an_error.yml | 144 ++++---- .../allows_to_refund_the_payment.yml | 264 ++++++------- 87 files changed, 5799 insertions(+), 5663 deletions(-) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml (87%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml (86%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml (86%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml (86%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml (88%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml (79%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml (84%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml (79%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml (82%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml (82%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml (82%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml (82%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml (86%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml (82%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (84%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml (80%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (86%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml (85%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml (83%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml (81%) rename spec/fixtures/vcr_cassettes/{Stripe-v13.5.1 => Stripe-v15.5.0}/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml (83%) diff --git a/Gemfile b/Gemfile index e57cc9b443..9b0ca18cdc 100644 --- a/Gemfile +++ b/Gemfile @@ -57,7 +57,7 @@ gem 'state_machines-activerecord' gem 'stringex', '~> 2.8.5', require: false gem 'paypal-sdk-merchant', '1.117.2' -gem 'stripe', '~> 13' +gem 'stripe', '~> 15' gem 'devise' gem 'devise-encryptable' diff --git a/Gemfile.lock b/Gemfile.lock index 1f02aa3ad8..1a18204ccc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -868,7 +868,7 @@ GEM redis (>= 4.0, < 6.0) stringex (2.8.6) stringio (3.1.8) - stripe (13.5.1) + stripe (15.5.0) swd (2.0.3) activesupport (>= 3) attr_required (>= 0.0.5) @@ -1093,7 +1093,7 @@ DEPENDENCIES stimulus_reflex stimulus_reflex_testing! stringex (~> 2.8.5) - stripe (~> 13) + stripe (~> 15) turbo-rails turbo_power undercover diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml similarity index 87% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml index 5d267c51f2..08beacaab5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_don_t_manage_the_enterprise_linked_to_the_stripe_account/redirects_to_unauthorized.yml @@ -8,13 +8,13 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com&business_type=non_profit headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 25929727-c304-41ab-86c8-10d10b7069b4 + - f89fa988-6976-4311-97ca-f4c3a5e42f83 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:04:26 GMT + - Wed, 10 Dec 2025 04:58:17 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=eX-KcG8mKrMdAIVXHJ0lhA6ccfo2Q0KJ-9O1A-alo-dJ1KX6Ml8LECdy3BhL4ZWX7smIphstbOgh0BYE + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=EBEdXvGq7vyH5-HXur0mgbtI571KR9hWqG0PWAUMbAFCjbwUqpD4IZrGD38VgDCDiHYssbcVZ5ZF0Ci4 Idempotency-Key: - - 25929727-c304-41ab-86c8-10d10b7069b4 + - f89fa988-6976-4311-97ca-f4c3a5e42f83 Original-Request: - - req_oG3RHTtoBghnDU + - req_gM7Tb6O1wckV1q Request-Id: - - req_oG3RHTtoBghnDU + - req_gM7Tb6O1wckV1q Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyXEKjF2H5zfan", + "id": "acct_1ScfTfKubAEb1ZyM", "object": "account", "business_profile": { "annual_revenue": null, @@ -88,6 +88,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -135,7 +136,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411066, + "created": 1765342696, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -144,7 +145,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyXEKjF2H5zfan/external_accounts" + "url": "/v1/accounts/acct_1ScfTfKubAEb1ZyM/external_accounts" }, "future_requirements": { "alternatives": [], @@ -236,6 +237,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -245,24 +247,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:04:26 GMT + recorded_at: Wed, 10 Dec 2025 04:58:48 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyXEKjF2H5zfan + uri: https://api.stripe.com/v1/accounts/acct_1ScfTfKubAEb1ZyM body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_oG3RHTtoBghnDU","request_duration_ms":2412}}' + - '{"last_request_metrics":{"request_id":"req_gM7Tb6O1wckV1q","request_duration_ms":2327}}' Idempotency-Key: - - bf4971dd-f853-4dce-ad4c-0109dbd6154c + - a1dfcffa-61d2-412e-9453-d45bd932e7d0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -277,7 +279,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:04:30 GMT + - Wed, 10 Dec 2025 04:58:21 GMT Content-Type: - application/json Content-Length: @@ -300,15 +302,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=zMAvitsGz8tRrU1i-mcD7J8cHKX6iCCjz352qNHC7C8p9Rrzisc8V23f_plT4hGAPTOYRWwbHrmHrDYB + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - bf4971dd-f853-4dce-ad4c-0109dbd6154c + - a1dfcffa-61d2-412e-9453-d45bd932e7d0 Request-Id: - - req_ZaGFaOccCqRUEk + - req_B3WGNiftGMItaF Stripe-Account: - - acct_1SHyXEKjF2H5zfan + - acct_1ScfTfKubAEb1ZyM Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -323,9 +325,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyXEKjF2H5zfan", + "id": "acct_1ScfTfKubAEb1ZyM", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:04:30 GMT + recorded_at: Wed, 10 Dec 2025 04:58:51 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml similarity index 86% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml index 270cc474da..08cdc5fb67 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_fails/redirects_to_unauthorized.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com&business_type=non_profit headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OqdNwvqiZeumee","request_duration_ms":1}}' + - '{"last_request_metrics":{"request_id":"req_u49DhpTc0oPYlx","request_duration_ms":2586}}' Idempotency-Key: - - 63e77576-1f64-49b2-9024-9d7a6607869e + - 0c204429-3c81-4cf0-bf68-4882b0e05447 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:39 GMT + - Wed, 10 Dec 2025 04:58:28 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 63e77576-1f64-49b2-9024-9d7a6607869e + - 0c204429-3c81-4cf0-bf68-4882b0e05447 Original-Request: - - req_OUjgH6yZiKV8EH + - req_RVnp71cspilb24 Request-Id: - - req_OUjgH6yZiKV8EH + - req_RVnp71cspilb24 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYP48vDwrBXkC", + "id": "acct_1ScfTq31AOFvZfCG", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -137,7 +138,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411138, + "created": 1765342707, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -146,7 +147,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYP48vDwrBXkC/external_accounts" + "url": "/v1/accounts/acct_1ScfTq31AOFvZfCG/external_accounts" }, "future_requirements": { "alternatives": [], @@ -238,6 +239,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -247,24 +249,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:05:39 GMT + recorded_at: Wed, 10 Dec 2025 04:58:58 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyYP48vDwrBXkC + uri: https://api.stripe.com/v1/accounts/acct_1ScfTq31AOFvZfCG body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OUjgH6yZiKV8EH","request_duration_ms":2474}}' + - '{"last_request_metrics":{"request_id":"req_RVnp71cspilb24","request_duration_ms":2294}}' Idempotency-Key: - - 641ec84d-bd40-4c36-b171-33b0635c1c6f + - 5d723ff2-dd29-4792-bd81-0255685432ac Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -279,7 +281,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:43 GMT + - Wed, 10 Dec 2025 04:58:30 GMT Content-Type: - application/json Content-Length: @@ -302,15 +304,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 641ec84d-bd40-4c36-b171-33b0635c1c6f + - 5d723ff2-dd29-4792-bd81-0255685432ac Request-Id: - - req_ZIu5DReP1igubk + - req_kYzrM2Ug4Js03r Stripe-Account: - - acct_1SHyYP48vDwrBXkC + - acct_1ScfTq31AOFvZfCG Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -325,9 +327,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYP48vDwrBXkC", + "id": "acct_1ScfTq31AOFvZfCG", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:05:42 GMT + recorded_at: Wed, 10 Dec 2025 04:59:01 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml similarity index 86% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml index 880b7dd650..981fa93486 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_destroy/when_the_specified_stripe_account_exists/when_I_manage_the_enterprise_linked_to_the_stripe_account/and_the_attempt_to_deauthorize_and_destroy_succeeds/redirects_to_unauthorized.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com&business_type=non_profit headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ZaGFaOccCqRUEk","request_duration_ms":3070}}' + - '{"last_request_metrics":{"request_id":"req_B3WGNiftGMItaF","request_duration_ms":3165}}' Idempotency-Key: - - cd940104-5df6-423b-9b0d-b3fecd72390f + - f3312e50-9827-4294-8031-c995efe4e1f2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:04:32 GMT + - Wed, 10 Dec 2025 04:58:23 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=zMAvitsGz8tRrU1i-mcD7J8cHKX6iCCjz352qNHC7C8p9Rrzisc8V23f_plT4hGAPTOYRWwbHrmHrDYB + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - cd940104-5df6-423b-9b0d-b3fecd72390f + - f3312e50-9827-4294-8031-c995efe4e1f2 Original-Request: - - req_6txkuPkmqCOord + - req_dciQlDLdxularE Request-Id: - - req_6txkuPkmqCOord + - req_dciQlDLdxularE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyXK3YOFZTWKVE", + "id": "acct_1ScfTlQTI7TuiyjT", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -137,7 +138,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411071, + "created": 1765342702, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -146,7 +147,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyXK3YOFZTWKVE/external_accounts" + "url": "/v1/accounts/acct_1ScfTlQTI7TuiyjT/external_accounts" }, "future_requirements": { "alternatives": [], @@ -238,6 +239,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -247,24 +249,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:04:32 GMT + recorded_at: Wed, 10 Dec 2025 04:58:54 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyXK3YOFZTWKVE + uri: https://api.stripe.com/v1/accounts/acct_1ScfTlQTI7TuiyjT body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_6txkuPkmqCOord","request_duration_ms":2094}}' + - '{"last_request_metrics":{"request_id":"req_dciQlDLdxularE","request_duration_ms":2296}}' Idempotency-Key: - - 1115baf5-42ec-4ef7-84e5-a2c973101b7a + - c2bc0923-aba8-42e5-a963-42e362721095 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -279,7 +281,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:04:35 GMT + - Wed, 10 Dec 2025 04:58:26 GMT Content-Type: - application/json Content-Length: @@ -302,15 +304,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=zMAvitsGz8tRrU1i-mcD7J8cHKX6iCCjz352qNHC7C8p9Rrzisc8V23f_plT4hGAPTOYRWwbHrmHrDYB + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 1115baf5-42ec-4ef7-84e5-a2c973101b7a + - c2bc0923-aba8-42e5-a963-42e362721095 Request-Id: - - req_OqdNwvqiZeumee + - req_u49DhpTc0oPYlx Stripe-Account: - - acct_1SHyXK3YOFZTWKVE + - acct_1ScfTlQTI7TuiyjT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -325,9 +327,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyXK3YOFZTWKVE", + "id": "acct_1ScfTlQTI7TuiyjT", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:04:35 GMT + recorded_at: Wed, 10 Dec 2025 04:58:56 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml similarity index 86% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml index a4510b10a1..8de2e1c017 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/but_access_has_been_revoked_or_does_not_exist_on_stripe_s_servers/returns_with_a_status_of_access_revoked_.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com&business_type=non_profit headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ZIu5DReP1igubk","request_duration_ms":3060}}' + - '{"last_request_metrics":{"request_id":"req_kYzrM2Ug4Js03r","request_duration_ms":2423}}' Idempotency-Key: - - 721b9634-36c2-4fad-b13d-d0e6357f84bf + - 4456955d-6562-43aa-b74e-60f467bf2dc5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:45 GMT + - Wed, 10 Dec 2025 04:58:33 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 721b9634-36c2-4fad-b13d-d0e6357f84bf + - 4456955d-6562-43aa-b74e-60f467bf2dc5 Original-Request: - - req_IEQ4TYaklp6hBD + - req_r5jWoVFGUuiMos Request-Id: - - req_IEQ4TYaklp6hBD + - req_r5jWoVFGUuiMos Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYV3noFA2NjG2", + "id": "acct_1ScfTv3x05vTv9vA", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -137,7 +138,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411144, + "created": 1765342712, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -146,7 +147,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYV3noFA2NjG2/external_accounts" + "url": "/v1/accounts/acct_1ScfTv3x05vTv9vA/external_accounts" }, "future_requirements": { "alternatives": [], @@ -238,6 +239,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -247,7 +249,7 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:05:45 GMT + recorded_at: Wed, 10 Dec 2025 04:59:03 GMT - request: method: get uri: https://api.stripe.com/v1/accounts/acct_fake_account @@ -256,13 +258,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_IEQ4TYaklp6hBD","request_duration_ms":2038}}' + - '{"last_request_metrics":{"request_id":"req_r5jWoVFGUuiMos","request_duration_ms":2270}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -277,7 +279,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:45 GMT + - Wed, 10 Dec 2025 04:58:33 GMT Content-Type: - application/json Content-Length: @@ -300,7 +302,7 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Vary: - Origin X-Robots-Tag: @@ -320,22 +322,22 @@ http_interactions: "doc_url": "https://stripe.com/docs/error-codes/account-invalid" } } - recorded_at: Tue, 14 Oct 2025 03:05:45 GMT + recorded_at: Wed, 10 Dec 2025 04:59:03 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyYV3noFA2NjG2 + uri: https://api.stripe.com/v1/accounts/acct_1ScfTv3x05vTv9vA body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 6e111774-fb8d-4072-93c9-9bad532b0532 + - 6dd5e41d-2fc9-42b4-b47a-189c7eaed4a4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -350,7 +352,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:48 GMT + - Wed, 10 Dec 2025 04:58:35 GMT Content-Type: - application/json Content-Length: @@ -373,15 +375,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6e111774-fb8d-4072-93c9-9bad532b0532 + - 6dd5e41d-2fc9-42b4-b47a-189c7eaed4a4 Request-Id: - - req_tQUvraDmn8E5NZ + - req_UCoeCkv0LsZ7wZ Stripe-Account: - - acct_1SHyYV3noFA2NjG2 + - acct_1ScfTv3x05vTv9vA Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -396,9 +398,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYV3noFA2NjG2", + "id": "acct_1ScfTv3x05vTv9vA", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:05:48 GMT + recorded_at: Wed, 10 Dec 2025 04:59:06 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml similarity index 88% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml index 64ffc210e2..f4dd52d8b7 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Admin_StripeAccountsController/_status/when_I_manage_the_specified_enterprise/when_Stripe_is_enabled/when_a_stripe_account_is_associated_with_the_specified_enterprise/which_is_connected/returns_with_a_status_of_connected_.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com&business_type=non_profit headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_tQUvraDmn8E5NZ","request_duration_ms":2930}}' + - '{"last_request_metrics":{"request_id":"req_UCoeCkv0LsZ7wZ","request_duration_ms":2411}}' Idempotency-Key: - - a6b927f0-5194-4bc6-88ff-512a140a6dad + - f5db031c-b007-47d2-9f3c-6e903c6e8de3 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:50 GMT + - Wed, 10 Dec 2025 04:58:37 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a6b927f0-5194-4bc6-88ff-512a140a6dad + - f5db031c-b007-47d2-9f3c-6e903c6e8de3 Original-Request: - - req_IbGJl7tlqOjCma + - req_lBnq0VjxuSU5ss Request-Id: - - req_IbGJl7tlqOjCma + - req_lBnq0VjxuSU5ss Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYa48cRAnGc2d", + "id": "acct_1ScfTz4I3882TRXZ", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -137,7 +138,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411149, + "created": 1765342716, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -146,7 +147,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYa48cRAnGc2d/external_accounts" + "url": "/v1/accounts/acct_1ScfTz4I3882TRXZ/external_accounts" }, "future_requirements": { "alternatives": [], @@ -238,6 +239,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -247,22 +249,22 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:05:50 GMT + recorded_at: Wed, 10 Dec 2025 04:59:08 GMT - request: method: get - uri: https://api.stripe.com/v1/accounts/acct_1SHyYa48cRAnGc2d + uri: https://api.stripe.com/v1/accounts/acct_1ScfTz4I3882TRXZ body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_IbGJl7tlqOjCma","request_duration_ms":2359}}' + - '{"last_request_metrics":{"request_id":"req_lBnq0VjxuSU5ss","request_duration_ms":2189}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -277,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:51 GMT + - Wed, 10 Dec 2025 04:58:38 GMT Content-Type: - application/json Content-Length: - - '3927' + - '4009' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -300,13 +302,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_DHKUIM0qB3xtUZ + - req_jEkcjRm0477B4A Stripe-Account: - - acct_1SHyYa48cRAnGc2d + - acct_1ScfTz4I3882TRXZ Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -321,7 +323,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYa48cRAnGc2d", + "id": "acct_1ScfTz4I3882TRXZ", "object": "account", "business_profile": { "annual_revenue": null, @@ -330,6 +332,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -377,7 +380,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411149, + "created": 1765342716, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -386,7 +389,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYa48cRAnGc2d/external_accounts" + "url": "/v1/accounts/acct_1ScfTz4I3882TRXZ/external_accounts" }, "future_requirements": { "alternatives": [], @@ -478,6 +481,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -487,24 +491,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:05:51 GMT + recorded_at: Wed, 10 Dec 2025 04:59:08 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyYa48cRAnGc2d + uri: https://api.stripe.com/v1/accounts/acct_1ScfTz4I3882TRXZ body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_DHKUIM0qB3xtUZ","request_duration_ms":469}}' + - '{"last_request_metrics":{"request_id":"req_jEkcjRm0477B4A","request_duration_ms":490}}' Idempotency-Key: - - 3362a8b6-0cd0-4d94-b213-e162f3d40358 + - cad09356-bdfb-401b-9364-f011b7c7a03a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -519,7 +523,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:54 GMT + - Wed, 10 Dec 2025 04:58:40 GMT Content-Type: - application/json Content-Length: @@ -542,15 +546,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3362a8b6-0cd0-4d94-b213-e162f3d40358 + - cad09356-bdfb-401b-9364-f011b7c7a03a Request-Id: - - req_pxnCBAS87JOwB9 + - req_jYD9jjmlhAYEWs Stripe-Account: - - acct_1SHyYa48cRAnGc2d + - acct_1ScfTz4I3882TRXZ Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -565,9 +569,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYa48cRAnGc2d", + "id": "acct_1ScfTz4I3882TRXZ", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:05:54 GMT + recorded_at: Wed, 10 Dec 2025 04:59:11 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml similarity index 79% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml index 8d20796b15..fddcb0de2c 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_CreditCardsController/using_VCR/_new_from_token/when_the_request_to_store_the_customer/card_with_Stripe_is_successful/saves_the_card_locally.yml @@ -8,15 +8,15 @@ http_interactions: string: card[number]=4242424242424242&card[exp_month]=9&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_pxnCBAS87JOwB9","request_duration_ms":3126}}' + - '{"last_request_metrics":{"request_id":"req_jYD9jjmlhAYEWs","request_duration_ms":2424}}' Idempotency-Key: - - 3a86dee7-81ca-433d-8a5a-2579bef7f6ab + - cbb6f9e0-66bf-47be-8c0d-b95351667429 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,7 +33,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:54 GMT + - Wed, 10 Dec 2025 04:58:41 GMT Content-Type: - application/json Content-Length: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3a86dee7-81ca-433d-8a5a-2579bef7f6ab + - cbb6f9e0-66bf-47be-8c0d-b95351667429 Original-Request: - - req_eaOnAoJjunxl40 + - req_UfmMcYIwxuZ4lS Request-Id: - - req_eaOnAoJjunxl40 + - req_UfmMcYIwxuZ4lS Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,10 +81,10 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "tok_1SHyYgKuuB1fWySndxuZemYf", + "id": "tok_1ScfU5KuuB1fWySnCddGxE3l", "object": "token", "card": { - "id": "card_1SHyYgKuuB1fWySnU7wvIdbg", + "id": "card_1ScfU4KuuB1fWySnL5neikIs", "object": "card", "address_city": null, "address_country": null, @@ -114,30 +114,30 @@ http_interactions: "tokenization_method": null, "wallet": null }, - "client_ip": "121.200.4.224", - "created": 1760411154, + "client_ip": "101.188.38.96", + "created": 1765342721, "livemode": false, "type": "card", "used": false } - recorded_at: Tue, 14 Oct 2025 03:05:54 GMT + recorded_at: Wed, 10 Dec 2025 04:59:11 GMT - request: method: post uri: https://api.stripe.com/v1/customers body: encoding: UTF-8 - string: email=suzanne%40ritchiekautzer.info&source=tok_1SHyYgKuuB1fWySndxuZemYf + string: email=beulah_schmitt%40murray.co.uk&source=tok_1ScfU5KuuB1fWySnCddGxE3l headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_eaOnAoJjunxl40","request_duration_ms":371}}' + - '{"last_request_metrics":{"request_id":"req_UfmMcYIwxuZ4lS","request_duration_ms":419}}' Idempotency-Key: - - f68b68ed-9987-49f9-b616-2ed84e41d97b + - b3db5536-5b0f-4a9b-9dbe-dfdaeffb79b1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -154,11 +154,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:55 GMT + - Wed, 10 Dec 2025 04:58:41 GMT Content-Type: - application/json Content-Length: - - '666' + - '694' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -177,17 +177,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f68b68ed-9987-49f9-b616-2ed84e41d97b + - b3db5536-5b0f-4a9b-9dbe-dfdaeffb79b1 Original-Request: - - req_uP3pKsJEYwyaZJ + - req_Jxzs3G8IYLQVgV Request-Id: - - req_uP3pKsJEYwyaZJ + - req_Jxzs3G8IYLQVgV Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -202,18 +202,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERRPIBNJmV7wR", + "id": "cus_TZp8VzK3Y14cbD", "object": "customer", "address": null, "balance": 0, - "created": 1760411154, + "created": 1765342721, "currency": null, - "default_source": "card_1SHyYgKuuB1fWySnU7wvIdbg", + "customer_account": null, + "default_source": "card_1ScfU4KuuB1fWySnL5neikIs", "delinquent": false, "description": null, "discount": null, - "email": "suzanne@ritchiekautzer.info", - "invoice_prefix": "N8REKHQK", + "email": "beulah_schmitt@murray.co.uk", + "invoice_prefix": "B0HZJQDX", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -230,22 +231,22 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:05:55 GMT + recorded_at: Wed, 10 Dec 2025 04:59:12 GMT - request: method: get - uri: https://api.stripe.com/v1/customers/cus_TERRPIBNJmV7wR/sources?limit=1&object=card + uri: https://api.stripe.com/v1/customers/cus_TZp8VzK3Y14cbD/sources?limit=1&object=card body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_uP3pKsJEYwyaZJ","request_duration_ms":724}}' + - '{"last_request_metrics":{"request_id":"req_Jxzs3G8IYLQVgV","request_duration_ms":788}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -260,7 +261,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:55 GMT + - Wed, 10 Dec 2025 04:58:42 GMT Content-Type: - application/json Content-Length: @@ -283,11 +284,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_x4EL8Kj8W6WyTh + - req_x3LhhVKjRWnE0c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -305,7 +306,7 @@ http_interactions: "object": "list", "data": [ { - "id": "card_1SHyYgKuuB1fWySnU7wvIdbg", + "id": "card_1ScfU4KuuB1fWySnL5neikIs", "object": "card", "address_city": null, "address_country": null, @@ -318,7 +319,7 @@ http_interactions: "allow_redisplay": "unspecified", "brand": "Visa", "country": "US", - "customer": "cus_TERRPIBNJmV7wR", + "customer": "cus_TZp8VzK3Y14cbD", "cvc_check": "pass", "dynamic_last4": null, "email": null, @@ -336,7 +337,7 @@ http_interactions: } ], "has_more": false, - "url": "/v1/customers/cus_TERRPIBNJmV7wR/sources" + "url": "/v1/customers/cus_TZp8VzK3Y14cbD/sources" } - recorded_at: Tue, 14 Oct 2025 03:05:55 GMT + recorded_at: Wed, 10 Dec 2025 04:59:12 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml index 5e3cd45943..565be1de54 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_credit/refunds_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_optaXcyxBBnMWy","request_duration_ms":3171}}' + - '{"last_request_metrics":{"request_id":"req_kxs8Gsncw2vrid","request_duration_ms":2876}}' Idempotency-Key: - - 9c048458-7682-4d48-b430-59c7fee76523 + - 43fbb467-3518-4f18-9d56-5d7052154853 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:30 GMT + - Wed, 10 Dec 2025 05:02:12 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9c048458-7682-4d48-b430-59c7fee76523 + - 43fbb467-3518-4f18-9d56-5d7052154853 Original-Request: - - req_E9DkANSmck5jQE + - req_DXHzTqXebvVRVG Request-Id: - - req_E9DkANSmck5jQE + - req_DXHzTqXebvVRVG Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyd631CkLt6rra", + "id": "acct_1ScfXS3HCHXMbln1", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411429, + "created": 1765342931, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyd631CkLt6rra/external_accounts" + "url": "/v1/accounts/acct_1ScfXS3HCHXMbln1/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,7 +226,7 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:30 GMT + recorded_at: Wed, 10 Dec 2025 05:02:43 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents @@ -233,17 +235,17 @@ http_interactions: string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=automatic&confirm=true headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_E9DkANSmck5jQE","request_duration_ms":2298}}' + - '{"last_request_metrics":{"request_id":"req_DXHzTqXebvVRVG","request_duration_ms":2478}}' Idempotency-Key: - - 5b64278c-6aec-4591-9092-f3d20cd00e36 + - 22ed5b4d-cebf-431d-b997-883b74e047f4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 X-Stripe-Client-User-Agent: - "" Content-Type: @@ -260,11 +262,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:32 GMT + - Wed, 10 Dec 2025 05:02:14 GMT Content-Type: - application/json Content-Length: - - '1437' + - '1446' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -283,19 +285,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5b64278c-6aec-4591-9092-f3d20cd00e36 + - 22ed5b4d-cebf-431d-b997-883b74e047f4 Original-Request: - - req_JpICnI0CoJ2xDm + - req_2yrUisPNJNMBnh Request-Id: - - req_JpICnI0CoJ2xDm + - req_2yrUisPNJNMBnh Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -310,7 +312,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyd931CkLt6rra14yuHjZQ", + "id": "pi_3ScfXV3HCHXMbln10nwuYzR1", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -326,19 +328,19 @@ http_interactions: "capture_method": "automatic", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411431, + "created": 1765342933, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHyd931CkLt6rra1LNoN3ek", + "latest_charge": "ch_3ScfXV3HCHXMbln10vVLWjWu", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyd931CkLt6rraMRZB6ykx", + "payment_method": "pm_1ScfXV3HCHXMbln1vnwnvk51", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -363,10 +365,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:32 GMT + recorded_at: Wed, 10 Dec 2025 05:02:44 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHyd931CkLt6rra14yuHjZQ + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXV3HCHXMbln10nwuYzR1 body: encoding: US-ASCII string: '' @@ -374,7 +376,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -382,7 +384,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Connection: - close Accept-Encoding: @@ -397,11 +399,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:32 GMT + - Wed, 10 Dec 2025 05:02:14 GMT Content-Type: - application/json Content-Length: - - '5484' + - '5512' Connection: - close Access-Control-Allow-Credentials: @@ -420,11 +422,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=6KEMkcCwsOTjdLqewKR7WYC8tkai6xH64vP06THcCTMxWygHRGdvmvLr9eV5_prcl4d92RF40MZJpwq5 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=IqcLh7gJYPmfLSJFi9ldbKN6c-hNcNv8CyWRb4UN64A_85lgUzUtQSavE2E-hLQvmxmnH-KWxLp7CaUX Request-Id: - - req_igKXrnrmKVd9po + - req_JoUg8v0uGKbbH9 Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Stripe-Version: - '2020-08-27' Vary: @@ -441,7 +443,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyd931CkLt6rra14yuHjZQ", + "id": "pi_3ScfXV3HCHXMbln10nwuYzR1", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -459,7 +461,7 @@ http_interactions: "object": "list", "data": [ { - "id": "ch_3SHyd931CkLt6rra1LNoN3ek", + "id": "ch_3ScfXV3HCHXMbln10vVLWjWu", "object": "charge", "amount": 1000, "amount_captured": 1000, @@ -467,7 +469,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHyd931CkLt6rra17dAcFFz", + "balance_transaction": "txn_3ScfXV3HCHXMbln10uSZXBWi", "billing_details": { "address": { "city": null, @@ -484,7 +486,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411431, + "created": 1765342933, "currency": "aud", "customer": null, "description": null, @@ -507,17 +509,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 31, + "risk_score": 40, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHyd931CkLt6rra14yuHjZQ", - "payment_method": "pm_1SHyd931CkLt6rraMRZB6ykx", + "payment_intent": "pi_3ScfXV3HCHXMbln10nwuYzR1", + "payment_method": "pm_1ScfXV3HCHXMbln1vnwnvk51", "payment_method_details": { "card": { "amount_authorized": 1000, - "authorization_code": "439116", + "authorization_code": "786466", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -525,7 +527,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -545,7 +547,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCTXXQEU1014", + "network_transaction_id": "MCCPFUXE81210", "overcapture": { "maximum_amount_capturable": 1000, "status": "unavailable" @@ -559,14 +561,14 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5ZDYzMUNrTHQ2cnJhKKj-tscGMgZztbM3ssY6LBYUqN47OThfl8yqtX1vIz3xiafLulG9ZRzcty-2r3B_WV4-1aZKwjIcCxCK", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWFMzSENIWE1ibG4xKNb948kGMga48fe3Fqs6LBa6wIJD38uQ4uSWg7wa4JZgtTbXqY5mFWFGtqfSLe3GGp2W0IuBvGP70600", "refunded": false, "refunds": { "object": "list", "data": [], "has_more": false, "total_count": 0, - "url": "/v1/charges/ch_3SHyd931CkLt6rra1LNoN3ek/refunds" + "url": "/v1/charges/ch_3ScfXV3HCHXMbln10vVLWjWu/refunds" }, "review": null, "shipping": null, @@ -581,23 +583,24 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges?payment_intent=pi_3SHyd931CkLt6rra14yuHjZQ" + "url": "/v1/charges?payment_intent=pi_3ScfXV3HCHXMbln10nwuYzR1" }, "client_secret": "", "confirmation_method": "automatic", - "created": 1760411431, + "created": 1765342933, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHyd931CkLt6rra1LNoN3ek", + "latest_charge": "ch_3ScfXV3HCHXMbln10vVLWjWu", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyd931CkLt6rraMRZB6ykx", + "payment_method": "pm_1ScfXV3HCHXMbln1vnwnvk51", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -622,10 +625,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:32 GMT + recorded_at: Wed, 10 Dec 2025 05:02:45 GMT - request: method: post - uri: https://api.stripe.com/v1/charges/ch_3SHyd931CkLt6rra1LNoN3ek/refunds + uri: https://api.stripe.com/v1/charges/ch_3ScfXV3HCHXMbln10vVLWjWu/refunds body: encoding: UTF-8 string: amount=1000&expand[0]=charge @@ -635,7 +638,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -643,7 +646,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Connection: - close Accept-Encoding: @@ -658,7 +661,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:33 GMT + - Wed, 10 Dec 2025 05:02:16 GMT Content-Type: - application/json Content-Length: @@ -681,15 +684,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=OM_QID4mkoXt71hL-zi5xW8jqDnQHEWcI3SnK_RU-cLKpURQ0m1ehrNriyw2idgVDNdNJm6WQolrhYkm + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=IK9xFlYaGlv_vZH5f3KyJOW2LIqmENJCbHsCR-E8liuSF0lIf5GsHiQDGCjLjnQmYQ4XurFLZashfzz5 Idempotency-Key: - - af79f19a-a6ee-4b39-99de-ab0bdaa7645b + - 7705d093-cd6f-4cbb-9dd6-299fea093d5d Original-Request: - - req_ttMDSs2kplYFG6 + - req_yaTGym2wAjtE3A Request-Id: - - req_ttMDSs2kplYFG6 + - req_yaTGym2wAjtE3A Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Stripe-Should-Retry: - 'false' Stripe-Version: @@ -708,12 +711,12 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "re_3SHyd931CkLt6rra10VQY0mZ", + "id": "re_3ScfXV3HCHXMbln10i36sjX4", "object": "refund", "amount": 1000, - "balance_transaction": "txn_3SHyd931CkLt6rra1RuSXhor", + "balance_transaction": "txn_3ScfXV3HCHXMbln10iFsaSI9", "charge": { - "id": "ch_3SHyd931CkLt6rra1LNoN3ek", + "id": "ch_3ScfXV3HCHXMbln10vVLWjWu", "object": "charge", "amount": 1000, "amount_captured": 1000, @@ -721,7 +724,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHyd931CkLt6rra17dAcFFz", + "balance_transaction": "txn_3ScfXV3HCHXMbln10uSZXBWi", "billing_details": { "address": { "city": null, @@ -738,7 +741,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411431, + "created": 1765342933, "currency": "aud", "customer": null, "description": null, @@ -761,17 +764,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 31, + "risk_score": 40, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHyd931CkLt6rra14yuHjZQ", - "payment_method": "pm_1SHyd931CkLt6rraMRZB6ykx", + "payment_intent": "pi_3ScfXV3HCHXMbln10nwuYzR1", + "payment_method": "pm_1ScfXV3HCHXMbln1vnwnvk51", "payment_method_details": { "card": { "amount_authorized": 1000, - "authorization_code": "439116", + "authorization_code": "786466", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -779,7 +782,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -799,7 +802,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCTXXQEU1014", + "network_transaction_id": "MCCPFUXE81210", "overcapture": { "maximum_amount_capturable": 1000, "status": "unavailable" @@ -813,18 +816,18 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5ZDYzMUNrTHQ2cnJhKKn-tscGMgY0T7rWUF86LBb6Rl6RDPZ5emf9e8GyYmzYP0wDZeMYNx5X7xL6lDTGaU2-eTku2ep9oB8q", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWFMzSENIWE1ibG4xKNf948kGMgbFM-XWaVA6LBY9CrSXluGL51PBKORrhlQHmiBQLK1Mc2ik7nU4lRuaFBI6-1uJEfGcVb4H", "refunded": true, "refunds": { "object": "list", "data": [ { - "id": "re_3SHyd931CkLt6rra10VQY0mZ", + "id": "re_3ScfXV3HCHXMbln10i36sjX4", "object": "refund", "amount": 1000, - "balance_transaction": "txn_3SHyd931CkLt6rra1RuSXhor", - "charge": "ch_3SHyd931CkLt6rra1LNoN3ek", - "created": 1760411432, + "balance_transaction": "txn_3ScfXV3HCHXMbln10iFsaSI9", + "charge": "ch_3ScfXV3HCHXMbln10vVLWjWu", + "created": 1765342935, "currency": "aud", "destination_details": { "card": { @@ -835,7 +838,7 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHyd931CkLt6rra14yuHjZQ", + "payment_intent": "pi_3ScfXV3HCHXMbln10nwuYzR1", "reason": null, "receipt_number": null, "source_transfer_reversal": null, @@ -845,7 +848,7 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges/ch_3SHyd931CkLt6rra1LNoN3ek/refunds" + "url": "/v1/charges/ch_3ScfXV3HCHXMbln10vVLWjWu/refunds" }, "review": null, "shipping": null, @@ -857,7 +860,7 @@ http_interactions: "transfer_data": null, "transfer_group": null }, - "created": 1760411432, + "created": 1765342935, "currency": "aud", "destination_details": { "card": { @@ -868,31 +871,31 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHyd931CkLt6rra14yuHjZQ", + "payment_intent": "pi_3ScfXV3HCHXMbln10nwuYzR1", "reason": null, "receipt_number": null, "source_transfer_reversal": null, "status": "succeeded", "transfer_reversal": null } - recorded_at: Tue, 14 Oct 2025 03:10:33 GMT + recorded_at: Wed, 10 Dec 2025 05:02:46 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyd631CkLt6rra + uri: https://api.stripe.com/v1/accounts/acct_1ScfXS3HCHXMbln1 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_JpICnI0CoJ2xDm","request_duration_ms":1205}}' + - '{"last_request_metrics":{"request_id":"req_2yrUisPNJNMBnh","request_duration_ms":1387}}' Idempotency-Key: - - 9986fd79-8638-408e-9b1e-44e24ad10c7e + - 1f748476-170c-42cc-ad08-8e0eb5f5c73f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -907,7 +910,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:36 GMT + - Wed, 10 Dec 2025 05:02:18 GMT Content-Type: - application/json Content-Length: @@ -930,15 +933,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9986fd79-8638-408e-9b1e-44e24ad10c7e + - 1f748476-170c-42cc-ad08-8e0eb5f5c73f Request-Id: - - req_KbVXgNKr88Sx23 + - req_RAdBsK3h3CGELn Stripe-Account: - - acct_1SHyd631CkLt6rra + - acct_1ScfXS3HCHXMbln1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -953,9 +956,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyd631CkLt6rra", + "id": "acct_1ScfXS3HCHXMbln1", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:36 GMT + recorded_at: Wed, 10 Dec 2025 05:02:49 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml similarity index 84% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml index 66e48e63c3..c5c056b77f 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_error_message/when_payment_intent_state_is_not_in_requires_capture_state/does_not_succeed_if_payment_intent_state_is_not_requires_capture.yml @@ -8,13 +8,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_KbVXgNKr88Sx23","request_duration_ms":2953}}' + - '{"last_request_metrics":{"request_id":"req_RAdBsK3h3CGELn","request_duration_ms":2508}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -29,11 +29,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:38 GMT + - Wed, 10 Dec 2025 05:02:19 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -52,11 +52,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_t66rgnQeT7Xvse + - req_x3CX82ylNaNudg Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -71,7 +71,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydGKuuB1fWySnh3T3bNsL", + "id": "pm_1ScfXbKuuB1fWySnNK2C3jSA", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -97,7 +97,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -115,30 +115,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411438, + "created": 1765342939, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:10:38 GMT + recorded_at: Wed, 10 Dec 2025 05:02:49 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=1000¤cy=aud&payment_method=pm_1SHydGKuuB1fWySnh3T3bNsL&payment_method_types[0]=card&capture_method=manual + string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_t66rgnQeT7Xvse","request_duration_ms":357}}' + - '{"last_request_metrics":{"request_id":"req_x3CX82ylNaNudg","request_duration_ms":415}}' Idempotency-Key: - - 022425f2-25b4-4389-bc29-7b9ded8acc64 + - 94bf3c67-b58a-40f9-b3ac-c55555a2d84f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -155,11 +156,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:38 GMT + - Wed, 10 Dec 2025 05:02:19 GMT Content-Type: - application/json Content-Length: - - '1385' + - '1394' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -178,17 +179,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 022425f2-25b4-4389-bc29-7b9ded8acc64 + - 94bf3c67-b58a-40f9-b3ac-c55555a2d84f Original-Request: - - req_9TKjLljhpGqriP + - req_PAwvxX839Oia8u Request-Id: - - req_9TKjLljhpGqriP + - req_PAwvxX839Oia8u Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -203,7 +204,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydGKuuB1fWySn1DAjjpRs", + "id": "pi_3ScfXbKuuB1fWySn2n35TMJw", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -219,19 +220,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411438, + "created": 1765342939, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydGKuuB1fWySnh3T3bNsL", + "payment_method": "pm_1ScfXbKuuB1fWySnL2qbleeD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -256,22 +257,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:38 GMT + recorded_at: Wed, 10 Dec 2025 05:02:50 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydGKuuB1fWySn1DAjjpRs + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXbKuuB1fWySn2n35TMJw body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9TKjLljhpGqriP","request_duration_ms":346}}' + - '{"last_request_metrics":{"request_id":"req_PAwvxX839Oia8u","request_duration_ms":430}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -286,11 +287,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:38 GMT + - Wed, 10 Dec 2025 05:02:20 GMT Content-Type: - application/json Content-Length: - - '1385' + - '1394' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -309,11 +310,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_G6EGz0wcGSGa0d + - req_guGjrx3e3R4Jyq Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -328,7 +329,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydGKuuB1fWySn1DAjjpRs", + "id": "pi_3ScfXbKuuB1fWySn2n35TMJw", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -344,19 +345,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411438, + "created": 1765342939, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydGKuuB1fWySnh3T3bNsL", + "payment_method": "pm_1ScfXbKuuB1fWySnL2qbleeD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -381,7 +382,7 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:38 GMT + recorded_at: Wed, 10 Dec 2025 05:02:50 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -390,15 +391,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_G6EGz0wcGSGa0d","request_duration_ms":297}}' + - '{"last_request_metrics":{"request_id":"req_guGjrx3e3R4Jyq","request_duration_ms":311}}' Idempotency-Key: - - be57c9e1-a2df-4e66-adf5-8396b47f122a + - 758b6770-372d-45b1-931f-af870a2b6970 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -415,11 +416,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:41 GMT + - Wed, 10 Dec 2025 05:02:22 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -438,17 +439,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - be57c9e1-a2df-4e66-adf5-8396b47f122a + - 758b6770-372d-45b1-931f-af870a2b6970 Original-Request: - - req_1gCfyyGGYh6DWZ + - req_gusKQ97kRrqnuo Request-Id: - - req_1gCfyyGGYh6DWZ + - req_gusKQ97kRrqnuo Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -463,7 +464,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydH3xzbZDwHJ0", + "id": "acct_1ScfXc31nofbTDKV", "object": "account", "business_profile": { "annual_revenue": null, @@ -472,6 +473,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -496,7 +498,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411440, + "created": 1765342941, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -505,7 +507,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHydH3xzbZDwHJ0/external_accounts" + "url": "/v1/accounts/acct_1ScfXc31nofbTDKV/external_accounts" }, "future_requirements": { "alternatives": [], @@ -597,6 +599,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -606,24 +609,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:41 GMT + recorded_at: Wed, 10 Dec 2025 05:02:53 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHydH3xzbZDwHJ0 + uri: https://api.stripe.com/v1/accounts/acct_1ScfXc31nofbTDKV body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1gCfyyGGYh6DWZ","request_duration_ms":2160}}' + - '{"last_request_metrics":{"request_id":"req_gusKQ97kRrqnuo","request_duration_ms":2448}}' Idempotency-Key: - - f07062a3-908e-4477-9e99-83d9dd4d2710 + - 229efd03-141f-4e52-9b8c-6e1787eab47e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -638,7 +641,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:44 GMT + - Wed, 10 Dec 2025 05:02:25 GMT Content-Type: - application/json Content-Length: @@ -661,15 +664,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f07062a3-908e-4477-9e99-83d9dd4d2710 + - 229efd03-141f-4e52-9b8c-6e1787eab47e Request-Id: - - req_Ok6dcW8sH4LWfb + - req_H3XVLVBupf8KVx Stripe-Account: - - acct_1SHydH3xzbZDwHJ0 + - acct_1ScfXc31nofbTDKV Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -684,9 +687,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydH3xzbZDwHJ0", + "id": "acct_1ScfXc31nofbTDKV", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:44 GMT + recorded_at: Wed, 10 Dec 2025 05:02:56 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml index 04499808e5..365f1ac922 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/calls_Checkout_StripeRedirect.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_xl9wEwr9qpffaK","request_duration_ms":3129}}' + - '{"last_request_metrics":{"request_id":"req_8gsugK0ZmLjdDT","request_duration_ms":2582}}' Idempotency-Key: - - 557dd57d-b082-4964-a5e3-d094dff1128c + - 1a25cf2c-9003-43ab-b360-6f31450c67ac Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:53 GMT + - Wed, 10 Dec 2025 05:02:33 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 557dd57d-b082-4964-a5e3-d094dff1128c + - 1a25cf2c-9003-43ab-b360-6f31450c67ac Original-Request: - - req_mDaxbCESIa3pda + - req_AdsZrTG6Yq2u2o Request-Id: - - req_mDaxbCESIa3pda + - req_AdsZrTG6Yq2u2o Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydTKSlogJNuPb", + "id": "acct_1ScfXn3fl4422P96", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411452, + "created": 1765342952, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHydTKSlogJNuPb/external_accounts" + "url": "/v1/accounts/acct_1ScfXn3fl4422P96/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,24 +226,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:53 GMT + recorded_at: Wed, 10 Dec 2025 05:03:03 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHydTKSlogJNuPb + uri: https://api.stripe.com/v1/accounts/acct_1ScfXn3fl4422P96 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mDaxbCESIa3pda","request_duration_ms":2179}}' + - '{"last_request_metrics":{"request_id":"req_AdsZrTG6Yq2u2o","request_duration_ms":2263}}' Idempotency-Key: - - 332b7551-ddab-4ace-a294-ad25daf9e849 + - 60d3f344-1399-4952-9f8d-047460c450c0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -256,7 +258,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:56 GMT + - Wed, 10 Dec 2025 05:02:36 GMT Content-Type: - application/json Content-Length: @@ -279,15 +281,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 332b7551-ddab-4ace-a294-ad25daf9e849 + - 60d3f344-1399-4952-9f8d-047460c450c0 Request-Id: - - req_Xu77OvIyW1ul4d + - req_ooITcivJw8PuiD Stripe-Account: - - acct_1SHydTKSlogJNuPb + - acct_1ScfXn3fl4422P96 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -302,9 +304,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydTKSlogJNuPb", + "id": "acct_1ScfXn3fl4422P96", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:56 GMT + recorded_at: Wed, 10 Dec 2025 05:03:06 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml index d4a064e944..3f1779f1cc 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_external_payment_url/returns_nil_when_an_order_is_not_supplied.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Ok6dcW8sH4LWfb","request_duration_ms":3129}}' + - '{"last_request_metrics":{"request_id":"req_H3XVLVBupf8KVx","request_duration_ms":3117}}' Idempotency-Key: - - e6da2910-13ae-4873-9541-b2aa9375b690 + - eff3b8ab-e335-409e-ac9d-298caa1f94d0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:46 GMT + - Wed, 10 Dec 2025 05:02:27 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e6da2910-13ae-4873-9541-b2aa9375b690 + - eff3b8ab-e335-409e-ac9d-298caa1f94d0 Original-Request: - - req_f843NDZrg9txss + - req_1YqoY76mHmNa6E Request-Id: - - req_f843NDZrg9txss + - req_1YqoY76mHmNa6E Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydM3XtJRggIUI", + "id": "acct_1ScfXhKd0IopBUNG", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411445, + "created": 1765342947, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHydM3XtJRggIUI/external_accounts" + "url": "/v1/accounts/acct_1ScfXhKd0IopBUNG/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,24 +226,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:46 GMT + recorded_at: Wed, 10 Dec 2025 05:02:58 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHydM3XtJRggIUI + uri: https://api.stripe.com/v1/accounts/acct_1ScfXhKd0IopBUNG body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_f843NDZrg9txss","request_duration_ms":2472}}' + - '{"last_request_metrics":{"request_id":"req_1YqoY76mHmNa6E","request_duration_ms":2268}}' Idempotency-Key: - - b8ed8194-e743-460b-a174-80b37af1e93e + - d99e2f25-a337-46e3-9d69-eaefe97d974e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -256,7 +258,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:49 GMT + - Wed, 10 Dec 2025 05:02:30 GMT Content-Type: - application/json Content-Length: @@ -279,15 +281,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b8ed8194-e743-460b-a174-80b37af1e93e + - d99e2f25-a337-46e3-9d69-eaefe97d974e Request-Id: - - req_xl9wEwr9qpffaK + - req_8gsugK0ZmLjdDT Stripe-Account: - - acct_1SHydM3XtJRggIUI + - acct_1ScfXhKd0IopBUNG Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -302,9 +304,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydM3XtJRggIUI", + "id": "acct_1ScfXhKd0IopBUNG", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:49 GMT + recorded_at: Wed, 10 Dec 2025 05:03:01 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml index 71849b81a9..3b50f04cf5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/completes_the_purchase.yml @@ -8,13 +8,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_SQ4f3FcbFiBaPJ","request_duration_ms":584}}' + - '{"last_request_metrics":{"request_id":"req_CIRtVxWWmRPgAk","request_duration_ms":625}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -29,11 +29,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:50 GMT + - Wed, 10 Dec 2025 05:01:38 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -52,11 +52,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_UD2VyeaXM44lFF + - req_gLRQms9d5PQB4a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -71,7 +71,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycUKuuB1fWySnOTTbO80F", + "id": "pm_1ScfWvKuuB1fWySnuxryuazX", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -97,7 +97,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -115,30 +115,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411390, + "created": 1765342897, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:50 GMT + recorded_at: Wed, 10 Dec 2025 05:02:08 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=1000¤cy=aud&payment_method=pm_1SHycUKuuB1fWySnOTTbO80F&payment_method_types[0]=card&capture_method=manual + string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_UD2VyeaXM44lFF","request_duration_ms":366}}' + - '{"last_request_metrics":{"request_id":"req_gLRQms9d5PQB4a","request_duration_ms":366}}' Idempotency-Key: - - 35492d1f-329f-44d2-8195-05f9ff25913f + - 327ab88d-cbe9-4c9f-92b6-7430a7551fab Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -155,11 +156,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:50 GMT + - Wed, 10 Dec 2025 05:01:38 GMT Content-Type: - application/json Content-Length: - - '1385' + - '1394' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -178,17 +179,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 35492d1f-329f-44d2-8195-05f9ff25913f + - 327ab88d-cbe9-4c9f-92b6-7430a7551fab Original-Request: - - req_iw8imeNgQboLMM + - req_oKwpRAPoIas68u Request-Id: - - req_iw8imeNgQboLMM + - req_oKwpRAPoIas68u Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -203,7 +204,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycUKuuB1fWySn09b9hD39", + "id": "pi_3ScfWwKuuB1fWySn24JIBgug", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -219,19 +220,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411390, + "created": 1765342898, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycUKuuB1fWySnOTTbO80F", + "payment_method": "pm_1ScfWwKuuB1fWySna0jkVXX2", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -256,24 +257,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:09:50 GMT + recorded_at: Wed, 10 Dec 2025 05:02:09 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHycUKuuB1fWySn09b9hD39/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWwKuuB1fWySn24JIBgug/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_iw8imeNgQboLMM","request_duration_ms":351}}' + - '{"last_request_metrics":{"request_id":"req_oKwpRAPoIas68u","request_duration_ms":462}}' Idempotency-Key: - - 07a359f8-cef6-4fb7-8f2b-43676606a839 + - cd9e94f6-0ba3-4e63-9a94-95144927f46f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -290,11 +291,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:51 GMT + - Wed, 10 Dec 2025 05:01:39 GMT Content-Type: - application/json Content-Length: - - '1408' + - '1417' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -313,17 +314,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 07a359f8-cef6-4fb7-8f2b-43676606a839 + - cd9e94f6-0ba3-4e63-9a94-95144927f46f Original-Request: - - req_FGkM4Th0Xrp0sG + - req_8X19dvLLBKnzTE Request-Id: - - req_FGkM4Th0Xrp0sG + - req_8X19dvLLBKnzTE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -338,7 +339,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycUKuuB1fWySn09b9hD39", + "id": "pi_3ScfWwKuuB1fWySn24JIBgug", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, @@ -354,19 +355,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411390, + "created": 1765342898, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycUKuuB1fWySn027ZYkvG", + "latest_charge": "ch_3ScfWwKuuB1fWySn2EpukSUc", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycUKuuB1fWySnOTTbO80F", + "payment_method": "pm_1ScfWwKuuB1fWySna0jkVXX2", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -391,22 +392,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:09:51 GMT + recorded_at: Wed, 10 Dec 2025 05:02:09 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHycUKuuB1fWySn09b9hD39 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWwKuuB1fWySn24JIBgug body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_FGkM4Th0Xrp0sG","request_duration_ms":752}}' + - '{"last_request_metrics":{"request_id":"req_8X19dvLLBKnzTE","request_duration_ms":817}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -421,11 +422,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:53 GMT + - Wed, 10 Dec 2025 05:01:40 GMT Content-Type: - application/json Content-Length: - - '1408' + - '1417' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -444,11 +445,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_iMC7kd1kcV2tHD + - req_8qPDLoQh6Cr0g3 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -463,7 +464,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycUKuuB1fWySn09b9hD39", + "id": "pi_3ScfWwKuuB1fWySn24JIBgug", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, @@ -479,19 +480,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411390, + "created": 1765342898, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycUKuuB1fWySn027ZYkvG", + "latest_charge": "ch_3ScfWwKuuB1fWySn2EpukSUc", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycUKuuB1fWySnOTTbO80F", + "payment_method": "pm_1ScfWwKuuB1fWySna0jkVXX2", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -516,10 +517,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:09:53 GMT + recorded_at: Wed, 10 Dec 2025 05:02:10 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHycUKuuB1fWySn09b9hD39/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWwKuuB1fWySn24JIBgug/capture body: encoding: UTF-8 string: amount_to_capture=1000 @@ -529,7 +530,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -550,11 +551,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:54 GMT + - Wed, 10 Dec 2025 05:01:41 GMT Content-Type: - application/json Content-Length: - - '5486' + - '5515' Connection: - close Access-Control-Allow-Credentials: @@ -573,13 +574,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=eX-KcG8mKrMdAIVXHJ0lhA6ccfo2Q0KJ-9O1A-alo-dJ1KX6Ml8LECdy3BhL4ZWX7smIphstbOgh0BYE + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6fc4e94b-012c-4195-a26f-76744bfd98d0 + - 6de9e4a3-9b72-449d-9587-fd8d8de5f70d Original-Request: - - req_P6n2puINvUfkiG + - req_mQbZRsMSvEKbQH Request-Id: - - req_P6n2puINvUfkiG + - req_mQbZRsMSvEKbQH Stripe-Should-Retry: - 'false' Stripe-Version: @@ -598,7 +599,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycUKuuB1fWySn09b9hD39", + "id": "pi_3ScfWwKuuB1fWySn24JIBgug", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -616,7 +617,7 @@ http_interactions: "object": "list", "data": [ { - "id": "ch_3SHycUKuuB1fWySn027ZYkvG", + "id": "ch_3ScfWwKuuB1fWySn2EpukSUc", "object": "charge", "amount": 1000, "amount_captured": 1000, @@ -625,7 +626,7 @@ http_interactions: "application": null, "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHycUKuuB1fWySn0Rn5U5ZV", + "balance_transaction": "txn_3ScfWwKuuB1fWySn2FqA1XQM", "billing_details": { "address": { "city": null, @@ -642,7 +643,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411391, + "created": 1765342898, "currency": "aud", "customer": null, "description": null, @@ -665,26 +666,26 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 5, + "risk_score": 52, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHycUKuuB1fWySn09b9hD39", - "payment_method": "pm_1SHycUKuuB1fWySnOTTbO80F", + "payment_intent": "pi_3ScfWwKuuB1fWySn24JIBgug", + "payment_method": "pm_1ScfWwKuuB1fWySna0jkVXX2", "payment_method_details": { "card": { "amount_authorized": 1000, - "authorization_code": "472507", + "authorization_code": "416639", "brand": "mastercard", - "capture_before": 1761016191, + "capture_before": 1765947698, "checks": { "address_line1_check": null, "address_postal_code_check": null, "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -704,7 +705,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCBL35FE1014", + "network_transaction_id": "MCCBL35FE1210", "overcapture": { "maximum_amount_capturable": 1000, "status": "unavailable" @@ -718,14 +719,14 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xRmlxRXNLdXVCMWZXeVNuKIL-tscGMgbk3Ph0-zQ6LBZuvMwgWpIc516hSo9DCRvCE6XpMVbrjt0xS5B9rNPBqbo-tELdIDfvIja7", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xRmlxRXNLdXVCMWZXeVNuKLX948kGMgbJk4v-ydI6LBaT5eUktqaDXAm2_m7Ns2jeka01SDmx4j-zZfWVgtX-4AoKXKbrSvhH-Zor", "refunded": false, "refunds": { "object": "list", "data": [], "has_more": false, "total_count": 0, - "url": "/v1/charges/ch_3SHycUKuuB1fWySn027ZYkvG/refunds" + "url": "/v1/charges/ch_3ScfWwKuuB1fWySn2EpukSUc/refunds" }, "review": null, "shipping": null, @@ -740,23 +741,24 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges?payment_intent=pi_3SHycUKuuB1fWySn09b9hD39" + "url": "/v1/charges?payment_intent=pi_3ScfWwKuuB1fWySn24JIBgug" }, "client_secret": "", "confirmation_method": "automatic", - "created": 1760411390, + "created": 1765342898, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycUKuuB1fWySn027ZYkvG", + "latest_charge": "ch_3ScfWwKuuB1fWySn2EpukSUc", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycUKuuB1fWySnOTTbO80F", + "payment_method": "pm_1ScfWwKuuB1fWySna0jkVXX2", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -781,7 +783,7 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:09:54 GMT + recorded_at: Wed, 10 Dec 2025 05:02:12 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -790,15 +792,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_iMC7kd1kcV2tHD","request_duration_ms":305}}' + - '{"last_request_metrics":{"request_id":"req_8qPDLoQh6Cr0g3","request_duration_ms":315}}' Idempotency-Key: - - 7960bc09-dbcd-4a70-84a8-63251c5bda6a + - 5c92621b-fbef-47f7-bff9-8a08ae168d3d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -815,11 +817,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:56 GMT + - Wed, 10 Dec 2025 05:01:43 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -838,17 +840,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 7960bc09-dbcd-4a70-84a8-63251c5bda6a + - 5c92621b-fbef-47f7-bff9-8a08ae168d3d Original-Request: - - req_BXQ8ajU5FtDfj9 + - req_KdStMu6Yir4li5 Request-Id: - - req_BXQ8ajU5FtDfj9 + - req_KdStMu6Yir4li5 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -863,7 +865,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycY3xTMVNd8NW", + "id": "acct_1ScfWzKcrUMCVLqh", "object": "account", "business_profile": { "annual_revenue": null, @@ -872,6 +874,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -896,7 +899,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411395, + "created": 1765342902, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -905,7 +908,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHycY3xTMVNd8NW/external_accounts" + "url": "/v1/accounts/acct_1ScfWzKcrUMCVLqh/external_accounts" }, "future_requirements": { "alternatives": [], @@ -997,6 +1000,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -1006,24 +1010,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:09:56 GMT + recorded_at: Wed, 10 Dec 2025 05:02:14 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHycY3xTMVNd8NW + uri: https://api.stripe.com/v1/accounts/acct_1ScfWzKcrUMCVLqh body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BXQ8ajU5FtDfj9","request_duration_ms":2196}}' + - '{"last_request_metrics":{"request_id":"req_KdStMu6Yir4li5","request_duration_ms":2340}}' Idempotency-Key: - - 83a63a59-c28f-48d5-9a1a-b6fdc306d108 + - 4c4a11eb-6642-4981-b004-4a5fa3c987af Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -1038,7 +1042,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:59 GMT + - Wed, 10 Dec 2025 05:01:46 GMT Content-Type: - application/json Content-Length: @@ -1061,15 +1065,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 83a63a59-c28f-48d5-9a1a-b6fdc306d108 + - 4c4a11eb-6642-4981-b004-4a5fa3c987af Request-Id: - - req_zWZooOcbU5sXDZ + - req_tZ5uceml4HH4q7 Stripe-Account: - - acct_1SHycY3xTMVNd8NW + - acct_1ScfWzKcrUMCVLqh Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1084,9 +1088,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycY3xTMVNd8NW", + "id": "acct_1ScfWzKcrUMCVLqh", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:09:59 GMT + recorded_at: Wed, 10 Dec 2025 05:02:16 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml index 68499c3d67..188065f6ee 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_purchase/provides_an_error_message_to_help_developer_debug.yml @@ -8,13 +8,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_zWZooOcbU5sXDZ","request_duration_ms":2896}}' + - '{"last_request_metrics":{"request_id":"req_tZ5uceml4HH4q7","request_duration_ms":2414}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -29,11 +29,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:00 GMT + - Wed, 10 Dec 2025 05:01:46 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -52,11 +52,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_cPcuH1FL5rL8CK + - req_B6N7Q8a4t5IUuT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -71,7 +71,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycdKuuB1fWySnTyZMRmRK", + "id": "pm_1ScfX4KuuB1fWySnwEki4Rh5", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -97,7 +97,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -115,30 +115,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411399, + "created": 1765342906, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:59 GMT + recorded_at: Wed, 10 Dec 2025 05:02:17 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=1000¤cy=aud&payment_method=pm_1SHycdKuuB1fWySnTyZMRmRK&payment_method_types[0]=card&capture_method=manual + string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cPcuH1FL5rL8CK","request_duration_ms":340}}' + - '{"last_request_metrics":{"request_id":"req_B6N7Q8a4t5IUuT","request_duration_ms":382}}' Idempotency-Key: - - e2c9face-6731-488c-9de2-6d45189fcce4 + - 13bf9fd1-0040-412f-ac11-b8790b0c2191 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -155,11 +156,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:00 GMT + - Wed, 10 Dec 2025 05:01:47 GMT Content-Type: - application/json Content-Length: - - '1385' + - '1394' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -178,17 +179,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e2c9face-6731-488c-9de2-6d45189fcce4 + - 13bf9fd1-0040-412f-ac11-b8790b0c2191 Original-Request: - - req_cmJeBaYWupZWAD + - req_r5mUlzDEQfGfw5 Request-Id: - - req_cmJeBaYWupZWAD + - req_r5mUlzDEQfGfw5 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -203,7 +204,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyceKuuB1fWySn0bazc8MA", + "id": "pi_3ScfX4KuuB1fWySn0bP9PKdK", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -219,19 +220,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411400, + "created": 1765342906, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycdKuuB1fWySnTyZMRmRK", + "payment_method": "pm_1ScfX4KuuB1fWySnqijRnJk0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -256,24 +257,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:00 GMT + recorded_at: Wed, 10 Dec 2025 05:02:17 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHyceKuuB1fWySn0bazc8MA/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfX4KuuB1fWySn0bP9PKdK/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cmJeBaYWupZWAD","request_duration_ms":361}}' + - '{"last_request_metrics":{"request_id":"req_r5mUlzDEQfGfw5","request_duration_ms":457}}' Idempotency-Key: - - 9b2b225b-408e-4633-b45c-fc5a9318796b + - 01e87a41-630a-4507-aa50-575edb825c30 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -290,11 +291,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:01 GMT + - Wed, 10 Dec 2025 05:01:47 GMT Content-Type: - application/json Content-Length: - - '1408' + - '1417' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -313,17 +314,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9b2b225b-408e-4633-b45c-fc5a9318796b + - 01e87a41-630a-4507-aa50-575edb825c30 Original-Request: - - req_ZJ4A1HuBfr2Isz + - req_QCMK8dE79JS8vk Request-Id: - - req_ZJ4A1HuBfr2Isz + - req_QCMK8dE79JS8vk Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -338,7 +339,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyceKuuB1fWySn0bazc8MA", + "id": "pi_3ScfX4KuuB1fWySn0bP9PKdK", "object": "payment_intent", "amount": 1000, "amount_capturable": 1000, @@ -354,19 +355,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411400, + "created": 1765342906, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHyceKuuB1fWySn0nTzFpmm", + "latest_charge": "ch_3ScfX4KuuB1fWySn0WyKMRmj", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycdKuuB1fWySnTyZMRmRK", + "payment_method": "pm_1ScfX4KuuB1fWySnqijRnJk0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -391,7 +392,7 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:01 GMT + recorded_at: Wed, 10 Dec 2025 05:02:18 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -400,15 +401,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ZJ4A1HuBfr2Isz","request_duration_ms":795}}' + - '{"last_request_metrics":{"request_id":"req_QCMK8dE79JS8vk","request_duration_ms":777}}' Idempotency-Key: - - a5d1409f-1b43-495a-8895-425f8746c707 + - 9e010928-7ee0-43a8-9328-e8668713fbb7 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -425,11 +426,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:06 GMT + - Wed, 10 Dec 2025 05:01:50 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -448,17 +449,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a5d1409f-1b43-495a-8895-425f8746c707 + - 9e010928-7ee0-43a8-9328-e8668713fbb7 Original-Request: - - req_dZsypMoEpDdmzJ + - req_qAN34l4DRcS5Dm Request-Id: - - req_dZsypMoEpDdmzJ + - req_qAN34l4DRcS5Dm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -473,7 +474,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyci3SsZuVIm8E", + "id": "acct_1ScfX6KvkgS6bIc9", "object": "account", "business_profile": { "annual_revenue": null, @@ -482,6 +483,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -506,7 +508,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411405, + "created": 1765342909, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -515,7 +517,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyci3SsZuVIm8E/external_accounts" + "url": "/v1/accounts/acct_1ScfX6KvkgS6bIc9/external_accounts" }, "future_requirements": { "alternatives": [], @@ -607,6 +609,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -616,24 +619,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:06 GMT + recorded_at: Wed, 10 Dec 2025 05:02:21 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyci3SsZuVIm8E + uri: https://api.stripe.com/v1/accounts/acct_1ScfX6KvkgS6bIc9 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_dZsypMoEpDdmzJ","request_duration_ms":2223}}' + - '{"last_request_metrics":{"request_id":"req_qAN34l4DRcS5Dm","request_duration_ms":2177}}' Idempotency-Key: - - 948b0533-e2b4-4216-b19b-1b33eea2d0c6 + - 8b9bf74a-0ab3-46bc-b83e-bc8f73127d9b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -648,7 +651,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:09 GMT + - Wed, 10 Dec 2025 05:01:53 GMT Content-Type: - application/json Content-Length: @@ -671,15 +674,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 948b0533-e2b4-4216-b19b-1b33eea2d0c6 + - 8b9bf74a-0ab3-46bc-b83e-bc8f73127d9b Request-Id: - - req_uk6nYLxllK30Hw + - req_AyNDJNH7SnAbJ0 Stripe-Account: - - acct_1SHyci3SsZuVIm8E + - acct_1ScfX6KvkgS6bIc9 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -694,9 +697,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyci3SsZuVIm8E", + "id": "acct_1ScfX6KvkgS6bIc9", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:09 GMT + recorded_at: Wed, 10 Dec 2025 05:02:24 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml index 8a04736dae..ff7d79a467 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_confirmed_payment/refunds_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_uk6nYLxllK30Hw","request_duration_ms":3488}}' + - '{"last_request_metrics":{"request_id":"req_AyNDJNH7SnAbJ0","request_duration_ms":2988}}' Idempotency-Key: - - e690987a-db47-4d57-8c4d-7bf6ca0e6077 + - 72167437-c097-490f-874c-cd8c831779a9 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:11 GMT + - Wed, 10 Dec 2025 05:01:55 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e690987a-db47-4d57-8c4d-7bf6ca0e6077 + - 72167437-c097-490f-874c-cd8c831779a9 Original-Request: - - req_b5wGV6II03wyrQ + - req_XfJmfw1dOSGILu Request-Id: - - req_b5wGV6II03wyrQ + - req_XfJmfw1dOSGILu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycn3skzUYVCEC", + "id": "acct_1ScfXB3ubCDg51hB", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411411, + "created": 1765342915, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHycn3skzUYVCEC/external_accounts" + "url": "/v1/accounts/acct_1ScfXB3ubCDg51hB/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,7 +226,7 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:11 GMT + recorded_at: Wed, 10 Dec 2025 05:02:26 GMT - request: method: get uri: https://api.stripe.com/v1/payment_methods/pm_card_mastercard @@ -233,13 +235,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_b5wGV6II03wyrQ","request_duration_ms":2319}}' + - '{"last_request_metrics":{"request_id":"req_XfJmfw1dOSGILu","request_duration_ms":2389}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -254,11 +256,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:13 GMT + - Wed, 10 Dec 2025 05:01:56 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -277,11 +279,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_0ecdOMMOCmFAGW + - req_3Y88GknOrpc6eC Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -296,7 +298,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycrKuuB1fWySn9z38cxBS", + "id": "pm_1ScfXEKuuB1fWySnKHGWe87f", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -322,7 +324,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -340,13 +342,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411413, + "created": 1765342916, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:10:13 GMT + recorded_at: Wed, 10 Dec 2025 05:02:27 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents @@ -355,17 +358,17 @@ http_interactions: string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=automatic&confirm=true headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_0ecdOMMOCmFAGW","request_duration_ms":358}}' + - '{"last_request_metrics":{"request_id":"req_3Y88GknOrpc6eC","request_duration_ms":374}}' Idempotency-Key: - - 6b385a83-08b5-42d2-bcf1-9f8c7a19d766 + - c7be6bbd-07f7-4658-8419-4b19fec576a4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB X-Stripe-Client-User-Agent: - "" Content-Type: @@ -382,11 +385,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:14 GMT + - Wed, 10 Dec 2025 05:01:58 GMT Content-Type: - application/json Content-Length: - - '1437' + - '1446' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -405,19 +408,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6b385a83-08b5-42d2-bcf1-9f8c7a19d766 + - c7be6bbd-07f7-4658-8419-4b19fec576a4 Original-Request: - - req_G0oH9VF0R9KEta + - req_6IJzDvAWqb4riR Request-Id: - - req_G0oH9VF0R9KEta + - req_6IJzDvAWqb4riR Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -432,7 +435,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycs3skzUYVCEC1AYCphJu", + "id": "pi_3ScfXF3ubCDg51hB1EF2NrbM", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -448,19 +451,19 @@ http_interactions: "capture_method": "automatic", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411414, + "created": 1765342917, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycs3skzUYVCEC1ISvEA1K", + "latest_charge": "ch_3ScfXF3ubCDg51hB1zQnQuuE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycr3skzUYVCECOQkFtcOs", + "payment_method": "pm_1ScfXF3ubCDg51hBg6KiRULD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -485,24 +488,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:14 GMT + recorded_at: Wed, 10 Dec 2025 05:02:28 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHycs3skzUYVCEC1AYCphJu + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXF3ubCDg51hB1EF2NrbM body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_G0oH9VF0R9KEta","request_duration_ms":1270}}' + - '{"last_request_metrics":{"request_id":"req_6IJzDvAWqb4riR","request_duration_ms":1390}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -517,11 +520,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:15 GMT + - Wed, 10 Dec 2025 05:01:58 GMT Content-Type: - application/json Content-Length: - - '1437' + - '1446' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -540,13 +543,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_8g5n89kS2wZGgD + - req_MrZghyD9DVmIzF Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -561,7 +564,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycs3skzUYVCEC1AYCphJu", + "id": "pi_3ScfXF3ubCDg51hB1EF2NrbM", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -577,19 +580,19 @@ http_interactions: "capture_method": "automatic", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411414, + "created": 1765342917, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycs3skzUYVCEC1ISvEA1K", + "latest_charge": "ch_3ScfXF3ubCDg51hB1zQnQuuE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycr3skzUYVCECOQkFtcOs", + "payment_method": "pm_1ScfXF3ubCDg51hBg6KiRULD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -614,10 +617,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:15 GMT + recorded_at: Wed, 10 Dec 2025 05:02:29 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHycs3skzUYVCEC1AYCphJu + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXF3ubCDg51hB1EF2NrbM body: encoding: US-ASCII string: '' @@ -625,7 +628,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -633,7 +636,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Connection: - close Accept-Encoding: @@ -648,11 +651,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:15 GMT + - Wed, 10 Dec 2025 05:01:59 GMT Content-Type: - application/json Content-Length: - - '5484' + - '5512' Connection: - close Access-Control-Allow-Credentials: @@ -671,11 +674,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=EBEdXvGq7vyH5-HXur0mgbtI571KR9hWqG0PWAUMbAFCjbwUqpD4IZrGD38VgDCDiHYssbcVZ5ZF0Ci4 Request-Id: - - req_fwP6lW8m0wUCdg + - req_6aE2TBM4jlIIiB Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Stripe-Version: - '2020-08-27' Vary: @@ -692,7 +695,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHycs3skzUYVCEC1AYCphJu", + "id": "pi_3ScfXF3ubCDg51hB1EF2NrbM", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -710,7 +713,7 @@ http_interactions: "object": "list", "data": [ { - "id": "ch_3SHycs3skzUYVCEC1ISvEA1K", + "id": "ch_3ScfXF3ubCDg51hB1zQnQuuE", "object": "charge", "amount": 1000, "amount_captured": 1000, @@ -718,7 +721,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHycs3skzUYVCEC1shXRYZC", + "balance_transaction": "txn_3ScfXF3ubCDg51hB14iqjIaY", "billing_details": { "address": { "city": null, @@ -735,7 +738,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411414, + "created": 1765342917, "currency": "aud", "customer": null, "description": null, @@ -758,17 +761,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 14, + "risk_score": 18, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHycs3skzUYVCEC1AYCphJu", - "payment_method": "pm_1SHycr3skzUYVCECOQkFtcOs", + "payment_intent": "pi_3ScfXF3ubCDg51hB1EF2NrbM", + "payment_method": "pm_1ScfXF3ubCDg51hBg6KiRULD", "payment_method_details": { "card": { "amount_authorized": 1000, - "authorization_code": "345157", + "authorization_code": "730271", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -776,7 +779,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -796,7 +799,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCEGE38L1014", + "network_transaction_id": "MCCIQMDCO1210", "overcapture": { "maximum_amount_capturable": 1000, "status": "unavailable" @@ -810,14 +813,14 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5Y24zc2t6VVlWQ0VDKJf-tscGMgZfXVhqRVA6LBb9C14JHQuAAkH2hcAHPHVhIUAugWYFJHwOflMDp312I3bTHeJM_4za-jiT", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWEIzdWJDRGc1MWhCKMb948kGMgbltMPYbs86LBaTw5dh5CterN-P4qfBqa1d8YdfiXu-hRaKAvPZivpJL3na0_XoQqCLzJ2j", "refunded": false, "refunds": { "object": "list", "data": [], "has_more": false, "total_count": 0, - "url": "/v1/charges/ch_3SHycs3skzUYVCEC1ISvEA1K/refunds" + "url": "/v1/charges/ch_3ScfXF3ubCDg51hB1zQnQuuE/refunds" }, "review": null, "shipping": null, @@ -832,23 +835,24 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges?payment_intent=pi_3SHycs3skzUYVCEC1AYCphJu" + "url": "/v1/charges?payment_intent=pi_3ScfXF3ubCDg51hB1EF2NrbM" }, "client_secret": "", "confirmation_method": "automatic", - "created": 1760411414, + "created": 1765342917, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHycs3skzUYVCEC1ISvEA1K", + "latest_charge": "ch_3ScfXF3ubCDg51hB1zQnQuuE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHycr3skzUYVCECOQkFtcOs", + "payment_method": "pm_1ScfXF3ubCDg51hBg6KiRULD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -873,10 +877,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:15 GMT + recorded_at: Wed, 10 Dec 2025 05:02:29 GMT - request: method: post - uri: https://api.stripe.com/v1/charges/ch_3SHycs3skzUYVCEC1ISvEA1K/refunds + uri: https://api.stripe.com/v1/charges/ch_3ScfXF3ubCDg51hB1zQnQuuE/refunds body: encoding: UTF-8 string: amount=1000&expand[0]=charge @@ -886,7 +890,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -894,7 +898,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Connection: - close Accept-Encoding: @@ -909,7 +913,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:16 GMT + - Wed, 10 Dec 2025 05:02:00 GMT Content-Type: - application/json Content-Length: @@ -932,15 +936,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=QTOnARtZwAtE_Ix7LSmk3ePfHPCdmafjtJ4iqHQG1vOq6wGS7t_x-VVk-Xre4OKwr12AVJ1C5Z37amoS + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=x2T6EiV0aVoqi7bptLcBBCRyz6_e_jOpOr8TL2aF1FPiuN1gl_B4E090YPWwRcl4Bf0Zj0kRKYN4666x Idempotency-Key: - - d0b2483b-7816-415f-ad36-240ece943b7d + - c2634127-5100-4781-8a62-799beb129a62 Original-Request: - - req_URTTVTzPvEtvTs + - req_BOHaNpsskSueUX Request-Id: - - req_URTTVTzPvEtvTs + - req_BOHaNpsskSueUX Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Stripe-Should-Retry: - 'false' Stripe-Version: @@ -959,12 +963,12 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "re_3SHycs3skzUYVCEC1l8e8VHC", + "id": "re_3ScfXF3ubCDg51hB192EYU5q", "object": "refund", "amount": 1000, - "balance_transaction": "txn_3SHycs3skzUYVCEC1NDLMfcZ", + "balance_transaction": "txn_3ScfXF3ubCDg51hB1K5veexz", "charge": { - "id": "ch_3SHycs3skzUYVCEC1ISvEA1K", + "id": "ch_3ScfXF3ubCDg51hB1zQnQuuE", "object": "charge", "amount": 1000, "amount_captured": 1000, @@ -972,7 +976,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHycs3skzUYVCEC1shXRYZC", + "balance_transaction": "txn_3ScfXF3ubCDg51hB14iqjIaY", "billing_details": { "address": { "city": null, @@ -989,7 +993,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411414, + "created": 1765342917, "currency": "aud", "customer": null, "description": null, @@ -1012,17 +1016,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 14, + "risk_score": 18, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHycs3skzUYVCEC1AYCphJu", - "payment_method": "pm_1SHycr3skzUYVCECOQkFtcOs", + "payment_intent": "pi_3ScfXF3ubCDg51hB1EF2NrbM", + "payment_method": "pm_1ScfXF3ubCDg51hBg6KiRULD", "payment_method_details": { "card": { "amount_authorized": 1000, - "authorization_code": "345157", + "authorization_code": "730271", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -1030,7 +1034,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -1050,7 +1054,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCEGE38L1014", + "network_transaction_id": "MCCIQMDCO1210", "overcapture": { "maximum_amount_capturable": 1000, "status": "unavailable" @@ -1064,18 +1068,18 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5Y24zc2t6VVlWQ0VDKJj-tscGMgYuvUg0pYk6LBY3-srCDRqzE1oHEULenKxQKsak07pDMofIYSk0ldxDWan4mDzJUNBYRUBw", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWEIzdWJDRGc1MWhCKMj948kGMganLz42J646LBYCUKcSHeo2qFSpGY0-5vxFW70_sYGVlJk4jJlvX9EtuwQu16rMvSWy7NeQ", "refunded": true, "refunds": { "object": "list", "data": [ { - "id": "re_3SHycs3skzUYVCEC1l8e8VHC", + "id": "re_3ScfXF3ubCDg51hB192EYU5q", "object": "refund", "amount": 1000, - "balance_transaction": "txn_3SHycs3skzUYVCEC1NDLMfcZ", - "charge": "ch_3SHycs3skzUYVCEC1ISvEA1K", - "created": 1760411416, + "balance_transaction": "txn_3ScfXF3ubCDg51hB1K5veexz", + "charge": "ch_3ScfXF3ubCDg51hB1zQnQuuE", + "created": 1765342919, "currency": "aud", "destination_details": { "card": { @@ -1086,7 +1090,7 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHycs3skzUYVCEC1AYCphJu", + "payment_intent": "pi_3ScfXF3ubCDg51hB1EF2NrbM", "reason": null, "receipt_number": null, "source_transfer_reversal": null, @@ -1096,7 +1100,7 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges/ch_3SHycs3skzUYVCEC1ISvEA1K/refunds" + "url": "/v1/charges/ch_3ScfXF3ubCDg51hB1zQnQuuE/refunds" }, "review": null, "shipping": null, @@ -1108,7 +1112,7 @@ http_interactions: "transfer_data": null, "transfer_group": null }, - "created": 1760411416, + "created": 1765342919, "currency": "aud", "destination_details": { "card": { @@ -1119,31 +1123,31 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHycs3skzUYVCEC1AYCphJu", + "payment_intent": "pi_3ScfXF3ubCDg51hB1EF2NrbM", "reason": null, "receipt_number": null, "source_transfer_reversal": null, "status": "succeeded", "transfer_reversal": null } - recorded_at: Tue, 14 Oct 2025 03:10:16 GMT + recorded_at: Wed, 10 Dec 2025 05:02:30 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHycn3skzUYVCEC + uri: https://api.stripe.com/v1/accounts/acct_1ScfXB3ubCDg51hB body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_8g5n89kS2wZGgD","request_duration_ms":323}}' + - '{"last_request_metrics":{"request_id":"req_MrZghyD9DVmIzF","request_duration_ms":359}}' Idempotency-Key: - - dede66b8-1513-4976-90c9-939afe1f5f10 + - 1d47a616-1a5d-4227-bfd6-f57671cbc940 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -1158,7 +1162,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:19 GMT + - Wed, 10 Dec 2025 05:02:02 GMT Content-Type: - application/json Content-Length: @@ -1181,15 +1185,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - dede66b8-1513-4976-90c9-939afe1f5f10 + - 1d47a616-1a5d-4227-bfd6-f57671cbc940 Request-Id: - - req_9i4J8gJf2OrRbM + - req_2DrUZzVPTv60ql Stripe-Account: - - acct_1SHycn3skzUYVCEC + - acct_1ScfXB3ubCDg51hB Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1204,9 +1208,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycn3skzUYVCEC", + "id": "acct_1ScfXB3ubCDg51hB", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:19 GMT + recorded_at: Wed, 10 Dec 2025 05:02:33 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml index 7f4648006f..b85c26ae3d 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Spree_Gateway_StripeSCA/_void/with_a_voidable_payment/void_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=carrot.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9i4J8gJf2OrRbM","request_duration_ms":2987}}' + - '{"last_request_metrics":{"request_id":"req_2DrUZzVPTv60ql","request_duration_ms":2609}}' Idempotency-Key: - - c9b93e7d-95a1-4b41-a32c-145d9c9bd525 + - 9fc486d9-99d2-4d98-a6bb-504f56384e25 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:22 GMT + - Wed, 10 Dec 2025 05:02:05 GMT Content-Type: - application/json Content-Length: - - '3446' + - '3528' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c9b93e7d-95a1-4b41-a32c-145d9c9bd525 + - 9fc486d9-99d2-4d98-a6bb-504f56384e25 Original-Request: - - req_BCpQHP3fzu85Tz + - req_1sDo2kgcanXSFB Request-Id: - - req_BCpQHP3fzu85Tz + - req_1sDo2kgcanXSFB Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycy3mFixorNyN", + "id": "acct_1ScfXLKk8Ei30oQ0", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411421, + "created": 1765342924, "default_currency": "aud", "details_submitted": false, "email": "carrot.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHycy3mFixorNyN/external_accounts" + "url": "/v1/accounts/acct_1ScfXLKk8Ei30oQ0/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,7 +226,7 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:22 GMT + recorded_at: Wed, 10 Dec 2025 05:02:35 GMT - request: method: get uri: https://api.stripe.com/v1/payment_methods/pm_card_mastercard @@ -233,13 +235,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BCpQHP3fzu85Tz","request_duration_ms":2242}}' + - '{"last_request_metrics":{"request_id":"req_1sDo2kgcanXSFB","request_duration_ms":2323}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -254,11 +256,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:23 GMT + - Wed, 10 Dec 2025 05:02:06 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -277,11 +279,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_8LqIlAZWh95WCq + - req_nfCdEZCaFbM7Pw Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -296,7 +298,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyd1KuuB1fWySnIod0szJz", + "id": "pm_1ScfXNKuuB1fWySnkDslRdQ0", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -322,7 +324,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -340,13 +342,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411423, + "created": 1765342925, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:10:23 GMT + recorded_at: Wed, 10 Dec 2025 05:02:36 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents @@ -355,17 +358,17 @@ http_interactions: string: amount=1000¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_8LqIlAZWh95WCq","request_duration_ms":351}}' + - '{"last_request_metrics":{"request_id":"req_nfCdEZCaFbM7Pw","request_duration_ms":370}}' Idempotency-Key: - - af72843c-72ba-45a2-9403-b18ac5331eee + - '089304d9-fae5-4e39-8503-5a7e076eddab' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 X-Stripe-Client-User-Agent: - "" Content-Type: @@ -382,11 +385,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:24 GMT + - Wed, 10 Dec 2025 05:02:06 GMT Content-Type: - application/json Content-Length: - - '1418' + - '1427' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -405,19 +408,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - af72843c-72ba-45a2-9403-b18ac5331eee + - '089304d9-fae5-4e39-8503-5a7e076eddab' Original-Request: - - req_Gepz6g0LNBsl37 + - req_OQQN5yhePMp7f8 Request-Id: - - req_Gepz6g0LNBsl37 + - req_OQQN5yhePMp7f8 Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -432,7 +435,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyd23mFixorNyN0Cq861yx", + "id": "pi_3ScfXOKk8Ei30oQ01UyLJ98y", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -448,19 +451,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411424, + "created": 1765342926, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyd23mFixorNyNeYYhnfNU", + "payment_method": "pm_1ScfXOKk8Ei30oQ0Etkfd16h", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -485,24 +488,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:24 GMT + recorded_at: Wed, 10 Dec 2025 05:02:37 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHyd23mFixorNyN0Cq861yx + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXOKk8Ei30oQ01UyLJ98y body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Gepz6g0LNBsl37","request_duration_ms":440}}' + - '{"last_request_metrics":{"request_id":"req_OQQN5yhePMp7f8","request_duration_ms":467}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -517,11 +520,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:24 GMT + - Wed, 10 Dec 2025 05:02:06 GMT Content-Type: - application/json Content-Length: - - '1418' + - '1427' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -540,13 +543,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_AzdrxQxvQlWFRH + - req_03PENwlrNZUmJg Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -561,7 +564,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyd23mFixorNyN0Cq861yx", + "id": "pi_3ScfXOKk8Ei30oQ01UyLJ98y", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -577,19 +580,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411424, + "created": 1765342926, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyd23mFixorNyNeYYhnfNU", + "payment_method": "pm_1ScfXOKk8Ei30oQ0Etkfd16h", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -614,10 +617,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:24 GMT + recorded_at: Wed, 10 Dec 2025 05:02:37 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHyd23mFixorNyN0Cq861yx/cancel + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXOKk8Ei30oQ01UyLJ98y/cancel body: encoding: US-ASCII string: '' @@ -627,7 +630,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -635,7 +638,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 Connection: - close Accept-Encoding: @@ -650,11 +653,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:25 GMT + - Wed, 10 Dec 2025 05:02:07 GMT Content-Type: - application/json Content-Length: - - '1582' + - '1610' Connection: - close Access-Control-Allow-Credentials: @@ -673,15 +676,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=fPQKMcwqLtRSZN_NPpAjJUbrgcd6_4SOJO4zqNBYW1OPy-s4mgS-Tdk7teVYvEXX88JGMltGpL27CvyN + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=cafZiEO-8PBaTVWZ_9sJy2lkiKKIf25BhmvNEkyAk8yLoFT3mpA_hOzZwfPk9NcszzgS2luWREx4sZEa Idempotency-Key: - - f96408f1-6440-4066-b29a-12334943f218 + - fe1429f8-f598-4bf6-ac87-5f01633cbee6 Original-Request: - - req_KMzmQqvy3P4Iu5 + - req_qEzclMhp12Nh0a Request-Id: - - req_KMzmQqvy3P4Iu5 + - req_qEzclMhp12Nh0a Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 Stripe-Should-Retry: - 'false' Stripe-Version: @@ -700,7 +703,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyd23mFixorNyN0Cq861yx", + "id": "pi_3ScfXOKk8Ei30oQ01UyLJ98y", "object": "payment_intent", "amount": 1000, "amount_capturable": 0, @@ -711,7 +714,7 @@ http_interactions: "application": "", "application_fee_amount": null, "automatic_payment_methods": null, - "canceled_at": 1760411424, + "canceled_at": 1765342927, "cancellation_reason": null, "capture_method": "manual", "charges": { @@ -719,13 +722,14 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/charges?payment_intent=pi_3SHyd23mFixorNyN0Cq861yx" + "url": "/v1/charges?payment_intent=pi_3ScfXOKk8Ei30oQ01UyLJ98y" }, "client_secret": "", "confirmation_method": "automatic", - "created": 1760411424, + "created": 1765342926, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, "invoice": null, @@ -735,7 +739,7 @@ http_interactions: "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyd23mFixorNyNeYYhnfNU", + "payment_method": "pm_1ScfXOKk8Ei30oQ0Etkfd16h", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -760,24 +764,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:10:25 GMT + recorded_at: Wed, 10 Dec 2025 05:02:38 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHycy3mFixorNyN + uri: https://api.stripe.com/v1/accounts/acct_1ScfXLKk8Ei30oQ0 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_AzdrxQxvQlWFRH","request_duration_ms":323}}' + - '{"last_request_metrics":{"request_id":"req_03PENwlrNZUmJg","request_duration_ms":326}}' Idempotency-Key: - - 7f73dc16-da47-4f95-84ac-d59605423d97 + - 8482b942-3556-4806-a67f-9650e7b0b8c9 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -792,7 +796,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:28 GMT + - Wed, 10 Dec 2025 05:02:10 GMT Content-Type: - application/json Content-Length: @@ -815,15 +819,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 7f73dc16-da47-4f95-84ac-d59605423d97 + - 8482b942-3556-4806-a67f-9650e7b0b8c9 Request-Id: - - req_optaXcyxBBnMWy + - req_kxs8Gsncw2vrid Stripe-Account: - - acct_1SHycy3mFixorNyN + - acct_1ScfXLKk8Ei30oQ0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -838,9 +842,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHycy3mFixorNyN", + "id": "acct_1ScfXLKk8Ei30oQ0", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:10:28 GMT + recorded_at: Wed, 10 Dec 2025 05:02:40 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml similarity index 79% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml index 25d8c5e786..5fc9e181ad 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_fails/destroys_the_record_and_notifies_Bugsnag.yml @@ -8,15 +8,15 @@ http_interactions: string: stripe_user_id=&client_id=bogus_client_id headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Xu77OvIyW1ul4d","request_duration_ms":3005}}' + - '{"last_request_metrics":{"request_id":"req_ooITcivJw8PuiD","request_duration_ms":2965}}' Idempotency-Key: - - cbebb224-cd96-4fb8-9d95-e001514c8d6f + - 0220fe40-be09-4d48-a4b4-cce7b55842ef Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,7 +33,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:56 GMT + - Wed, 10 Dec 2025 05:02:36 GMT Content-Type: - application/json; charset=utf-8 Content-Length: @@ -112,15 +112,15 @@ http_interactions: https://hcaptcha.com https://js.stripe.com https://www.google.com/recaptcha/api.js https://www.google.com/recaptcha/enterprise.js https://www.gstatic.com/recaptcha/ https://www.gstatic.com/recaptcha/api2/ https://www.recaptcha.net/recaptcha/ - https://www.recaptcha.net/recaptcha/enterprise.js ''nonce-mPabo5u4wBWbRmxb4KzT8Q=='' + https://www.recaptcha.net/recaptcha/enterprise.js ''nonce-XEemrRdibyO06v4YgZ65Pg=='' ''self'' ''sha256-47mKTaMaEn1L3m5DAz9muidMqw636xxw7EFAK/YnPdg='' ''unsafe-hashes'' - ''sha256-X282X6GM6HOVS4ZlarVs8J6sTL4pCBCyjJ1mGXPnx2c='' ''sha256-n7u/8WJkRg9Vfct98U/ani9/0jNm/jU9xmW1MkFeFCo='' - ''sha256-2vvxOZGNaNgKc6hsklalFxowLrGGY77RhgtSdOmreSQ='' ''sha256-hXJJi4uFrPw1d1m1UzzY5m3apJr3WxqB1rhD3lHBg4Y='' - ''sha256-oTMVQy4RX+9L7r9OM2a6KkTYodWJ271q9VHQ/Em7axc='' ''report-sample''; - style-src https://edge-dashboard.stripe.com https://*.hcaptcha.com https://b.stripecdn.com - https://dashboard.stripe.com https://fonts.googleapis.com https://hcaptcha.com - https://translate.googleapis.com ''unsafe-inline''; worker-src https://b.stripecdn.com - ''self''; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=tWRBr42P74JxDL2qWi4yIFL8feyq8vKJzJAmlr570ndNe2GcYWMfvlRhYmqSCFfHGxVHt5jQi94%3D' + ''sha256-tzCa5207cpDANSTUI0pUSPlhLtLsheSyUgChqdca2bE='' ''sha256-X282X6GM6HOVS4ZlarVs8J6sTL4pCBCyjJ1mGXPnx2c='' + ''sha256-n7u/8WJkRg9Vfct98U/ani9/0jNm/jU9xmW1MkFeFCo='' ''sha256-2vvxOZGNaNgKc6hsklalFxowLrGGY77RhgtSdOmreSQ='' + ''sha256-hXJJi4uFrPw1d1m1UzzY5m3apJr3WxqB1rhD3lHBg4Y='' ''sha256-oTMVQy4RX+9L7r9OM2a6KkTYodWJ271q9VHQ/Em7axc='' + ''report-sample''; style-src https://edge-dashboard.stripe.com https://*.hcaptcha.com + https://b.stripecdn.com https://dashboard.stripe.com https://fonts.googleapis.com + https://hcaptcha.com https://translate.googleapis.com ''unsafe-inline''; worker-src + https://b.stripecdn.com ''self''; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=ni6tcrZOz80xFhWVR5z5hlZXHzOBeakLClknc4kl-ch1gDFuTF5EIJVwktziXFL-q6EXCD8YZQU%3D' Cross-Origin-Opener-Policy: - same-origin-allow-popups; report-to="wsp_coop" Expires: @@ -130,28 +130,28 @@ http_interactions: Referrer-Policy: - strict-origin-when-cross-origin Report-To: - - '{"group":"wsp_coop","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coop-report?s=tWRBr42P74JxDL2qWi4yIFL8feyq8vKJzJAmlr570ndNe2GcYWMfvlRhYmqSCFfHGxVHt5jQi94="}],"include_subdomains":true},{"group":"wsp_coep","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coep-report?s=tWRBr42P74JxDL2qWi4yIFL8feyq8vKJzJAmlr570ndNe2GcYWMfvlRhYmqSCFfHGxVHt5jQi94="}],"include_subdomains":true}' + - '{"group":"wsp_coop","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coop-report?s=ni6tcrZOz80xFhWVR5z5hlZXHzOBeakLClknc4kl-ch1gDFuTF5EIJVwktziXFL-q6EXCD8YZQU="}],"include_subdomains":true},{"group":"wsp_coep","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coep-report?s=ni6tcrZOz80xFhWVR5z5hlZXHzOBeakLClknc4kl-ch1gDFuTF5EIJVwktziXFL-q6EXCD8YZQU="}],"include_subdomains":true}' Reporting-Endpoints: - - coop="https://q.stripe.com/coop-report", wsp_coop="https://q.stripe.com/coop-report?s=tWRBr42P74JxDL2qWi4yIFL8feyq8vKJzJAmlr570ndNe2GcYWMfvlRhYmqSCFfHGxVHt5jQi94=",wsp_coep="https://q.stripe.com/coep-report?s=tWRBr42P74JxDL2qWi4yIFL8feyq8vKJzJAmlr570ndNe2GcYWMfvlRhYmqSCFfHGxVHt5jQi94=" + - coop="https://q.stripe.com/coop-report", wsp_coop="https://q.stripe.com/coop-report?s=ni6tcrZOz80xFhWVR5z5hlZXHzOBeakLClknc4kl-ch1gDFuTF5EIJVwktziXFL-q6EXCD8YZQU=",wsp_coep="https://q.stripe.com/coep-report?s=ni6tcrZOz80xFhWVR5z5hlZXHzOBeakLClknc4kl-ch1gDFuTF5EIJVwktziXFL-q6EXCD8YZQU=" Request-Id: - - req_4zG9kjswbzzJPv + - req_IaMJfgMdoRO98D Set-Cookie: - __Host-session=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; secure; SameSite=None - __stripe_orig_props=%7B%22referrer%22%3A%22%22%2C%22landing%22%3A%22https%3A%2F%2Fconnect.stripe.com%2Foauth%2Fdeauthorize%22%7D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:10:56 GMT; secure; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:36 GMT; secure; HttpOnly; SameSite=Lax - - cid=a3e13578-1565-49c1-9f50-537b54dff624; domain=stripe.com; path=/; expires=Mon, - 12 Jan 2026 03:10:56 GMT; secure; SameSite=Lax - - machine_identifier=9Ix49MyzOtxS5ypUbz%2BMV%2BDAjTq7W6w8og2x2%2FzC0liiTVeXkw8ABVH3VN3S4Nh1Mxk%3D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:10:56 GMT; secure; + - cid=f120c5eb-c55e-448e-9620-11b84ae9dd61; domain=stripe.com; path=/; expires=Tue, + 10 Mar 2026 05:02:36 GMT; secure; SameSite=Lax + - machine_identifier=Yc3PVkK4ujXtTdQE5Ve0Nx0AdXmaXmZnPqJ12f1luZ39tm557BRmqNy3%2FpTvNV5BWXg%3D; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:36 GMT; secure; HttpOnly; SameSite=Lax - - private_machine_identifier=xRTSWiu1OlD5i8WQD%2BhpyF9cnLnlzjYOeIijmzhYMcILrf5fL233HIv9fHqD3bIbSTU%3D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:10:56 GMT; secure; + - private_machine_identifier=D6g%2Bp7t1n%2BfxyapMuegS0TXKmJ%2BZTTDkdGN2zSPcT80gxFt4dFZW4RU08Z2NEaqFlqg%3D; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:36 GMT; secure; HttpOnly; SameSite=None - site-auth=; domain=stripe.com; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; secure - - stripe.csrf=RcI9TcJbX-t1Vfe4TUiTtMubFnWlzAdMQ0qtmQXy18oZ26CAoi2uUqSWVZGl3M1WEWO0t-vQbR-_d955Voqs0jw-AYTZVJyvB-v_V8Vn5oC9PuVwZ0raSLkXMlotbBxgVcZPkDNquQ%3D%3D; + - stripe.csrf=iFOGfhXsBc39l0MCuEo_o5uM9oFM_8tDF78m7CgNo-RH6M5CHu8wUL3qSsxEjBUowr19LqigQZbkbBYKPis5ZDw-AYTZVJzwp7_5Lbbw4jjdlY13OFTHqCFCeZOFAXwt0RwtCBk08w%3D%3D; domain=stripe.com; path=/; secure; HttpOnly; SameSite=None Stripe-Kill-Route: - "[]" @@ -168,13 +168,13 @@ http_interactions: X-Stripe-Routing-Context-Priority-Tier: - api-testmode X-Stripe-Server-Rpc-Duration-Micros: - - '85928' + - '96384' X-Wc: - ABCDEFGHIJ Strict-Transport-Security: - max-age=63072000; includeSubDomains; preload Stripe-Action-Id: - - syd2DkFjLHWQ4iCJwWDT53X + - syd1DmdkgmrjB9r4vCGxuGG body: encoding: UTF-8 string: |- @@ -182,5 +182,5 @@ http_interactions: "error": "invalid_client", "error_description": "No such application: 'bogus_client_id'" } - recorded_at: Tue, 14 Oct 2025 03:10:56 GMT + recorded_at: Wed, 10 Dec 2025 05:03:07 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml similarity index 82% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml index 2e08a910fc..1cd851b834 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripeAccount/deauthorize_and_destroy/when_the_Stripe_API_disconnect_succeeds/destroys_the_record.yml @@ -8,13 +8,13 @@ http_interactions: string: type=standard&country=AU&email=jumping.jack%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 1a3bf73a-93d2-468f-831c-9bff68b6f606 + - 35019992-a3b0-4791-b50c-52e461897cd5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:10:59 GMT + - Wed, 10 Dec 2025 05:02:39 GMT Content-Type: - application/json Content-Length: - - '3443' + - '3525' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=Q_Dv0L754vZwVYQ8nO4YeLzP0jx_2rx5sMcaTQtIq2rzvqdjNAKo9G_U3kQXUzum1xy5E7YAd2yMwSIL + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=cafZiEO-8PBaTVWZ_9sJy2lkiKKIf25BhmvNEkyAk8yLoFT3mpA_hOzZwfPk9NcszzgS2luWREx4sZEa Idempotency-Key: - - 1a3bf73a-93d2-468f-831c-9bff68b6f606 + - 35019992-a3b0-4791-b50c-52e461897cd5 Original-Request: - - req_gnKKRrDGkmn4Kx + - req_c22kYAQWSrgjQS Request-Id: - - req_gnKKRrDGkmn4Kx + - req_c22kYAQWSrgjQS Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydZKgr153G3YH", + "id": "acct_1ScfXt46IADpSjqd", "object": "account", "business_profile": { "annual_revenue": null, @@ -88,6 +88,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -112,7 +113,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411458, + "created": 1765342958, "default_currency": "aud", "details_submitted": false, "email": "jumping.jack@example.com", @@ -121,7 +122,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHydZKgr153G3YH/external_accounts" + "url": "/v1/accounts/acct_1ScfXt46IADpSjqd/external_accounts" }, "future_requirements": { "alternatives": [], @@ -213,6 +214,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -222,24 +224,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:10:59 GMT + recorded_at: Wed, 10 Dec 2025 05:03:09 GMT - request: method: post uri: https://connect.stripe.com/oauth/deauthorize body: encoding: UTF-8 - string: stripe_user_id=acct_1SHydZKgr153G3YH&client_id= + string: stripe_user_id=acct_1ScfXt46IADpSjqd&client_id= headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_gnKKRrDGkmn4Kx","request_duration_ms":2669}}' + - '{"last_request_metrics":{"request_id":"req_c22kYAQWSrgjQS","request_duration_ms":2558}}' Idempotency-Key: - - b8fd943f-fa11-4508-8054-b2303bb6bca8 + - 07db5e80-22b1-48e6-9f74-8dde61349930 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -256,7 +258,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:00 GMT + - Wed, 10 Dec 2025 05:02:40 GMT Content-Type: - application/json Content-Length: @@ -335,15 +337,15 @@ http_interactions: https://hcaptcha.com https://js.stripe.com https://www.google.com/recaptcha/api.js https://www.google.com/recaptcha/enterprise.js https://www.gstatic.com/recaptcha/ https://www.gstatic.com/recaptcha/api2/ https://www.recaptcha.net/recaptcha/ - https://www.recaptcha.net/recaptcha/enterprise.js ''nonce-ED77xx6opWwTy+e7Hidvsg=='' + https://www.recaptcha.net/recaptcha/enterprise.js ''nonce-hyr0BSS6YyFtA9hZMhfQDA=='' ''self'' ''sha256-47mKTaMaEn1L3m5DAz9muidMqw636xxw7EFAK/YnPdg='' ''unsafe-hashes'' - ''sha256-X282X6GM6HOVS4ZlarVs8J6sTL4pCBCyjJ1mGXPnx2c='' ''sha256-n7u/8WJkRg9Vfct98U/ani9/0jNm/jU9xmW1MkFeFCo='' - ''sha256-2vvxOZGNaNgKc6hsklalFxowLrGGY77RhgtSdOmreSQ='' ''sha256-hXJJi4uFrPw1d1m1UzzY5m3apJr3WxqB1rhD3lHBg4Y='' - ''sha256-oTMVQy4RX+9L7r9OM2a6KkTYodWJ271q9VHQ/Em7axc='' ''report-sample''; - style-src https://edge-dashboard.stripe.com https://*.hcaptcha.com https://b.stripecdn.com - https://dashboard.stripe.com https://fonts.googleapis.com https://hcaptcha.com - https://translate.googleapis.com ''unsafe-inline''; worker-src https://b.stripecdn.com - ''self''; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=DUmr5XZKtzgS4Gw9OOh4oV_ut89-4MgZZd7eBOcYadXhLn0IXrohXiEMq9vVdPWrwHNsGaP9uf4%3D' + ''sha256-tzCa5207cpDANSTUI0pUSPlhLtLsheSyUgChqdca2bE='' ''sha256-X282X6GM6HOVS4ZlarVs8J6sTL4pCBCyjJ1mGXPnx2c='' + ''sha256-n7u/8WJkRg9Vfct98U/ani9/0jNm/jU9xmW1MkFeFCo='' ''sha256-2vvxOZGNaNgKc6hsklalFxowLrGGY77RhgtSdOmreSQ='' + ''sha256-hXJJi4uFrPw1d1m1UzzY5m3apJr3WxqB1rhD3lHBg4Y='' ''sha256-oTMVQy4RX+9L7r9OM2a6KkTYodWJ271q9VHQ/Em7axc='' + ''report-sample''; style-src https://edge-dashboard.stripe.com https://*.hcaptcha.com + https://b.stripecdn.com https://dashboard.stripe.com https://fonts.googleapis.com + https://hcaptcha.com https://translate.googleapis.com ''unsafe-inline''; worker-src + https://b.stripecdn.com ''self''; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=iGUB-rBXzP5JWRQZb_pOlDk4AZMBvTScUBV-RLVuuOdBZp1I2tIz8NBaWPzQM5URBaqccuS0ZCA%3D' Cross-Origin-Opener-Policy: - same-origin-allow-popups; report-to="wsp_coop" Expires: @@ -353,28 +355,28 @@ http_interactions: Referrer-Policy: - strict-origin-when-cross-origin Report-To: - - '{"group":"wsp_coop","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coop-report?s=DUmr5XZKtzgS4Gw9OOh4oV_ut89-4MgZZd7eBOcYadXhLn0IXrohXiEMq9vVdPWrwHNsGaP9uf4="}],"include_subdomains":true},{"group":"wsp_coep","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coep-report?s=DUmr5XZKtzgS4Gw9OOh4oV_ut89-4MgZZd7eBOcYadXhLn0IXrohXiEMq9vVdPWrwHNsGaP9uf4="}],"include_subdomains":true}' + - '{"group":"wsp_coop","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coop-report?s=iGUB-rBXzP5JWRQZb_pOlDk4AZMBvTScUBV-RLVuuOdBZp1I2tIz8NBaWPzQM5URBaqccuS0ZCA="}],"include_subdomains":true},{"group":"wsp_coep","max_age":8640,"endpoints":[{"url":"https://q.stripe.com/coep-report?s=iGUB-rBXzP5JWRQZb_pOlDk4AZMBvTScUBV-RLVuuOdBZp1I2tIz8NBaWPzQM5URBaqccuS0ZCA="}],"include_subdomains":true}' Reporting-Endpoints: - - coop="https://q.stripe.com/coop-report", wsp_coop="https://q.stripe.com/coop-report?s=DUmr5XZKtzgS4Gw9OOh4oV_ut89-4MgZZd7eBOcYadXhLn0IXrohXiEMq9vVdPWrwHNsGaP9uf4=",wsp_coep="https://q.stripe.com/coep-report?s=DUmr5XZKtzgS4Gw9OOh4oV_ut89-4MgZZd7eBOcYadXhLn0IXrohXiEMq9vVdPWrwHNsGaP9uf4=" + - coop="https://q.stripe.com/coop-report", wsp_coop="https://q.stripe.com/coop-report?s=iGUB-rBXzP5JWRQZb_pOlDk4AZMBvTScUBV-RLVuuOdBZp1I2tIz8NBaWPzQM5URBaqccuS0ZCA=",wsp_coep="https://q.stripe.com/coep-report?s=iGUB-rBXzP5JWRQZb_pOlDk4AZMBvTScUBV-RLVuuOdBZp1I2tIz8NBaWPzQM5URBaqccuS0ZCA=" Request-Id: - - req_dkQ5nqOc1P6cEG + - req_W5DghJ3w3soKSB Set-Cookie: - __Host-session=; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; secure; SameSite=None - __stripe_orig_props=%7B%22referrer%22%3A%22%22%2C%22landing%22%3A%22https%3A%2F%2Fconnect.stripe.com%2Foauth%2Fdeauthorize%22%7D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:11:00 GMT; secure; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:40 GMT; secure; HttpOnly; SameSite=Lax - - cid=bd534cfa-0cf6-4a5c-a796-8bf7da07a827; domain=stripe.com; path=/; expires=Mon, - 12 Jan 2026 03:11:00 GMT; secure; SameSite=Lax - - machine_identifier=agvliYrxzIbJkNAfI0XhQFo20dOyVNETzPBEpScfSYW88PnA6GtOEPanSsiz8GVCvFM%3D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:11:00 GMT; secure; + - cid=5116466f-d29f-480e-8249-041aaceebd9c; domain=stripe.com; path=/; expires=Tue, + 10 Mar 2026 05:02:40 GMT; secure; SameSite=Lax + - machine_identifier=aZXkK46kO51L5ws3cFfjgTA6oRwoCSCBm1zMifikAYO%2BKDfI%2BToNTW6%2B%2BJNSOac717k%3D; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:40 GMT; secure; HttpOnly; SameSite=Lax - - private_machine_identifier=G5LO7m5VEz6H2lvPCUuqYZrvor82BqGXYgx5Ij4iDNMaNr79f98RIZuDX6OaWraIs5g%3D; - domain=stripe.com; path=/; expires=Wed, 14 Oct 2026 03:11:00 GMT; secure; + - private_machine_identifier=2%2FpN0NBpefJKcMwGrJ7YSD9Nzh%2FUHUL2k4uv32s2ccdZLgKUr49KPPxd8MXCgrhfVYc%3D; + domain=stripe.com; path=/; expires=Thu, 10 Dec 2026 05:02:40 GMT; secure; HttpOnly; SameSite=None - site-auth=; domain=stripe.com; path=/; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; secure - - stripe.csrf=1rPGar68M25OFXH8m3HDEGs-ZC8qym9fKjtH6EfFvNu6Q2HY_Dq66kiQYfPWHICW1Em_hryMiElvUYtVuGhqLDw-AYTZVJzC-J3hrvOhgfMlb4YaE2kgjx-KZqyOMoVMizT9hQT35g%3D%3D; + - stripe.csrf=EGWJ5eroic7zi6Qf7il9yMfthxhMZRbNMK1uL-OT6VzaRd8kJLhJvvcAUYSPt62sGwuPRpUlfnCnodXvdVKhrDw-AYTZVJyCJx7vVRcec-85crB8BYRZ-oZ1BK_6ZpkCzlnvRKToCA%3D%3D; domain=stripe.com; path=/; secure; HttpOnly; SameSite=None Stripe-Kill-Route: - "[]" @@ -389,18 +391,18 @@ http_interactions: X-Stripe-Routing-Context-Priority-Tier: - api-testmode X-Stripe-Server-Rpc-Duration-Micros: - - '1105904' + - '1282371' X-Wc: - ABCDEFGHIJ Strict-Transport-Security: - max-age=63072000; includeSubDomains; preload Stripe-Action-Id: - - syd2DkFjLeJWt5BaOWiBvjf + - syd1Dmdkh7xwwi0UQRFGoRv body: encoding: UTF-8 string: |- { - "stripe_user_id": "acct_1SHydZKgr153G3YH" + "stripe_user_id": "acct_1ScfXt46IADpSjqd" } - recorded_at: Tue, 14 Oct 2025 03:11:00 GMT + recorded_at: Wed, 10 Dec 2025 05:03:11 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml index ced7a57d23..a21976a3ef 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_Stripe_payment_has_been_captured/returns_true.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_skWFrzuN6VNsVu","request_duration_ms":1295}}' + - '{"last_request_metrics":{"request_id":"req_lVktqUwe7eLSXm","request_duration_ms":1279}}' Idempotency-Key: - - 3591c081-01d0-40a4-a5b7-877664847ee3 + - 9603a24d-6d6d-4764-b8a7-1ac4fda62067 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:07 GMT + - Wed, 10 Dec 2025 05:02:47 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3591c081-01d0-40a4-a5b7-877664847ee3 + - 9603a24d-6d6d-4764-b8a7-1ac4fda62067 Original-Request: - - req_mExt66PfTJzZ5P + - req_TozZKC2itJ9ntx Request-Id: - - req_mExt66PfTJzZ5P + - req_TozZKC2itJ9ntx Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydjKuuB1fWySnoctTgdGT", + "id": "pm_1ScfY3KuuB1fWySnpFDUlEnD", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,30 +125,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411467, + "created": 1765342967, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:07 GMT + recorded_at: Wed, 10 Dec 2025 05:03:17 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=aud&payment_method=pm_1SHydjKuuB1fWySnoctTgdGT&payment_method_types[0]=card&capture_method=manual + string: amount=100¤cy=aud&payment_method=pm_1ScfY3KuuB1fWySnpFDUlEnD&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mExt66PfTJzZ5P","request_duration_ms":375}}' + - '{"last_request_metrics":{"request_id":"req_TozZKC2itJ9ntx","request_duration_ms":383}}' Idempotency-Key: - - f3dfd912-91b5-4e9d-8505-84de61df91f4 + - f951d293-8bc3-4fc7-90cf-98df17bde2b2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:07 GMT + - Wed, 10 Dec 2025 05:02:47 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f3dfd912-91b5-4e9d-8505-84de61df91f4 + - f951d293-8bc3-4fc7-90cf-98df17bde2b2 Original-Request: - - req_ZwY9MJ93J8WTUY + - req_Tn0Rz3ArmumNa2 Request-Id: - - req_ZwY9MJ93J8WTUY + - req_Tn0Rz3ArmumNa2 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydjKuuB1fWySn1NR7vP5r", + "id": "pi_3ScfY3KuuB1fWySn2724U6AC", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -229,19 +230,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411467, + "created": 1765342967, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydjKuuB1fWySnoctTgdGT", + "payment_method": "pm_1ScfY3KuuB1fWySnpFDUlEnD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -266,24 +267,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:07 GMT + recorded_at: Wed, 10 Dec 2025 05:03:18 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydjKuuB1fWySn1NR7vP5r/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfY3KuuB1fWySn2724U6AC/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ZwY9MJ93J8WTUY","request_duration_ms":346}}' + - '{"last_request_metrics":{"request_id":"req_Tn0Rz3ArmumNa2","request_duration_ms":505}}' Idempotency-Key: - - 59b58399-5ea2-4a70-a425-31d1e360c70b + - e5b82e77-e6bb-4076-929f-30e450f2e75c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -300,11 +301,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:08 GMT + - Wed, 10 Dec 2025 05:02:48 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -323,17 +324,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 59b58399-5ea2-4a70-a425-31d1e360c70b + - e5b82e77-e6bb-4076-929f-30e450f2e75c Original-Request: - - req_onsP3ycXEY7Jjs + - req_Kv8XBRRAP6KdXj Request-Id: - - req_onsP3ycXEY7Jjs + - req_Kv8XBRRAP6KdXj Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -348,7 +349,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydjKuuB1fWySn1NR7vP5r", + "id": "pi_3ScfY3KuuB1fWySn2724U6AC", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -364,19 +365,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411467, + "created": 1765342967, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydjKuuB1fWySn189L8Dgc", + "latest_charge": "ch_3ScfY3KuuB1fWySn21gx7zTs", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydjKuuB1fWySnoctTgdGT", + "payment_method": "pm_1ScfY3KuuB1fWySnpFDUlEnD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -401,24 +402,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:08 GMT + recorded_at: Wed, 10 Dec 2025 05:03:19 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydjKuuB1fWySn1NR7vP5r/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfY3KuuB1fWySn2724U6AC/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_onsP3ycXEY7Jjs","request_duration_ms":702}}' + - '{"last_request_metrics":{"request_id":"req_Kv8XBRRAP6KdXj","request_duration_ms":842}}' Idempotency-Key: - - 16f2b732-94d6-4f26-961a-760f08108727 + - ec5e3f56-df6a-43fd-93f8-e201cb01fbe1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -435,11 +436,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:09 GMT + - Wed, 10 Dec 2025 05:02:50 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -458,17 +459,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 16f2b732-94d6-4f26-961a-760f08108727 + - ec5e3f56-df6a-43fd-93f8-e201cb01fbe1 Original-Request: - - req_aUxWVthMmft3OL + - req_iP0hZrUEV384Cm Request-Id: - - req_aUxWVthMmft3OL + - req_iP0hZrUEV384Cm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -483,7 +484,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydjKuuB1fWySn1NR7vP5r", + "id": "pi_3ScfY3KuuB1fWySn2724U6AC", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -499,19 +500,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411467, + "created": 1765342967, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydjKuuB1fWySn189L8Dgc", + "latest_charge": "ch_3ScfY3KuuB1fWySn21gx7zTs", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydjKuuB1fWySnoctTgdGT", + "payment_method": "pm_1ScfY3KuuB1fWySnpFDUlEnD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -536,22 +537,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:09 GMT + recorded_at: Wed, 10 Dec 2025 05:03:20 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydjKuuB1fWySn1NR7vP5r + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfY3KuuB1fWySn2724U6AC body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aUxWVthMmft3OL","request_duration_ms":1202}}' + - '{"last_request_metrics":{"request_id":"req_iP0hZrUEV384Cm","request_duration_ms":1398}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -566,11 +567,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:10 GMT + - Wed, 10 Dec 2025 05:02:50 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -589,11 +590,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_VGdnL9HTac89Zz + - req_KFpKlknDqR3CHY Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -608,7 +609,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydjKuuB1fWySn1NR7vP5r", + "id": "pi_3ScfY3KuuB1fWySn2724U6AC", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -624,19 +625,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411467, + "created": 1765342967, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydjKuuB1fWySn189L8Dgc", + "latest_charge": "ch_3ScfY3KuuB1fWySn21gx7zTs", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydjKuuB1fWySnoctTgdGT", + "payment_method": "pm_1ScfY3KuuB1fWySnpFDUlEnD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -661,5 +662,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:10 GMT + recorded_at: Wed, 10 Dec 2025 05:03:21 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml index 855016a7b3..9eb0545775 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_captured_/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_false.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_R5Gt5w4puz1Pfx","request_duration_ms":360}}' + - '{"last_request_metrics":{"request_id":"req_02fHBzyDQkKGgC","request_duration_ms":364}}' Idempotency-Key: - - a92ba90d-31be-4e8e-ae70-d81632f1f308 + - b7db92a5-6065-4dc2-968d-104c0f0fe9c1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:04 GMT + - Wed, 10 Dec 2025 05:02:44 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a92ba90d-31be-4e8e-ae70-d81632f1f308 + - b7db92a5-6065-4dc2-968d-104c0f0fe9c1 Original-Request: - - req_3d4beJjZaGbSpy + - req_2L1TDpheVML2xJ Request-Id: - - req_3d4beJjZaGbSpy + - req_2L1TDpheVML2xJ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydgKuuB1fWySnRCoYZi2m", + "id": "pm_1ScfY0KuuB1fWySn20zqh7rt", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,30 +125,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411464, + "created": 1765342964, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:04 GMT + recorded_at: Wed, 10 Dec 2025 05:03:14 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=aud&payment_method=pm_1SHydgKuuB1fWySnRCoYZi2m&payment_method_types[0]=card&capture_method=manual + string: amount=100¤cy=aud&payment_method=pm_1ScfY0KuuB1fWySn20zqh7rt&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_3d4beJjZaGbSpy","request_duration_ms":377}}' + - '{"last_request_metrics":{"request_id":"req_2L1TDpheVML2xJ","request_duration_ms":394}}' Idempotency-Key: - - d6aa4e58-068e-4e1b-90e9-5ea2f2dca7bc + - 5a2ef72f-c5c0-4985-8729-57b55dc9677b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:04 GMT + - Wed, 10 Dec 2025 05:02:44 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d6aa4e58-068e-4e1b-90e9-5ea2f2dca7bc + - 5a2ef72f-c5c0-4985-8729-57b55dc9677b Original-Request: - - req_pO2TycxiTMxvs5 + - req_8qee90ZLoZfJm0 Request-Id: - - req_pO2TycxiTMxvs5 + - req_8qee90ZLoZfJm0 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydgKuuB1fWySn2MeDNQCW", + "id": "pi_3ScfY0KuuB1fWySn1RFNEgAk", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -229,19 +230,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411464, + "created": 1765342964, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydgKuuB1fWySnRCoYZi2m", + "payment_method": "pm_1ScfY0KuuB1fWySn20zqh7rt", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -266,24 +267,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:04 GMT + recorded_at: Wed, 10 Dec 2025 05:03:15 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydgKuuB1fWySn2MeDNQCW/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfY0KuuB1fWySn1RFNEgAk/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_pO2TycxiTMxvs5","request_duration_ms":347}}' + - '{"last_request_metrics":{"request_id":"req_8qee90ZLoZfJm0","request_duration_ms":390}}' Idempotency-Key: - - e0f7abea-7df2-44af-8253-d0a9c6a2616c + - d5c53ba6-f84a-47e3-8d2a-d0622d2097b0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -300,11 +301,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:05 GMT + - Wed, 10 Dec 2025 05:02:45 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -323,17 +324,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e0f7abea-7df2-44af-8253-d0a9c6a2616c + - d5c53ba6-f84a-47e3-8d2a-d0622d2097b0 Original-Request: - - req_lj8h3cv5vaw61X + - req_iUbKim0VE2C7NQ Request-Id: - - req_lj8h3cv5vaw61X + - req_iUbKim0VE2C7NQ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -348,7 +349,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydgKuuB1fWySn2MeDNQCW", + "id": "pi_3ScfY0KuuB1fWySn1RFNEgAk", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -364,19 +365,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411464, + "created": 1765342964, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydgKuuB1fWySn2k2nhNtS", + "latest_charge": "ch_3ScfY0KuuB1fWySn1Q8lRD1b", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydgKuuB1fWySnRCoYZi2m", + "payment_method": "pm_1ScfY0KuuB1fWySn20zqh7rt", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -401,24 +402,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:05 GMT + recorded_at: Wed, 10 Dec 2025 05:03:16 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydgKuuB1fWySn2MeDNQCW/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfY0KuuB1fWySn1RFNEgAk/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_lj8h3cv5vaw61X","request_duration_ms":774}}' + - '{"last_request_metrics":{"request_id":"req_iUbKim0VE2C7NQ","request_duration_ms":767}}' Idempotency-Key: - - 064ca2e4-b249-418a-bb34-aa701644b27a + - 202799c4-f2e0-4473-bd8f-b9b934fa505f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -435,11 +436,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:06 GMT + - Wed, 10 Dec 2025 05:02:46 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -458,17 +459,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 064ca2e4-b249-418a-bb34-aa701644b27a + - 202799c4-f2e0-4473-bd8f-b9b934fa505f Original-Request: - - req_skWFrzuN6VNsVu + - req_lVktqUwe7eLSXm Request-Id: - - req_skWFrzuN6VNsVu + - req_lVktqUwe7eLSXm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -483,7 +484,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydgKuuB1fWySn2MeDNQCW", + "id": "pi_3ScfY0KuuB1fWySn1RFNEgAk", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -499,19 +500,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411464, + "created": 1765342964, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydgKuuB1fWySn2k2nhNtS", + "latest_charge": "ch_3ScfY0KuuB1fWySn1Q8lRD1b", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydgKuuB1fWySnRCoYZi2m", + "payment_method": "pm_1ScfY0KuuB1fWySn20zqh7rt", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -536,5 +537,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:06 GMT + recorded_at: Wed, 10 Dec 2025 05:03:17 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml similarity index 82% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml index a96d25f6d7..51b162396a 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/and_the_last_action_on_the_Stripe_payment_failed/returns_failed_response.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_oFwP5EjktYjFpW","request_duration_ms":307}}' + - '{"last_request_metrics":{"request_id":"req_bBrfk2y4LTwOLk","request_duration_ms":300}}' Idempotency-Key: - - f1c25ae9-92f7-406f-9178-161e4767aa7d + - 3c76ecb9-6869-4c8c-8c18-b5cbdf42f09f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:03 GMT + - Wed, 10 Dec 2025 05:02:43 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f1c25ae9-92f7-406f-9178-161e4767aa7d + - 3c76ecb9-6869-4c8c-8c18-b5cbdf42f09f Original-Request: - - req_mtmpcTsOB3ZTQF + - req_TUHcaEoMwTgdTF Request-Id: - - req_mtmpcTsOB3ZTQF + - req_TUHcaEoMwTgdTF Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydfKuuB1fWySnQElLt2qe", + "id": "pm_1ScfXzKuuB1fWySnOOMfQkMV", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,30 +125,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411463, + "created": 1765342963, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:03 GMT + recorded_at: Wed, 10 Dec 2025 05:03:14 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=aud&payment_method=pm_1SHydfKuuB1fWySnQElLt2qe&payment_method_types[0]=card&capture_method=manual + string: amount=100¤cy=aud&payment_method=pm_1ScfXzKuuB1fWySnOOMfQkMV&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mtmpcTsOB3ZTQF","request_duration_ms":374}}' + - '{"last_request_metrics":{"request_id":"req_TUHcaEoMwTgdTF","request_duration_ms":431}}' Idempotency-Key: - - c93c354b-c063-4c4e-a72e-051c722c71f3 + - 13851889-34d2-453a-8b0e-ade627790db8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:04 GMT + - Wed, 10 Dec 2025 05:02:43 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c93c354b-c063-4c4e-a72e-051c722c71f3 + - 13851889-34d2-453a-8b0e-ade627790db8 Original-Request: - - req_R5Gt5w4puz1Pfx + - req_02fHBzyDQkKGgC Request-Id: - - req_R5Gt5w4puz1Pfx + - req_02fHBzyDQkKGgC Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydfKuuB1fWySn2KEUO8y7", + "id": "pi_3ScfXzKuuB1fWySn0PvUqjVv", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -229,19 +230,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411463, + "created": 1765342963, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydfKuuB1fWySnQElLt2qe", + "payment_method": "pm_1ScfXzKuuB1fWySnOOMfQkMV", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -266,5 +267,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:03 GMT + recorded_at: Wed, 10 Dec 2025 05:03:14 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml similarity index 82% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml index ac9d430201..fcbf6f29d5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_has_a_payment_intent/fetches_the_status_with_Stripe_PaymentIntentValidator.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_uNSc2hmL6sWcqf","request_duration_ms":350}}' + - '{"last_request_metrics":{"request_id":"req_kQZwIZoL14mB2U","request_duration_ms":358}}' Idempotency-Key: - - da51c988-0bb2-408b-9cec-944d78eee298 + - 71a792e7-8939-4600-ad2a-99aac222bcbf Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:02 GMT + - Wed, 10 Dec 2025 05:02:42 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - da51c988-0bb2-408b-9cec-944d78eee298 + - 71a792e7-8939-4600-ad2a-99aac222bcbf Original-Request: - - req_aSjSsiW71LVTlU + - req_uJ4LdN3yD5L40T Request-Id: - - req_aSjSsiW71LVTlU + - req_uJ4LdN3yD5L40T Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydeKuuB1fWySnNZ9XPJyw", + "id": "pm_1ScfXyKuuB1fWySnniIRNS8y", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,30 +125,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411462, + "created": 1765342962, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:02 GMT + recorded_at: Wed, 10 Dec 2025 05:03:12 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=aud&payment_method=pm_1SHydeKuuB1fWySnNZ9XPJyw&payment_method_types[0]=card&capture_method=manual + string: amount=100¤cy=aud&payment_method=pm_1ScfXyKuuB1fWySnniIRNS8y&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aSjSsiW71LVTlU","request_duration_ms":395}}' + - '{"last_request_metrics":{"request_id":"req_uJ4LdN3yD5L40T","request_duration_ms":453}}' Idempotency-Key: - - 4d04b2e7-ea61-4b16-9591-a5d849a0e902 + - c5d8df14-64b1-4458-bf7f-98683c9c4ec5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:02 GMT + - Wed, 10 Dec 2025 05:02:42 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4d04b2e7-ea61-4b16-9591-a5d849a0e902 + - c5d8df14-64b1-4458-bf7f-98683c9c4ec5 Original-Request: - - req_4fo9k6NnOtUexn + - req_kiQ7x8j6673UFw Request-Id: - - req_4fo9k6NnOtUexn + - req_kiQ7x8j6673UFw Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydeKuuB1fWySn00T0bAZV", + "id": "pi_3ScfXyKuuB1fWySn0z1wwwXZ", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -229,19 +230,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411462, + "created": 1765342962, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydeKuuB1fWySnNZ9XPJyw", + "payment_method": "pm_1ScfXyKuuB1fWySnniIRNS8y", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -266,22 +267,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:02 GMT + recorded_at: Wed, 10 Dec 2025 05:03:13 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydeKuuB1fWySn00T0bAZV + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfXyKuuB1fWySn0z1wwwXZ body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_4fo9k6NnOtUexn","request_duration_ms":379}}' + - '{"last_request_metrics":{"request_id":"req_kiQ7x8j6673UFw","request_duration_ms":398}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -296,11 +297,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:03 GMT + - Wed, 10 Dec 2025 05:02:43 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -319,11 +320,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_oFwP5EjktYjFpW + - req_bBrfk2y4LTwOLk Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -338,7 +339,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydeKuuB1fWySn00T0bAZV", + "id": "pi_3ScfXyKuuB1fWySn0z1wwwXZ", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -354,19 +355,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411462, + "created": 1765342962, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydeKuuB1fWySnNZ9XPJyw", + "payment_method": "pm_1ScfXyKuuB1fWySnniIRNS8y", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -391,5 +392,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:03 GMT + recorded_at: Wed, 10 Dec 2025 05:03:13 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml similarity index 82% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml index d9bed5f2d5..405a02c4be 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/StripePaymentStatus/_stripe_status/when_the_payment_is_not_a_Stripe_payment_or_does_not_have_a_payment_intent/returns_nil.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_dkQ5nqOc1P6cEG","request_duration_ms":1350}}' + - '{"last_request_metrics":{"request_id":"req_W5DghJ3w3soKSB","request_duration_ms":1527}}' Idempotency-Key: - - d0306686-c129-46f0-8720-f0ba4e553a9d + - 9f9a1c78-0e1e-4c30-9c43-953be7e8a51a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:01 GMT + - Wed, 10 Dec 2025 05:02:41 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d0306686-c129-46f0-8720-f0ba4e553a9d + - 9f9a1c78-0e1e-4c30-9c43-953be7e8a51a Original-Request: - - req_IuTMuATGe6q7vo + - req_pKgjGfzrnv5DQO Request-Id: - - req_IuTMuATGe6q7vo + - req_pKgjGfzrnv5DQO Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyddKuuB1fWySn1SMcylQS", + "id": "pm_1ScfXxKuuB1fWySnItyY0IgU", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,30 +125,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411461, + "created": 1765342961, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:01 GMT + recorded_at: Wed, 10 Dec 2025 05:03:11 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=aud&payment_method=pm_1SHyddKuuB1fWySn1SMcylQS&payment_method_types[0]=card&capture_method=manual + string: amount=100¤cy=aud&payment_method=pm_1ScfXxKuuB1fWySnItyY0IgU&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_IuTMuATGe6q7vo","request_duration_ms":374}}' + - '{"last_request_metrics":{"request_id":"req_pKgjGfzrnv5DQO","request_duration_ms":403}}' Idempotency-Key: - - 28933536-c931-4225-bf48-d88a26dbdade + - 4bc61748-eb6d-4526-878a-5585d7769fac Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:01 GMT + - Wed, 10 Dec 2025 05:02:41 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 28933536-c931-4225-bf48-d88a26dbdade + - 4bc61748-eb6d-4526-878a-5585d7769fac Original-Request: - - req_uNSc2hmL6sWcqf + - req_kQZwIZoL14mB2U Request-Id: - - req_uNSc2hmL6sWcqf + - req_kQZwIZoL14mB2U Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHyddKuuB1fWySn1yp10Om0", + "id": "pi_3ScfXxKuuB1fWySn1lnIaH24", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -229,19 +230,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411461, + "created": 1765342961, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHyddKuuB1fWySn1SMcylQS", + "payment_method": "pm_1ScfXxKuuB1fWySnItyY0IgU", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -266,5 +267,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:01 GMT + recorded_at: Wed, 10 Dec 2025 05:03:12 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml index 46a54b6000..2437c01401 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_card_without_a_customer_one_time_usage_card_/clones_the_payment_method_only.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=8&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_x4EL8Kj8W6WyTh","request_duration_ms":273}}' + - '{"last_request_metrics":{"request_id":"req_x3LhhVKjRWnE0c","request_duration_ms":279}}' Idempotency-Key: - - 4cca40b1-64a4-4fb0-8773-b7018183b01b + - 8c5d8bff-7805-4836-9237-e881b11709e8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:56 GMT + - Wed, 10 Dec 2025 04:58:42 GMT Content-Type: - application/json Content-Length: - - '1054' + - '1082' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4cca40b1-64a4-4fb0-8773-b7018183b01b + - 8c5d8bff-7805-4836-9237-e881b11709e8 Original-Request: - - req_MphfqmhnooW6Ii + - req_NznA71uvOSp3OE Request-Id: - - req_MphfqmhnooW6Ii + - req_NznA71uvOSp3OE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYiKuuB1fWySnzzqUtEtW", + "id": "pm_1ScfU6KuuB1fWySnRNDiFKNH", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,13 +125,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411156, + "created": 1765342722, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:05:56 GMT + recorded_at: Wed, 10 Dec 2025 04:59:13 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -140,15 +141,15 @@ http_interactions: string: type=standard&country=AU&email=apple.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MphfqmhnooW6Ii","request_duration_ms":371}}' + - '{"last_request_metrics":{"request_id":"req_NznA71uvOSp3OE","request_duration_ms":385}}' Idempotency-Key: - - 9bec4b97-30d4-42f2-bd1c-fc2b67de8492 + - 8d0bb527-6302-47a6-ace4-8ba115d0971b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:58 GMT + - Wed, 10 Dec 2025 04:58:45 GMT Content-Type: - application/json Content-Length: - - '3445' + - '3527' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9bec4b97-30d4-42f2-bd1c-fc2b67de8492 + - 8d0bb527-6302-47a6-ace4-8ba115d0971b Original-Request: - - req_Whsu1n7Wc3VA1x + - req_WReInVbT5HfGsE Request-Id: - - req_Whsu1n7Wc3VA1x + - req_WReInVbT5HfGsE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,7 +214,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYi3qamICWFXm", + "id": "acct_1ScfU644wybHTt1i", "object": "account", "business_profile": { "annual_revenue": null, @@ -222,6 +223,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -246,7 +248,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411157, + "created": 1765342724, "default_currency": "aud", "details_submitted": false, "email": "apple.producer@example.com", @@ -255,7 +257,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYi3qamICWFXm/external_accounts" + "url": "/v1/accounts/acct_1ScfU644wybHTt1i/external_accounts" }, "future_requirements": { "alternatives": [], @@ -347,6 +349,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -356,22 +359,22 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:05:58 GMT + recorded_at: Wed, 10 Dec 2025 04:59:15 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_methods/pm_1SHyYiKuuB1fWySnzzqUtEtW + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfU6KuuB1fWySnRNDiFKNH body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Whsu1n7Wc3VA1x","request_duration_ms":2482}}' + - '{"last_request_metrics":{"request_id":"req_WReInVbT5HfGsE","request_duration_ms":2335}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -386,11 +389,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:59 GMT + - Wed, 10 Dec 2025 04:58:45 GMT Content-Type: - application/json Content-Length: - - '1054' + - '1082' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -409,11 +412,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_r2xrbLsaUQq1Kc + - req_bCwG9SxjUiCPFH Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -428,7 +431,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYiKuuB1fWySnzzqUtEtW", + "id": "pm_1ScfU6KuuB1fWySnRNDiFKNH", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -472,13 +475,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411156, + "created": 1765342722, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:05:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:15 GMT - request: method: get uri: https://api.stripe.com/v1/customers?email=apple.customer@example.com&limit=100 @@ -487,15 +491,15 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_r2xrbLsaUQq1Kc","request_duration_ms":287}}' + - '{"last_request_metrics":{"request_id":"req_bCwG9SxjUiCPFH","request_duration_ms":292}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYi3qamICWFXm + - acct_1ScfU644wybHTt1i X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -510,7 +514,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:59 GMT + - Wed, 10 Dec 2025 04:58:45 GMT Content-Type: - application/json Content-Length: @@ -533,13 +537,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_FLayVxBv3ge6Mk + - req_1vd50ZJVml9o49 Stripe-Account: - - acct_1SHyYi3qamICWFXm + - acct_1ScfU644wybHTt1i Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -559,26 +563,26 @@ http_interactions: "has_more": false, "url": "/v1/customers" } - recorded_at: Tue, 14 Oct 2025 03:05:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:16 GMT - request: method: post uri: https://api.stripe.com/v1/payment_methods body: encoding: UTF-8 - string: payment_method=pm_1SHyYiKuuB1fWySnzzqUtEtW + string: payment_method=pm_1ScfU6KuuB1fWySnRNDiFKNH headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_FLayVxBv3ge6Mk","request_duration_ms":313}}' + - '{"last_request_metrics":{"request_id":"req_1vd50ZJVml9o49","request_duration_ms":288}}' Idempotency-Key: - - c7fcde77-baa7-49e8-9b94-93b5533500b8 + - 85ef268e-ca9d-4030-a52a-f3bc44d55aac Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYi3qamICWFXm + - acct_1ScfU644wybHTt1i X-Stripe-Client-User-Agent: - "" Content-Type: @@ -595,11 +599,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:05:59 GMT + - Wed, 10 Dec 2025 04:58:46 GMT Content-Type: - application/json Content-Length: - - '1054' + - '1082' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -618,19 +622,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c7fcde77-baa7-49e8-9b94-93b5533500b8 + - 85ef268e-ca9d-4030-a52a-f3bc44d55aac Original-Request: - - req_V7YHgxlWgOQZvV + - req_btvAOYY3aaZ8Ac Request-Id: - - req_V7YHgxlWgOQZvV + - req_btvAOYY3aaZ8Ac Stripe-Account: - - acct_1SHyYi3qamICWFXm + - acct_1ScfU644wybHTt1i Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -645,7 +649,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYl3qamICWFXmoSgTcbkS", + "id": "pm_1ScfU944wybHTt1iwkttcLki", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -689,30 +693,31 @@ http_interactions: }, "wallet": null }, - "created": 1760411159, + "created": 1765342725, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:05:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:16 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyYi3qamICWFXm + uri: https://api.stripe.com/v1/accounts/acct_1ScfU644wybHTt1i body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_V7YHgxlWgOQZvV","request_duration_ms":373}}' + - '{"last_request_metrics":{"request_id":"req_btvAOYY3aaZ8Ac","request_duration_ms":408}}' Idempotency-Key: - - 7166b601-b30e-43e3-8b85-011615ff582f + - 6c73e64a-225a-451c-93ff-0312d58990cf Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -727,7 +732,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:02 GMT + - Wed, 10 Dec 2025 04:58:48 GMT Content-Type: - application/json Content-Length: @@ -750,15 +755,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 7166b601-b30e-43e3-8b85-011615ff582f + - 6c73e64a-225a-451c-93ff-0312d58990cf Request-Id: - - req_wbr4B4TBkkJ74D + - req_C031zUQJI8ddZQ Stripe-Account: - - acct_1SHyYi3qamICWFXm + - acct_1ScfU644wybHTt1i Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -773,9 +778,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYi3qamICWFXm", + "id": "acct_1ScfU644wybHTt1i", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:06:02 GMT + recorded_at: Wed, 10 Dec 2025 04:59:19 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml index a9b272aef3..4c5e9be255 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardCloner/_find_or_clone/when_called_with_a_valid_customer_and_payment_method/clones_both_the_payment_method_and_the_customer.yml @@ -8,15 +8,13 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=8&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_wbr4B4TBkkJ74D","request_duration_ms":2944}}' Idempotency-Key: - - 85098a2c-8449-4b1e-99cd-0d933be9e2d1 + - 9fd9f044-73a0-4b82-8bd1-0a1d5882e135 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:03 GMT + - Wed, 10 Dec 2025 05:05:26 GMT Content-Type: - application/json Content-Length: - - '1054' + - '1082' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=moB9xx2PgXhts_HL9i_aOpaZoqY8g8i-a3VSl8c7IRg1W9gngWtXczVR6azmglaIPaHgVnKLGAo93ZmR Idempotency-Key: - - 85098a2c-8449-4b1e-99cd-0d933be9e2d1 + - 9fd9f044-73a0-4b82-8bd1-0a1d5882e135 Original-Request: - - req_auSIYwPzPUWGne + - req_Z7CwU3CYSUKcGq Request-Id: - - req_auSIYwPzPUWGne + - req_Z7CwU3CYSUKcGq Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYoKuuB1fWySnrC25pBpn", + "id": "pm_1ScfacKuuB1fWySnvtEgWQvp", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,13 +123,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411163, + "created": 1765343126, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:03 GMT + recorded_at: Wed, 10 Dec 2025 05:05:56 GMT - request: method: post uri: https://api.stripe.com/v1/customers @@ -140,15 +139,15 @@ http_interactions: string: name=Apple+Customer&email=apple.customer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_auSIYwPzPUWGne","request_duration_ms":377}}' + - '{"last_request_metrics":{"request_id":"req_Z7CwU3CYSUKcGq","request_duration_ms":500}}' Idempotency-Key: - - 92a0e39a-0697-4642-9238-70533afe7d1f + - c5bb5a89-5283-4239-aa82-b41ee0aa0816 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +164,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:03 GMT + - Wed, 10 Dec 2025 05:05:26 GMT Content-Type: - application/json Content-Length: - - '650' + - '678' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +187,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - 92a0e39a-0697-4642-9238-70533afe7d1f + - c5bb5a89-5283-4239-aa82-b41ee0aa0816 Original-Request: - - req_SIJ56Rx3a5Wquv + - req_TKD1y2MRiZj5Z9 Request-Id: - - req_SIJ56Rx3a5Wquv + - req_TKD1y2MRiZj5Z9 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,18 +212,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERRXMsr9v5VA1", + "id": "cus_TZpFGv0qHRohU4", "object": "customer", "address": null, "balance": 0, - "created": 1760411163, + "created": 1765343126, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "apple.customer@example.com", - "invoice_prefix": "FG0XCBL7", + "invoice_prefix": "AX8UXJBP", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -241,24 +241,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:06:03 GMT + recorded_at: Wed, 10 Dec 2025 05:05:57 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHyYoKuuB1fWySnrC25pBpn/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfacKuuB1fWySnvtEgWQvp/attach body: encoding: UTF-8 - string: customer=cus_TERRXMsr9v5VA1 + string: customer=cus_TZpFGv0qHRohU4 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_SIJ56Rx3a5Wquv","request_duration_ms":439}}' + - '{"last_request_metrics":{"request_id":"req_TKD1y2MRiZj5Z9","request_duration_ms":527}}' Idempotency-Key: - - 5990c627-81a3-4ba2-a7f2-49b52c127b07 + - c7c5df8e-bacc-4ddc-9e13-3c8637f207a5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -275,11 +275,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:04 GMT + - Wed, 10 Dec 2025 05:05:27 GMT Content-Type: - application/json Content-Length: - - '1065' + - '1093' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -298,17 +298,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - 5990c627-81a3-4ba2-a7f2-49b52c127b07 + - c7c5df8e-bacc-4ddc-9e13-3c8637f207a5 Original-Request: - - req_0BG98ksbwwjWCQ + - req_Xw2hc0JYoML3MF Request-Id: - - req_0BG98ksbwwjWCQ + - req_Xw2hc0JYoML3MF Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -323,7 +323,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYoKuuB1fWySnrC25pBpn", + "id": "pm_1ScfacKuuB1fWySnvtEgWQvp", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -367,13 +367,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411163, - "customer": "cus_TERRXMsr9v5VA1", + "created": 1765343126, + "customer": "cus_TZpFGv0qHRohU4", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:04 GMT + recorded_at: Wed, 10 Dec 2025 05:05:58 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -382,15 +383,15 @@ http_interactions: string: type=standard&country=AU&email=apple.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_0BG98ksbwwjWCQ","request_duration_ms":615}}' + - '{"last_request_metrics":{"request_id":"req_Xw2hc0JYoML3MF","request_duration_ms":603}}' Idempotency-Key: - - 2fea3465-33a6-42ce-b467-7cf255049353 + - 0c7bc366-8629-4cdd-b65d-a8eb3c9686bf Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -407,11 +408,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:06 GMT + - Wed, 10 Dec 2025 05:05:29 GMT Content-Type: - application/json Content-Length: - - '3445' + - '3527' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -430,17 +431,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - 2fea3465-33a6-42ce-b467-7cf255049353 + - 0c7bc366-8629-4cdd-b65d-a8eb3c9686bf Original-Request: - - req_arMYWdzOCwucwW + - req_eZqocGYFDVLGwi Request-Id: - - req_arMYWdzOCwucwW + - req_eZqocGYFDVLGwi Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -455,7 +456,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYq3udJRmDqb1", + "id": "acct_1Scfad43K0hLUxAT", "object": "account", "business_profile": { "annual_revenue": null, @@ -464,6 +465,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -488,7 +490,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411165, + "created": 1765343128, "default_currency": "aud", "details_submitted": false, "email": "apple.producer@example.com", @@ -497,7 +499,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHyYq3udJRmDqb1/external_accounts" + "url": "/v1/accounts/acct_1Scfad43K0hLUxAT/external_accounts" }, "future_requirements": { "alternatives": [], @@ -589,6 +591,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -598,22 +601,22 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:06:06 GMT + recorded_at: Wed, 10 Dec 2025 05:06:00 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_methods/pm_1SHyYoKuuB1fWySnrC25pBpn + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfacKuuB1fWySnvtEgWQvp body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_arMYWdzOCwucwW","request_duration_ms":2080}}' + - '{"last_request_metrics":{"request_id":"req_eZqocGYFDVLGwi","request_duration_ms":2375}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -628,11 +631,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:06 GMT + - Wed, 10 Dec 2025 05:05:30 GMT Content-Type: - application/json Content-Length: - - '1065' + - '1093' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -651,11 +654,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Request-Id: - - req_Q2xVWDnGCVzx9a + - req_PQoMg0QyQ7dBng Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -670,7 +673,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYoKuuB1fWySnrC25pBpn", + "id": "pm_1ScfacKuuB1fWySnvtEgWQvp", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -714,13 +717,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411163, - "customer": "cus_TERRXMsr9v5VA1", + "created": 1765343126, + "customer": "cus_TZpFGv0qHRohU4", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:06 GMT + recorded_at: Wed, 10 Dec 2025 05:06:00 GMT - request: method: get uri: https://api.stripe.com/v1/customers?email=apple.customer@example.com&limit=100 @@ -729,15 +733,15 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Q2xVWDnGCVzx9a","request_duration_ms":288}}' + - '{"last_request_metrics":{"request_id":"req_PQoMg0QyQ7dBng","request_duration_ms":306}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -752,7 +756,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:06 GMT + - Wed, 10 Dec 2025 05:05:30 GMT Content-Type: - application/json Content-Length: @@ -775,13 +779,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Request-Id: - - req_0IsW7RjKWvduj5 + - req_Nl079AG3cjg6rT Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -801,26 +805,26 @@ http_interactions: "has_more": false, "url": "/v1/customers" } - recorded_at: Tue, 14 Oct 2025 03:06:06 GMT + recorded_at: Wed, 10 Dec 2025 05:06:01 GMT - request: method: post uri: https://api.stripe.com/v1/payment_methods body: encoding: UTF-8 - string: customer=cus_TERRXMsr9v5VA1&payment_method=pm_1SHyYoKuuB1fWySnrC25pBpn + string: customer=cus_TZpFGv0qHRohU4&payment_method=pm_1ScfacKuuB1fWySnvtEgWQvp headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_0IsW7RjKWvduj5","request_duration_ms":290}}' + - '{"last_request_metrics":{"request_id":"req_Nl079AG3cjg6rT","request_duration_ms":299}}' Idempotency-Key: - - 9d278612-9620-403f-9244-f3af3f57141d + - 81b4e0c2-3e25-43b5-8f4d-435e5eb30731 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT X-Stripe-Client-User-Agent: - "" Content-Type: @@ -837,11 +841,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:07 GMT + - Wed, 10 Dec 2025 05:05:30 GMT Content-Type: - application/json Content-Length: - - '1049' + - '1077' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -860,19 +864,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - 9d278612-9620-403f-9244-f3af3f57141d + - 81b4e0c2-3e25-43b5-8f4d-435e5eb30731 Original-Request: - - req_F5wjicVPWqgxUk + - req_biNzDSilfni226 Request-Id: - - req_F5wjicVPWqgxUk + - req_biNzDSilfni226 Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -887,7 +891,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYt3udJRmDqb1iRftEW6b", + "id": "pm_1Scfag43K0hLUxATGo0J3KcZ", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -931,13 +935,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411167, + "created": 1765343130, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:07 GMT + recorded_at: Wed, 10 Dec 2025 05:06:01 GMT - request: method: post uri: https://api.stripe.com/v1/customers @@ -946,17 +951,17 @@ http_interactions: string: email=apple.customer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_F5wjicVPWqgxUk","request_duration_ms":372}}' + - '{"last_request_metrics":{"request_id":"req_biNzDSilfni226","request_duration_ms":439}}' Idempotency-Key: - - '02873ce3-19ed-42ba-9f76-68a276fa629f' + - 211ae51f-ebbc-46ef-937f-4bd0cf027961 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT X-Stripe-Client-User-Agent: - "" Content-Type: @@ -973,11 +978,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:07 GMT + - Wed, 10 Dec 2025 05:05:31 GMT Content-Type: - application/json Content-Length: - - '638' + - '666' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -996,19 +1001,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - '02873ce3-19ed-42ba-9f76-68a276fa629f' + - 211ae51f-ebbc-46ef-937f-4bd0cf027961 Original-Request: - - req_LUv5JyG8UWrnXO + - req_iJPcoaVBW8QJ7U Request-Id: - - req_LUv5JyG8UWrnXO + - req_iJPcoaVBW8QJ7U Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1023,18 +1028,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERRjpkmETtdkp", + "id": "cus_TZpFt3UU9y4KJ9", "object": "customer", "address": null, "balance": 0, - "created": 1760411167, + "created": 1765343131, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "apple.customer@example.com", - "invoice_prefix": "KCPE2SH1", + "invoice_prefix": "7BSTL6G9", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -1051,26 +1057,26 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:06:07 GMT + recorded_at: Wed, 10 Dec 2025 05:06:02 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHyYt3udJRmDqb1iRftEW6b/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1Scfag43K0hLUxATGo0J3KcZ/attach body: encoding: UTF-8 - string: customer=cus_TERRjpkmETtdkp + string: customer=cus_TZpFt3UU9y4KJ9 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_LUv5JyG8UWrnXO","request_duration_ms":408}}' + - '{"last_request_metrics":{"request_id":"req_iJPcoaVBW8QJ7U","request_duration_ms":436}}' Idempotency-Key: - - accf6303-39e3-4760-ad71-6d512eac2256 + - 0ef65704-9295-46f7-99f6-e39f5ac246b5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT X-Stripe-Client-User-Agent: - "" Content-Type: @@ -1087,11 +1093,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:08 GMT + - Wed, 10 Dec 2025 05:05:31 GMT Content-Type: - application/json Content-Length: - - '1065' + - '1093' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -1110,19 +1116,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - accf6303-39e3-4760-ad71-6d512eac2256 + - 0ef65704-9295-46f7-99f6-e39f5ac246b5 Original-Request: - - req_7rhBTyuCzCgZzg + - req_ks6cVoH1imrVSh Request-Id: - - req_7rhBTyuCzCgZzg + - req_ks6cVoH1imrVSh Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1137,7 +1143,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYt3udJRmDqb1iRftEW6b", + "id": "pm_1Scfag43K0hLUxATGo0J3KcZ", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -1181,32 +1187,33 @@ http_interactions: }, "wallet": null }, - "created": 1760411167, - "customer": "cus_TERRjpkmETtdkp", + "created": 1765343130, + "customer": "cus_TZpFt3UU9y4KJ9", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:08 GMT + recorded_at: Wed, 10 Dec 2025 05:06:02 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHyYt3udJRmDqb1iRftEW6b + uri: https://api.stripe.com/v1/payment_methods/pm_1Scfag43K0hLUxATGo0J3KcZ body: encoding: UTF-8 string: metadata[ofn-clone]=true headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_7rhBTyuCzCgZzg","request_duration_ms":383}}' + - '{"last_request_metrics":{"request_id":"req_ks6cVoH1imrVSh","request_duration_ms":390}}' Idempotency-Key: - - a215fac4-518b-4299-96f7-5dd72f4e238d + - ab180706-62c2-4bdd-b87a-e5546fba8edd Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT X-Stripe-Client-User-Agent: - "" Content-Type: @@ -1223,11 +1230,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:08 GMT + - Wed, 10 Dec 2025 05:05:32 GMT Content-Type: - application/json Content-Length: - - '1092' + - '1120' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -1246,19 +1253,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - a215fac4-518b-4299-96f7-5dd72f4e238d + - ab180706-62c2-4bdd-b87a-e5546fba8edd Original-Request: - - req_zzdEef3OqXSw4H + - req_9yp8JxVIVk77y3 Request-Id: - - req_zzdEef3OqXSw4H + - req_9yp8JxVIVk77y3 Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1273,7 +1280,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHyYt3udJRmDqb1iRftEW6b", + "id": "pm_1Scfag43K0hLUxATGo0J3KcZ", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -1317,32 +1324,33 @@ http_interactions: }, "wallet": null }, - "created": 1760411167, - "customer": "cus_TERRjpkmETtdkp", + "created": 1765343130, + "customer": "cus_TZpFt3UU9y4KJ9", + "customer_account": null, "livemode": false, "metadata": { "ofn-clone": "true" }, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:06:08 GMT + recorded_at: Wed, 10 Dec 2025 05:06:02 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHyYq3udJRmDqb1 + uri: https://api.stripe.com/v1/accounts/acct_1Scfad43K0hLUxAT body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_zzdEef3OqXSw4H","request_duration_ms":415}}' + - '{"last_request_metrics":{"request_id":"req_9yp8JxVIVk77y3","request_duration_ms":432}}' Idempotency-Key: - - 65220c41-e25e-4b6a-9e46-c55ba7f31e94 + - ee2f7312-65cd-433f-8a16-7589aaccdfd2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -1357,7 +1365,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:06:11 GMT + - Wed, 10 Dec 2025 05:05:35 GMT Content-Type: - application/json Content-Length: @@ -1380,15 +1388,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=AhPRuPruhbL6j1zm7HfE8eBayqlqQ7OFvgbuwa79BHVAhrQtpVyhDNiXCNs_ifCCE2UHDBjMUCZ4kqXt + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=d3KvnUfhMyyfqprIRNueyO0t_r60xwldO8HYfIWd9yQ44pLNa9U04HS18d2W8L9VbiGbkbujMmQCBeHn Idempotency-Key: - - 65220c41-e25e-4b6a-9e46-c55ba7f31e94 + - ee2f7312-65cd-433f-8a16-7589aaccdfd2 Request-Id: - - req_K5z4axV62uj291 + - req_kknO7PC6RS3ze7 Stripe-Account: - - acct_1SHyYq3udJRmDqb1 + - acct_1Scfad43K0hLUxAT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1403,9 +1411,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHyYq3udJRmDqb1", + "id": "acct_1Scfad43K0hLUxAT", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:06:11 GMT + recorded_at: Wed, 10 Dec 2025 05:06:05 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml similarity index 86% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml index ff39e37eb5..faf3bea286 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_does_not_exist/raises_an_error.yml @@ -8,13 +8,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1RsZjka6QFaNFz","request_duration_ms":2250}}' + - '{"last_request_metrics":{"request_id":"req_6l3vaqHE1iKLRf","request_duration_ms":2377}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -29,7 +29,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:28:04 GMT + - Wed, 10 Dec 2025 04:59:10 GMT Content-Type: - application/json Content-Length: @@ -52,11 +52,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_yB2LSIKpr5up0X + - req_rrvgkkv6E9qODc Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -76,11 +76,11 @@ http_interactions: "doc_url": "https://stripe.com/docs/error-codes/resource-missing", "message": "No such customer: 'non_existing_customer_id'", "param": "id", - "request_log_url": "https://dashboard.stripe.com/test/logs/req_yB2LSIKpr5up0X?t=1762450084", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_rrvgkkv6E9qODc?t=1765342749", "type": "invalid_request_error" } } - recorded_at: Thu, 06 Nov 2025 17:28:04 GMT + recorded_at: Wed, 10 Dec 2025 04:59:40 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -89,13 +89,13 @@ http_interactions: string: type=standard&country=AU&email=apple.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - ba438468-262e-48b8-8df4-883e47bc9964 + - 19091a3e-951f-4c7b-a438-5981f345e8d0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -112,7 +112,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:28:06 GMT + - Wed, 10 Dec 2025 04:59:12 GMT Content-Type: - application/json Content-Length: @@ -135,17 +135,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ba438468-262e-48b8-8df4-883e47bc9964 + - 19091a3e-951f-4c7b-a438-5981f345e8d0 Original-Request: - - req_PsU9iKDhSY2G0b + - req_SbUJHS4N8E7vIY Request-Id: - - req_PsU9iKDhSY2G0b + - req_SbUJHS4N8E7vIY Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -160,7 +160,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyeEJSKGySE54", + "id": "acct_1ScfUYKjWhzvPJBB", "object": "account", "business_profile": { "annual_revenue": null, @@ -194,7 +194,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1762450085, + "created": 1765342751, "default_currency": "aud", "details_submitted": false, "email": "apple.producer@example.com", @@ -203,7 +203,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SQWyeEJSKGySE54/external_accounts" + "url": "/v1/accounts/acct_1ScfUYKjWhzvPJBB/external_accounts" }, "future_requirements": { "alternatives": [], @@ -305,24 +305,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Thu, 06 Nov 2025 17:28:06 GMT + recorded_at: Wed, 10 Dec 2025 04:59:42 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SQWyeEJSKGySE54 + uri: https://api.stripe.com/v1/accounts/acct_1ScfUYKjWhzvPJBB body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_PsU9iKDhSY2G0b","request_duration_ms":2253}}' + - '{"last_request_metrics":{"request_id":"req_SbUJHS4N8E7vIY","request_duration_ms":2270}}' Idempotency-Key: - - 365b5b53-ccab-41ae-8fb3-34e4af4e2abc + - de5a2f49-d3ee-4711-9b72-34e1b533364d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -337,7 +337,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:28:08 GMT + - Wed, 10 Dec 2025 04:59:15 GMT Content-Type: - application/json Content-Length: @@ -360,15 +360,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 365b5b53-ccab-41ae-8fb3-34e4af4e2abc + - de5a2f49-d3ee-4711-9b72-34e1b533364d Request-Id: - - req_d4CECr0bxi2axe + - req_dGVftadBzts2Su Stripe-Account: - - acct_1SQWyeEJSKGySE54 + - acct_1ScfUYKjWhzvPJBB Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -383,9 +383,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyeEJSKGySE54", + "id": "acct_1ScfUYKjWhzvPJBB", "object": "account", "deleted": true } - recorded_at: Thu, 06 Nov 2025 17:28:08 GMT + recorded_at: Wed, 10 Dec 2025 04:59:46 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml index c41cae5f08..f8a45479d5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_deleted/deletes_the_credit_card_clone.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_x79fNj1mjyapXq","request_duration_ms":2249}}' + - '{"last_request_metrics":{"request_id":"req_aNWvKRlNsNGO8U","request_duration_ms":2539}}' Idempotency-Key: - - 0cc18233-4714-40a1-960f-61a7775a0497 + - 86a40e86-5cd7-4d49-a71b-b84ade71140d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:59 GMT + - Wed, 10 Dec 2025 04:59:04 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 0cc18233-4714-40a1-960f-61a7775a0497 + - 86a40e86-5cd7-4d49-a71b-b84ade71140d Original-Request: - - req_MXzmuPAJwohC3W + - req_gmJITuqhR15AwE Request-Id: - - req_MXzmuPAJwohC3W + - req_gmJITuqhR15AwE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TNHXBO9AUnMDSh", + "id": "cus_TZp8IzN7wBRAOc", "object": "customer", "address": null, "balance": 0, - "created": 1762450078, + "created": 1765342744, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "6X4KQTLX", + "invoice_prefix": "VGDL2CCK", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Thu, 06 Nov 2025 17:27:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:35 GMT - request: method: post uri: https://api.stripe.com/v1/payment_methods/pm_card_visa/attach body: encoding: UTF-8 - string: customer=cus_TNHXBO9AUnMDSh + string: customer=cus_TZp8IzN7wBRAOc headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MXzmuPAJwohC3W","request_duration_ms":344}}' + - '{"last_request_metrics":{"request_id":"req_gmJITuqhR15AwE","request_duration_ms":809}}' Idempotency-Key: - - ea114c2d-0c87-4667-b3c1-2fd83791ce21 + - ceab64fc-beb1-4554-8579-4344778a17ed Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:59 GMT + - Wed, 10 Dec 2025 04:59:05 GMT Content-Type: - application/json Content-Length: - - '1066' + - '1094' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ea114c2d-0c87-4667-b3c1-2fd83791ce21 + - ceab64fc-beb1-4554-8579-4344778a17ed Original-Request: - - req_0igMtM7K5xj1yU + - req_kIBgGuKZihV5DA Request-Id: - - req_0igMtM7K5xj1yU + - req_kIBgGuKZihV5DA Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SQWyZE2SHQy4eF793fMtmJT", + "id": "pm_1ScfUSKuuB1fWySngpD3qTKL", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -217,9 +218,9 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, - "fingerprint": "fYruUeN4kzOmlQx3", + "fingerprint": "6E6tgVjx6U65iHFV", "funding": "credit", "generated_from": null, "last4": "4242", @@ -235,13 +236,14 @@ http_interactions: }, "wallet": null }, - "created": 1762450079, - "customer": "cus_TNHXBO9AUnMDSh", + "created": 1765342744, + "customer": "cus_TZp8IzN7wBRAOc", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Thu, 06 Nov 2025 17:27:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:35 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -250,15 +252,15 @@ http_interactions: string: type=standard&country=AU&email=apple.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_0igMtM7K5xj1yU","request_duration_ms":612}}' + - '{"last_request_metrics":{"request_id":"req_kIBgGuKZihV5DA","request_duration_ms":664}}' Idempotency-Key: - - f25ef097-51e3-461a-ad13-229f157931d9 + - bcad121a-1452-4434-a3f5-cb21ecc1cd93 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -275,7 +277,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:28:01 GMT + - Wed, 10 Dec 2025 04:59:07 GMT Content-Type: - application/json Content-Length: @@ -298,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f25ef097-51e3-461a-ad13-229f157931d9 + - bcad121a-1452-4434-a3f5-cb21ecc1cd93 Original-Request: - - req_8058VIwZxRAszh + - req_SiJ9EGfdgLXAZS Request-Id: - - req_8058VIwZxRAszh + - req_SiJ9EGfdgLXAZS Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -323,7 +325,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyZCV4ih4cMbF", + "id": "acct_1ScfUTKMj4RncAf2", "object": "account", "business_profile": { "annual_revenue": null, @@ -357,7 +359,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1762450080, + "created": 1765342746, "default_currency": "aud", "details_submitted": false, "email": "apple.producer@example.com", @@ -366,7 +368,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SQWyZCV4ih4cMbF/external_accounts" + "url": "/v1/accounts/acct_1ScfUTKMj4RncAf2/external_accounts" }, "future_requirements": { "alternatives": [], @@ -468,24 +470,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Thu, 06 Nov 2025 17:28:01 GMT + recorded_at: Wed, 10 Dec 2025 04:59:37 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SQWyZCV4ih4cMbF + uri: https://api.stripe.com/v1/accounts/acct_1ScfUTKMj4RncAf2 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_8058VIwZxRAszh","request_duration_ms":2025}}' + - '{"last_request_metrics":{"request_id":"req_SiJ9EGfdgLXAZS","request_duration_ms":2224}}' Idempotency-Key: - - 5995d0d9-923a-4d0f-bf59-2343ac065654 + - 67a20bcf-b409-49ff-9154-6a07c5f0f35b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -500,7 +502,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:28:03 GMT + - Wed, 10 Dec 2025 04:59:09 GMT Content-Type: - application/json Content-Length: @@ -523,15 +525,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5995d0d9-923a-4d0f-bf59-2343ac065654 + - 67a20bcf-b409-49ff-9154-6a07c5f0f35b Request-Id: - - req_1RsZjka6QFaNFz + - req_6l3vaqHE1iKLRf Stripe-Account: - - acct_1SQWyZCV4ih4cMbF + - acct_1ScfUTKMj4RncAf2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -546,9 +548,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyZCV4ih4cMbF", + "id": "acct_1ScfUTKMj4RncAf2", "object": "account", "deleted": true } - recorded_at: Thu, 06 Nov 2025 17:28:04 GMT + recorded_at: Wed, 10 Dec 2025 04:59:40 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml similarity index 82% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml index 8cb04880bc..2188f8c0d2 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_CreditCardRemover/_remove/Stripe_customer_exists/and_is_not_deleted/deletes_the_credit_card_clone_and_the_customer.yml @@ -8,13 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_EBJ8XUSOu6IUY3","request_duration_ms":2388}}' Idempotency-Key: - - c51e52f5-fb69-45ad-88ca-cc6bfa4e5d54 + - a55ac7ad-bc69-4058-9875-4d0b9918e611 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:52 GMT + - Wed, 10 Dec 2025 04:58:57 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=2i6YrnQ4S32G_SrAn7bIM0UzyCO27KTnggJmEUuRVk0lPHv0Bu-CqUF6hmO2MylCqps6Ulmt2SjCFYDl + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c51e52f5-fb69-45ad-88ca-cc6bfa4e5d54 + - a55ac7ad-bc69-4058-9875-4d0b9918e611 Original-Request: - - req_ztT2pzL28yDGIU + - req_yaMsTkB3LkPeWC Request-Id: - - req_ztT2pzL28yDGIU + - req_yaMsTkB3LkPeWC Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TNHXSMHO6szSsv", + "id": "cus_TZp8IUQUgdee8c", "object": "customer", "address": null, "balance": 0, - "created": 1762450072, + "created": 1765342737, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "AS3STE4P", + "invoice_prefix": "BCNHUVGP", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Thu, 06 Nov 2025 17:27:52 GMT + recorded_at: Wed, 10 Dec 2025 04:59:28 GMT - request: method: post uri: https://api.stripe.com/v1/payment_methods/pm_card_visa/attach body: encoding: UTF-8 - string: customer=cus_TNHXSMHO6szSsv + string: customer=cus_TZp8IUQUgdee8c headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ztT2pzL28yDGIU","request_duration_ms":589}}' + - '{"last_request_metrics":{"request_id":"req_yaMsTkB3LkPeWC","request_duration_ms":435}}' Idempotency-Key: - - dfe93423-26e8-44e7-b764-3c816cc11126 + - d8f94282-f2e5-4e13-a2fe-fac4ff99ba24 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:53 GMT + - Wed, 10 Dec 2025 04:58:58 GMT Content-Type: - application/json Content-Length: - - '1066' + - '1094' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - dfe93423-26e8-44e7-b764-3c816cc11126 + - d8f94282-f2e5-4e13-a2fe-fac4ff99ba24 Original-Request: - - req_zjfqqEJP08mDXX + - req_y9vyXRgBh3Sz8M Request-Id: - - req_zjfqqEJP08mDXX + - req_y9vyXRgBh3Sz8M Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SQWySE2SHQy4eF76oYTyPyk", + "id": "pm_1ScfULKuuB1fWySnP6f7JLUq", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -215,9 +218,9 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, - "fingerprint": "fYruUeN4kzOmlQx3", + "fingerprint": "6E6tgVjx6U65iHFV", "funding": "credit", "generated_from": null, "last4": "4242", @@ -233,28 +236,29 @@ http_interactions: }, "wallet": null }, - "created": 1762450072, - "customer": "cus_TNHXSMHO6szSsv", + "created": 1765342737, + "customer": "cus_TZp8IUQUgdee8c", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Thu, 06 Nov 2025 17:27:53 GMT + recorded_at: Wed, 10 Dec 2025 04:59:28 GMT - request: method: get - uri: https://api.stripe.com/v1/customers/cus_TNHXSMHO6szSsv + uri: https://api.stripe.com/v1/customers/cus_TZp8IUQUgdee8c body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_zjfqqEJP08mDXX","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_y9vyXRgBh3Sz8M","request_duration_ms":714}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -269,11 +273,11 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:53 GMT + - Wed, 10 Dec 2025 04:58:58 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -292,11 +296,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_Y8Mbb6b97GR0mh + - req_rg8JW2DFYu65SI Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -311,18 +315,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TNHXSMHO6szSsv", + "id": "cus_TZp8IUQUgdee8c", "object": "customer", "address": null, "balance": 0, - "created": 1762450072, + "created": 1765342737, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "AS3STE4P", + "invoice_prefix": "BCNHUVGP", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -339,24 +344,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Thu, 06 Nov 2025 17:27:53 GMT + recorded_at: Wed, 10 Dec 2025 04:59:29 GMT - request: method: delete - uri: https://api.stripe.com/v1/customers/cus_TNHXSMHO6szSsv + uri: https://api.stripe.com/v1/customers/cus_TZp8IUQUgdee8c body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Y8Mbb6b97GR0mh","request_duration_ms":235}}' + - '{"last_request_metrics":{"request_id":"req_rg8JW2DFYu65SI","request_duration_ms":277}}' Idempotency-Key: - - b8c01c9e-008d-434d-bb1c-0de71aae92b3 + - de90d7a0-9148-44d6-ab7f-b3fedb97703b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -371,7 +376,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:53 GMT + - Wed, 10 Dec 2025 04:58:58 GMT Content-Type: - application/json Content-Length: @@ -394,13 +399,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b8c01c9e-008d-434d-bb1c-0de71aae92b3 + - de90d7a0-9148-44d6-ab7f-b3fedb97703b Request-Id: - - req_QfT2abzMAEoV3K + - req_NfxOA9IqtqJagR Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -415,11 +420,11 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TNHXSMHO6szSsv", + "id": "cus_TZp8IUQUgdee8c", "object": "customer", "deleted": true } - recorded_at: Thu, 06 Nov 2025 17:27:53 GMT + recorded_at: Wed, 10 Dec 2025 04:59:29 GMT - request: method: post uri: https://api.stripe.com/v1/accounts @@ -428,15 +433,15 @@ http_interactions: string: type=standard&country=AU&email=apple.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_QfT2abzMAEoV3K","request_duration_ms":444}}' + - '{"last_request_metrics":{"request_id":"req_NfxOA9IqtqJagR","request_duration_ms":401}}' Idempotency-Key: - - d90af607-9626-45fc-94eb-bd82d631a918 + - eb841f86-0e27-405d-9807-65adac7b2f23 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -453,7 +458,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:56 GMT + - Wed, 10 Dec 2025 04:59:01 GMT Content-Type: - application/json Content-Length: @@ -476,17 +481,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d90af607-9626-45fc-94eb-bd82d631a918 + - eb841f86-0e27-405d-9807-65adac7b2f23 Original-Request: - - req_kJNoCYsp4RJOiP + - req_McFpPPWNijrsKs Request-Id: - - req_kJNoCYsp4RJOiP + - req_McFpPPWNijrsKs Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -501,7 +506,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyUEOjFfBJoW2", + "id": "acct_1ScfUN4B4QkosqoY", "object": "account", "business_profile": { "annual_revenue": null, @@ -535,7 +540,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1762450075, + "created": 1765342740, "default_currency": "aud", "details_submitted": false, "email": "apple.producer@example.com", @@ -544,7 +549,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SQWyUEOjFfBJoW2/external_accounts" + "url": "/v1/accounts/acct_1ScfUN4B4QkosqoY/external_accounts" }, "future_requirements": { "alternatives": [], @@ -646,24 +651,24 @@ http_interactions: }, "type": "standard" } - recorded_at: Thu, 06 Nov 2025 17:27:56 GMT + recorded_at: Wed, 10 Dec 2025 04:59:31 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SQWyUEOjFfBJoW2 + uri: https://api.stripe.com/v1/accounts/acct_1ScfUN4B4QkosqoY body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_kJNoCYsp4RJOiP","request_duration_ms":2449}}' + - '{"last_request_metrics":{"request_id":"req_McFpPPWNijrsKs","request_duration_ms":2164}}' Idempotency-Key: - - 9db82ee0-bee7-47ad-bc80-a91137fe29f4 + - 19603b8a-ab97-4564-96e4-ea11398e464c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -678,7 +683,7 @@ http_interactions: Server: - nginx Date: - - Thu, 06 Nov 2025 17:27:58 GMT + - Wed, 10 Dec 2025 04:59:03 GMT Content-Type: - application/json Content-Length: @@ -701,15 +706,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xsu1z93yii5Y95tC8R6Z1HrnBYqlYAiexaLOSzelBoBfkGI_qYp84hq4D4rAFyZr5m_6yUH8auNG5IAv + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9db82ee0-bee7-47ad-bc80-a91137fe29f4 + - 19603b8a-ab97-4564-96e4-ea11398e464c Request-Id: - - req_x79fNj1mjyapXq + - req_aNWvKRlNsNGO8U Stripe-Account: - - acct_1SQWyUEOjFfBJoW2 + - acct_1ScfUN4B4QkosqoY Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -724,9 +729,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SQWyUEOjFfBJoW2", + "id": "acct_1ScfUN4B4QkosqoY", "object": "account", "deleted": true } - recorded_at: Thu, 06 Nov 2025 17:27:58 GMT + recorded_at: Wed, 10 Dec 2025 04:59:34 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 84% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 34d9a659ce..f2eb67f991 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 05bbd189-fbb7-40be-bbb8-ee699b2ca546 + - debc28d1-b4aa-4e99-b9c3-c3216720ed52 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:11 GMT + - Wed, 10 Dec 2025 05:01:31 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 05bbd189-fbb7-40be-bbb8-ee699b2ca546 + - debc28d1-b4aa-4e99-b9c3-c3216720ed52 Original-Request: - - req_VRHiLiq5bXYR6o + - req_X5AFAQ0NBntliX Request-Id: - - req_VRHiLiq5bXYR6o + - req_X5AFAQ0NBntliX Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHV8q7ReCP7c", + "id": "cus_TZpB3KRRJGWOkF", "object": "customer", "address": null, "balance": 0, - "created": 1762270570, + "created": 1765342891, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "4Q7KWAGT", + "invoice_prefix": "XKE7SYFM", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:11 GMT + recorded_at: Wed, 10 Dec 2025 05:02:02 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedVelocityLimitExceeded&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHV8q7ReCP7c&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedVelocityLimitExceeded&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpB3KRRJGWOkF&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VRHiLiq5bXYR6o","request_duration_ms":428}}' + - '{"last_request_metrics":{"request_id":"req_X5AFAQ0NBntliX","request_duration_ms":413}}' Idempotency-Key: - - 93ea85ae-3084-4578-b239-456e3cf6953e + - d66314a3-7acf-4818-935e-0da25a457949 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:11 GMT + - Wed, 10 Dec 2025 05:01:32 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 93ea85ae-3084-4578-b239-456e3cf6953e + - d66314a3-7acf-4818-935e-0da25a457949 Original-Request: - - req_TJGuQQsJWQlhuq + - req_kWPn8Q1ZRCp6NK Request-Id: - - req_TJGuQQsJWQlhuq + - req_kWPn8Q1ZRCp6NK Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmHHKuuB1fWySn0ufn8lrY", + "id": "pi_3ScfWqKuuB1fWySn27JwiRL8", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270571, + "created": 1765342892, "currency": "eur", - "customer": "cus_TMVHV8q7ReCP7c", + "customer": "cus_TZpB3KRRJGWOkF", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmHHKuuB1fWySnYXvwNql1", + "payment_method": "pm_1ScfWqKuuB1fWySnxfqhkH3v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:11 GMT + recorded_at: Wed, 10 Dec 2025 05:02:02 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmHHKuuB1fWySn0ufn8lrY/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWqKuuB1fWySn27JwiRL8/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_TJGuQQsJWQlhuq","request_duration_ms":421}}' + - '{"last_request_metrics":{"request_id":"req_kWPn8Q1ZRCp6NK","request_duration_ms":436}}' Idempotency-Key: - - ead12726-b7dd-4006-8322-0c0aa2593508 + - ce88e39c-0fdf-4d23-aac3-1d9fd8b53482 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:12 GMT + - Wed, 10 Dec 2025 05:01:33 GMT Content-Type: - application/json Content-Length: - - '5426' + - '5503' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ead12726-b7dd-4006-8322-0c0aa2593508 + - ce88e39c-0fdf-4d23-aac3-1d9fd8b53482 Original-Request: - - req_2YboX0xt2RwCRl + - req_0xBqw4rFg7slB8 Request-Id: - - req_2YboX0xt2RwCRl + - req_0xBqw4rFg7slB8 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmHHKuuB1fWySn0th05w5m", + "charge": "ch_3ScfWqKuuB1fWySn2jLvTCt5", "code": "card_declined", "decline_code": "card_velocity_exceeded", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -334,7 +335,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "61", "payment_intent": { - "id": "pi_3SPmHHKuuB1fWySn0ufn8lrY", + "id": "pi_3ScfWqKuuB1fWySn27JwiRL8", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -350,15 +351,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270571, + "created": 1765342892, "currency": "eur", - "customer": "cus_TMVHV8q7ReCP7c", + "customer": "cus_TZpB3KRRJGWOkF", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmHHKuuB1fWySn0th05w5m", + "charge": "ch_3ScfWqKuuB1fWySn2jLvTCt5", "code": "card_declined", "decline_code": "card_velocity_exceeded", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -366,7 +367,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "61", "payment_method": { - "id": "pm_1SPmHHKuuB1fWySnYXvwNql1", + "id": "pm_1ScfWqKuuB1fWySnxfqhkH3v", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -392,7 +393,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "WoxwxVPUPcg0EjXW", "funding": "credit", @@ -410,15 +411,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270571, + "created": 1765342892, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmHHKuuB1fWySn0th05w5m", + "latest_charge": "ch_3ScfWqKuuB1fWySn2jLvTCt5", "livemode": false, "metadata": {}, "next_action": null, @@ -449,7 +451,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmHHKuuB1fWySnYXvwNql1", + "id": "pm_1ScfWqKuuB1fWySnxfqhkH3v", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -475,7 +477,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "WoxwxVPUPcg0EjXW", "funding": "credit", @@ -493,15 +495,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270571, + "created": 1765342892, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_2YboX0xt2RwCRl?t=1762270571", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_0xBqw4rFg7slB8?t=1765342892", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:12 GMT + recorded_at: Wed, 10 Dec 2025 05:02:04 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index ed98e31201..1eae743aaf 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - f5c4bc4f-9f48-4122-8d0d-e75687199e27 + - 8d68c3e6-08bc-411b-a9ef-05557109031a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:05 GMT + - Wed, 10 Dec 2025 05:01:26 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f5c4bc4f-9f48-4122-8d0d-e75687199e27 + - 8d68c3e6-08bc-411b-a9ef-05557109031a Original-Request: - - req_wx1iU7lK28IudE + - req_SeAXfWIatJcXD8 Request-Id: - - req_wx1iU7lK28IudE + - req_SeAXfWIatJcXD8 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHeuW3eyMVRD", + "id": "cus_TZpB33VkBwl1qF", "object": "customer", "address": null, "balance": 0, - "created": 1762270565, + "created": 1765342886, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "GVG5KQTJ", + "invoice_prefix": "KMDRO4FH", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:05 GMT + recorded_at: Wed, 10 Dec 2025 05:01:57 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedExpiredCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHeuW3eyMVRD&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedExpiredCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpB33VkBwl1qF&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_wx1iU7lK28IudE","request_duration_ms":356}}' + - '{"last_request_metrics":{"request_id":"req_SeAXfWIatJcXD8","request_duration_ms":439}}' Idempotency-Key: - - 65ad3e5b-a5f9-439d-8026-8d2f363399c7 + - 11c2a6c0-f833-4ecf-afc4-0ab081d3317c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:05 GMT + - Wed, 10 Dec 2025 05:01:26 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 65ad3e5b-a5f9-439d-8026-8d2f363399c7 + - 11c2a6c0-f833-4ecf-afc4-0ab081d3317c Original-Request: - - req_bJvlgwPaMutkK0 + - req_CMo3IC0Poex53c Request-Id: - - req_bJvlgwPaMutkK0 + - req_CMo3IC0Poex53c Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmHBKuuB1fWySn1VLcw46H", + "id": "pi_3ScfWkKuuB1fWySn2lPP0MOt", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270565, + "created": 1765342886, "currency": "eur", - "customer": "cus_TMVHeuW3eyMVRD", + "customer": "cus_TZpB33VkBwl1qF", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmHBKuuB1fWySn5qjimt6t", + "payment_method": "pm_1ScfWkKuuB1fWySnmjVlvZ2v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:05 GMT + recorded_at: Wed, 10 Dec 2025 05:01:57 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmHBKuuB1fWySn1VLcw46H/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWkKuuB1fWySn2lPP0MOt/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_bJvlgwPaMutkK0","request_duration_ms":488}}' + - '{"last_request_metrics":{"request_id":"req_CMo3IC0Poex53c","request_duration_ms":465}}' Idempotency-Key: - - ce1fb450-8d06-4355-aa58-8eea478c4601 + - 83b5b887-1c74-4afc-889b-9391dc0fa63e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:06 GMT + - Wed, 10 Dec 2025 05:01:27 GMT Content-Type: - application/json Content-Length: - - '5312' + - '5389' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ce1fb450-8d06-4355-aa58-8eea478c4601 + - 83b5b887-1c74-4afc-889b-9391dc0fa63e Original-Request: - - req_FqXyz12LZv0wqG + - req_i59BYUL8GCK0ni Request-Id: - - req_FqXyz12LZv0wqG + - req_i59BYUL8GCK0ni Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmHBKuuB1fWySn1CnxlgrS", + "charge": "ch_3ScfWkKuuB1fWySn2N5br7yl", "code": "expired_card", "decline_code": "expired_card", "doc_url": "https://stripe.com/docs/error-codes/expired-card", @@ -335,7 +336,7 @@ http_interactions: "network_decline_code": "54", "param": "exp_month", "payment_intent": { - "id": "pi_3SPmHBKuuB1fWySn1VLcw46H", + "id": "pi_3ScfWkKuuB1fWySn2lPP0MOt", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -351,15 +352,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270565, + "created": 1765342886, "currency": "eur", - "customer": "cus_TMVHeuW3eyMVRD", + "customer": "cus_TZpB33VkBwl1qF", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmHBKuuB1fWySn1CnxlgrS", + "charge": "ch_3ScfWkKuuB1fWySn2N5br7yl", "code": "expired_card", "decline_code": "expired_card", "doc_url": "https://stripe.com/docs/error-codes/expired-card", @@ -368,7 +369,7 @@ http_interactions: "network_decline_code": "54", "param": "exp_month", "payment_method": { - "id": "pm_1SPmHBKuuB1fWySn5qjimt6t", + "id": "pm_1ScfWkKuuB1fWySnmjVlvZ2v", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -394,7 +395,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "qpQikrTL7IyNA2rE", "funding": "credit", @@ -412,15 +413,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270565, + "created": 1765342886, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmHBKuuB1fWySn1CnxlgrS", + "latest_charge": "ch_3ScfWkKuuB1fWySn2N5br7yl", "livemode": false, "metadata": {}, "next_action": null, @@ -451,7 +453,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmHBKuuB1fWySn5qjimt6t", + "id": "pm_1ScfWkKuuB1fWySnmjVlvZ2v", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -477,7 +479,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "qpQikrTL7IyNA2rE", "funding": "credit", @@ -495,15 +497,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270565, + "created": 1765342886, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_FqXyz12LZv0wqG?t=1762270565", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_i59BYUL8GCK0ni?t=1765342887", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:06 GMT + recorded_at: Wed, 10 Dec 2025 05:01:58 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 8297996dd2..2ea75f5693 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Nop2qkp1LnkwYX","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_ieGRzEsqo8BB5k","request_duration_ms":311}}' Idempotency-Key: - - 40c382fe-bc38-421b-9f37-7b345a974da6 + - 26aa808a-88e4-4262-a6f8-33bf7d076023 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:57 GMT + - Wed, 10 Dec 2025 05:01:18 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 40c382fe-bc38-421b-9f37-7b345a974da6 + - 26aa808a-88e4-4262-a6f8-33bf7d076023 Original-Request: - - req_G7CV2Zwj4ZwaPy + - req_8u736DCVnNVjhK Request-Id: - - req_G7CV2Zwj4ZwaPy + - req_8u736DCVnNVjhK Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHixcIs3Sf2E", + "id": "cus_TZpArNhzDbxVce", "object": "customer", "address": null, "balance": 0, - "created": 1762270557, + "created": 1765342878, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "OAGAPJ4J", + "invoice_prefix": "RPHARDPM", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:57 GMT + recorded_at: Wed, 10 Dec 2025 05:01:48 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclined&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHixcIs3Sf2E&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclined&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpArNhzDbxVce&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_G7CV2Zwj4ZwaPy","request_duration_ms":429}}' + - '{"last_request_metrics":{"request_id":"req_8u736DCVnNVjhK","request_duration_ms":435}}' Idempotency-Key: - - 51b7a7c0-c887-4070-a8b1-b28e36721d5b + - 383abb5a-85b6-4263-b704-cc351b6e304a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:57 GMT + - Wed, 10 Dec 2025 05:01:18 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 51b7a7c0-c887-4070-a8b1-b28e36721d5b + - 383abb5a-85b6-4263-b704-cc351b6e304a Original-Request: - - req_4jOkXaDXNlWXo6 + - req_RsAm9WwVy3Wksu Request-Id: - - req_4jOkXaDXNlWXo6 + - req_RsAm9WwVy3Wksu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmH3KuuB1fWySn238qYlmm", + "id": "pi_3ScfWcKuuB1fWySn12qHLAgj", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270557, + "created": 1765342878, "currency": "eur", - "customer": "cus_TMVHixcIs3Sf2E", + "customer": "cus_TZpArNhzDbxVce", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmH3KuuB1fWySnpFDiRwE2", + "payment_method": "pm_1ScfWcKuuB1fWySnnO4T5CLn", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:57 GMT + recorded_at: Wed, 10 Dec 2025 05:01:49 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmH3KuuB1fWySn238qYlmm/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWcKuuB1fWySn12qHLAgj/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_4jOkXaDXNlWXo6","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_RsAm9WwVy3Wksu","request_duration_ms":456}}' Idempotency-Key: - - b4f9e295-443a-46dd-ae7f-e1c643eec659 + - 47a71306-9ff9-46a3-bda5-a38b54cd32b5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:58 GMT + - Wed, 10 Dec 2025 05:01:19 GMT Content-Type: - application/json Content-Length: - - '5194' + - '5271' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b4f9e295-443a-46dd-ae7f-e1c643eec659 + - 47a71306-9ff9-46a3-bda5-a38b54cd32b5 Original-Request: - - req_NdUEhqptzG1vLu + - req_4m1IWakNRVUnVk Request-Id: - - req_NdUEhqptzG1vLu + - req_4m1IWakNRVUnVk Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -328,14 +329,14 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmH3KuuB1fWySn2oicxeHt", + "charge": "ch_3ScfWcKuuB1fWySn1opAy0gA", "code": "card_declined", "decline_code": "generic_decline", "doc_url": "https://stripe.com/docs/error-codes/card-declined", "message": "Your card was declined.", "network_decline_code": "01", "payment_intent": { - "id": "pi_3SPmH3KuuB1fWySn238qYlmm", + "id": "pi_3ScfWcKuuB1fWySn12qHLAgj", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -351,22 +352,22 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270557, + "created": 1765342878, "currency": "eur", - "customer": "cus_TMVHixcIs3Sf2E", + "customer": "cus_TZpArNhzDbxVce", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmH3KuuB1fWySn2oicxeHt", + "charge": "ch_3ScfWcKuuB1fWySn1opAy0gA", "code": "card_declined", "decline_code": "generic_decline", "doc_url": "https://stripe.com/docs/error-codes/card-declined", "message": "Your card was declined.", "network_decline_code": "01", "payment_method": { - "id": "pm_1SPmH3KuuB1fWySnpFDiRwE2", + "id": "pm_1ScfWcKuuB1fWySnnO4T5CLn", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -392,7 +393,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "IKC2ubfpSLuZKsVs", "funding": "credit", @@ -410,15 +411,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270557, + "created": 1765342878, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmH3KuuB1fWySn2oicxeHt", + "latest_charge": "ch_3ScfWcKuuB1fWySn1opAy0gA", "livemode": false, "metadata": {}, "next_action": null, @@ -449,7 +451,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmH3KuuB1fWySnpFDiRwE2", + "id": "pm_1ScfWcKuuB1fWySnnO4T5CLn", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -475,7 +477,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "IKC2ubfpSLuZKsVs", "funding": "credit", @@ -493,15 +495,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270557, + "created": 1765342878, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_NdUEhqptzG1vLu?t=1762270558", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_4m1IWakNRVUnVk?t=1765342878", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:35:58 GMT + recorded_at: Wed, 10 Dec 2025 05:01:50 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index d9fd78e395..27eca993e1 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 6e0395e8-2b8e-4a06-a669-bce4ef3005e3 + - a94931a4-5ba0-4468-bf0c-fdc68b4c9076 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:07 GMT + - Wed, 10 Dec 2025 05:01:28 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6e0395e8-2b8e-4a06-a669-bce4ef3005e3 + - a94931a4-5ba0-4468-bf0c-fdc68b4c9076 Original-Request: - - req_nW9evbhYR5FfLk + - req_IqCaydqGvfRBJ6 Request-Id: - - req_nW9evbhYR5FfLk + - req_IqCaydqGvfRBJ6 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHrDGNdFUZkN", + "id": "cus_TZpBWHup9kupNV", "object": "customer", "address": null, "balance": 0, - "created": 1762270566, + "created": 1765342888, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "TOABGRZO", + "invoice_prefix": "OIJENCTG", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:07 GMT + recorded_at: Wed, 10 Dec 2025 05:01:58 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedIncorrectCvc&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHrDGNdFUZkN&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedIncorrectCvc&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpBWHup9kupNV&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_nW9evbhYR5FfLk","request_duration_ms":439}}' + - '{"last_request_metrics":{"request_id":"req_IqCaydqGvfRBJ6","request_duration_ms":423}}' Idempotency-Key: - - 21a982c6-e0e9-4f35-96fe-c157b6b557cc + - 94e33228-a787-429d-9aec-edfd7c84f70f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:07 GMT + - Wed, 10 Dec 2025 05:01:28 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 21a982c6-e0e9-4f35-96fe-c157b6b557cc + - 94e33228-a787-429d-9aec-edfd7c84f70f Original-Request: - - req_Nb3iRjs5Nqedup + - req_lRkGVIOOiVBFaa Request-Id: - - req_Nb3iRjs5Nqedup + - req_lRkGVIOOiVBFaa Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmHDKuuB1fWySn0nMlDsMO", + "id": "pi_3ScfWmKuuB1fWySn18X8bmJD", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270567, + "created": 1765342888, "currency": "eur", - "customer": "cus_TMVHrDGNdFUZkN", + "customer": "cus_TZpBWHup9kupNV", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmHDKuuB1fWySneVPGB7OY", + "payment_method": "pm_1ScfWmKuuB1fWySnduK679dw", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:07 GMT + recorded_at: Wed, 10 Dec 2025 05:01:59 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmHDKuuB1fWySn0nMlDsMO/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWmKuuB1fWySn18X8bmJD/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Nb3iRjs5Nqedup","request_duration_ms":405}}' + - '{"last_request_metrics":{"request_id":"req_lRkGVIOOiVBFaa","request_duration_ms":435}}' Idempotency-Key: - - 5b8480c6-85e9-402b-83f9-a1e7f06f2c2d + - 69b3254d-9935-45e6-bb50-a7e6db510e9e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:08 GMT + - Wed, 10 Dec 2025 05:01:29 GMT Content-Type: - application/json Content-Length: - - '5340' + - '5417' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5b8480c6-85e9-402b-83f9-a1e7f06f2c2d + - 69b3254d-9935-45e6-bb50-a7e6db510e9e Original-Request: - - req_987ctz6fJoMPTy + - req_u2SvlolTwWWcso Request-Id: - - req_987ctz6fJoMPTy + - req_u2SvlolTwWWcso Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmHDKuuB1fWySn0D6PB9A0", + "charge": "ch_3ScfWmKuuB1fWySn1t42x5pH", "code": "incorrect_cvc", "decline_code": "incorrect_cvc", "doc_url": "https://stripe.com/docs/error-codes/incorrect-cvc", @@ -335,7 +336,7 @@ http_interactions: "network_decline_code": "N7", "param": "cvc", "payment_intent": { - "id": "pi_3SPmHDKuuB1fWySn0nMlDsMO", + "id": "pi_3ScfWmKuuB1fWySn18X8bmJD", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -351,15 +352,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270567, + "created": 1765342888, "currency": "eur", - "customer": "cus_TMVHrDGNdFUZkN", + "customer": "cus_TZpBWHup9kupNV", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmHDKuuB1fWySn0D6PB9A0", + "charge": "ch_3ScfWmKuuB1fWySn1t42x5pH", "code": "incorrect_cvc", "decline_code": "incorrect_cvc", "doc_url": "https://stripe.com/docs/error-codes/incorrect-cvc", @@ -368,7 +369,7 @@ http_interactions: "network_decline_code": "N7", "param": "cvc", "payment_method": { - "id": "pm_1SPmHDKuuB1fWySneVPGB7OY", + "id": "pm_1ScfWmKuuB1fWySnduK679dw", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -394,7 +395,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "eWmxEL5j3bNdPnK5", "funding": "credit", @@ -412,15 +413,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270567, + "created": 1765342888, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmHDKuuB1fWySn0D6PB9A0", + "latest_charge": "ch_3ScfWmKuuB1fWySn1t42x5pH", "livemode": false, "metadata": {}, "next_action": null, @@ -451,7 +453,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmHDKuuB1fWySneVPGB7OY", + "id": "pm_1ScfWmKuuB1fWySnduK679dw", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -477,7 +479,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "eWmxEL5j3bNdPnK5", "funding": "credit", @@ -495,15 +497,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270567, + "created": 1765342888, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_987ctz6fJoMPTy?t=1762270567", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_u2SvlolTwWWcso?t=1765342888", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:08 GMT + recorded_at: Wed, 10 Dec 2025 05:02:00 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 23bc6eb088..63556a1710 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - ef34cbef-cf73-4154-bc61-44ced172ce3b + - d1296687-d288-4e05-a685-3994a0574b12 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:59 GMT + - Wed, 10 Dec 2025 05:01:20 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ef34cbef-cf73-4154-bc61-44ced172ce3b + - d1296687-d288-4e05-a685-3994a0574b12 Original-Request: - - req_jtc4E4kqt1nx94 + - req_hR6Sm7zpAHpadz Request-Id: - - req_jtc4E4kqt1nx94 + - req_hR6Sm7zpAHpadz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHiTRbiHNzUn", + "id": "cus_TZpATy1aw14RS5", "object": "customer", "address": null, "balance": 0, - "created": 1762270559, + "created": 1765342879, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "XEYDSEAG", + "invoice_prefix": "9TQH7EI7", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:59 GMT + recorded_at: Wed, 10 Dec 2025 05:01:50 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedInsufficientFunds&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHiTRbiHNzUn&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedInsufficientFunds&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpATy1aw14RS5&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_jtc4E4kqt1nx94","request_duration_ms":438}}' + - '{"last_request_metrics":{"request_id":"req_hR6Sm7zpAHpadz","request_duration_ms":433}}' Idempotency-Key: - - c44a482d-f0d5-4d3f-a4be-8ea4279d3681 + - cdd1b03f-b40d-440a-95f1-db692bb546a8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:59 GMT + - Wed, 10 Dec 2025 05:01:20 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c44a482d-f0d5-4d3f-a4be-8ea4279d3681 + - cdd1b03f-b40d-440a-95f1-db692bb546a8 Original-Request: - - req_rSQnFdY596IWaM + - req_DpXufl7ERooX3G Request-Id: - - req_rSQnFdY596IWaM + - req_DpXufl7ERooX3G Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmH5KuuB1fWySn214HEXgY", + "id": "pi_3ScfWeKuuB1fWySn1J9HeL4I", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270559, + "created": 1765342880, "currency": "eur", - "customer": "cus_TMVHiTRbiHNzUn", + "customer": "cus_TZpATy1aw14RS5", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmH5KuuB1fWySnsIC72pGB", + "payment_method": "pm_1ScfWeKuuB1fWySnbogzEME3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:59 GMT + recorded_at: Wed, 10 Dec 2025 05:01:51 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmH5KuuB1fWySn214HEXgY/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWeKuuB1fWySn1J9HeL4I/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_rSQnFdY596IWaM","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_DpXufl7ERooX3G","request_duration_ms":437}}' Idempotency-Key: - - ac0d3b34-e87d-48e5-8bc2-1daf924b7504 + - 4d1c1e09-fde1-4a4f-a4e1-117fc2ab0980 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:00 GMT + - Wed, 10 Dec 2025 05:01:21 GMT Content-Type: - application/json Content-Length: - - '5290' + - '5367' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ac0d3b34-e87d-48e5-8bc2-1daf924b7504 + - 4d1c1e09-fde1-4a4f-a4e1-117fc2ab0980 Original-Request: - - req_YEs6PhcX83eFEI + - req_YIop0upyVXCFSW Request-Id: - - req_YEs6PhcX83eFEI + - req_YIop0upyVXCFSW Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmH5KuuB1fWySn2YqkW7z5", + "charge": "ch_3ScfWeKuuB1fWySn1IgbVWeq", "code": "card_declined", "decline_code": "insufficient_funds", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -334,7 +335,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "51", "payment_intent": { - "id": "pi_3SPmH5KuuB1fWySn214HEXgY", + "id": "pi_3ScfWeKuuB1fWySn1J9HeL4I", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -350,15 +351,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270559, + "created": 1765342880, "currency": "eur", - "customer": "cus_TMVHiTRbiHNzUn", + "customer": "cus_TZpATy1aw14RS5", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmH5KuuB1fWySn2YqkW7z5", + "charge": "ch_3ScfWeKuuB1fWySn1IgbVWeq", "code": "card_declined", "decline_code": "insufficient_funds", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -366,7 +367,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "51", "payment_method": { - "id": "pm_1SPmH5KuuB1fWySnsIC72pGB", + "id": "pm_1ScfWeKuuB1fWySnbogzEME3", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -392,7 +393,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "O0I0muUGQBJy3p73", "funding": "credit", @@ -410,15 +411,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270559, + "created": 1765342880, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmH5KuuB1fWySn2YqkW7z5", + "latest_charge": "ch_3ScfWeKuuB1fWySn1IgbVWeq", "livemode": false, "metadata": {}, "next_action": null, @@ -449,7 +451,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmH5KuuB1fWySnsIC72pGB", + "id": "pm_1ScfWeKuuB1fWySnbogzEME3", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -475,7 +477,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "O0I0muUGQBJy3p73", "funding": "credit", @@ -493,15 +495,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270559, + "created": 1765342880, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_YEs6PhcX83eFEI?t=1762270559", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_YIop0upyVXCFSW?t=1765342880", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:00 GMT + recorded_at: Wed, 10 Dec 2025 05:01:52 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 51545a8aae..dd00416954 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - d36047f2-ebb0-431e-a92a-9119abd69b43 + - 13697765-f756-4459-bafa-a6073e970d63 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:01 GMT + - Wed, 10 Dec 2025 05:01:22 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d36047f2-ebb0-431e-a92a-9119abd69b43 + - 13697765-f756-4459-bafa-a6073e970d63 Original-Request: - - req_PZkRA9XIVsXHg4 + - req_CTY9QLN6Bg1pjf Request-Id: - - req_PZkRA9XIVsXHg4 + - req_CTY9QLN6Bg1pjf Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHvUO9T29XGN", + "id": "cus_TZpBDzroW7W2mt", "object": "customer", "address": null, "balance": 0, - "created": 1762270561, + "created": 1765342881, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "AEGYIDO5", + "invoice_prefix": "SDONQEZB", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:01 GMT + recorded_at: Wed, 10 Dec 2025 05:01:52 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedLostCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHvUO9T29XGN&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedLostCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpBDzroW7W2mt&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_PZkRA9XIVsXHg4","request_duration_ms":370}}' + - '{"last_request_metrics":{"request_id":"req_CTY9QLN6Bg1pjf","request_duration_ms":424}}' Idempotency-Key: - - 4a349654-f0f9-45e9-90f6-881a535bb335 + - 38549322-4931-4ba2-9ff9-55396d128954 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:01 GMT + - Wed, 10 Dec 2025 05:01:23 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4a349654-f0f9-45e9-90f6-881a535bb335 + - 38549322-4931-4ba2-9ff9-55396d128954 Original-Request: - - req_nVlwFs3a9stQEy + - req_zjIL7unkJsrMLS Request-Id: - - req_nVlwFs3a9stQEy + - req_zjIL7unkJsrMLS Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmH7KuuB1fWySn2sHevuHm", + "id": "pi_3ScfWgKuuB1fWySn2G472WqD", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270561, + "created": 1765342882, "currency": "eur", - "customer": "cus_TMVHvUO9T29XGN", + "customer": "cus_TZpBDzroW7W2mt", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmH7KuuB1fWySnpMb95xYb", + "payment_method": "pm_1ScfWgKuuB1fWySnBJt4xrGE", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:01 GMT + recorded_at: Wed, 10 Dec 2025 05:01:53 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmH7KuuB1fWySn2sHevuHm/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWgKuuB1fWySn2G472WqD/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_nVlwFs3a9stQEy","request_duration_ms":412}}' + - '{"last_request_metrics":{"request_id":"req_zjIL7unkJsrMLS","request_duration_ms":996}}' Idempotency-Key: - - 64a86196-2d0c-499e-9790-5c91c8b279db + - 7c380585-093a-4b5b-9f2a-4e1f3db00cf7 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:02 GMT + - Wed, 10 Dec 2025 05:01:24 GMT Content-Type: - application/json Content-Length: - - '5254' + - '5331' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 64a86196-2d0c-499e-9790-5c91c8b279db + - 7c380585-093a-4b5b-9f2a-4e1f3db00cf7 Original-Request: - - req_Yvi1gQt2CP1jYP + - req_1lreo6AEGdo3Hk Request-Id: - - req_Yvi1gQt2CP1jYP + - req_1lreo6AEGdo3Hk Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmH7KuuB1fWySn2uu4tVIV", + "charge": "ch_3ScfWgKuuB1fWySn29haVSUz", "code": "card_declined", "decline_code": "lost_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -334,7 +335,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "41", "payment_intent": { - "id": "pi_3SPmH7KuuB1fWySn2sHevuHm", + "id": "pi_3ScfWgKuuB1fWySn2G472WqD", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -350,15 +351,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270561, + "created": 1765342882, "currency": "eur", - "customer": "cus_TMVHvUO9T29XGN", + "customer": "cus_TZpBDzroW7W2mt", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmH7KuuB1fWySn2uu4tVIV", + "charge": "ch_3ScfWgKuuB1fWySn29haVSUz", "code": "card_declined", "decline_code": "lost_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -366,7 +367,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "41", "payment_method": { - "id": "pm_1SPmH7KuuB1fWySnpMb95xYb", + "id": "pm_1ScfWgKuuB1fWySnBJt4xrGE", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -392,7 +393,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "hMDekBwrnWL1oLxe", "funding": "credit", @@ -410,15 +411,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270561, + "created": 1765342882, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmH7KuuB1fWySn2uu4tVIV", + "latest_charge": "ch_3ScfWgKuuB1fWySn29haVSUz", "livemode": false, "metadata": {}, "next_action": null, @@ -449,7 +451,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmH7KuuB1fWySnpMb95xYb", + "id": "pm_1ScfWgKuuB1fWySnBJt4xrGE", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -475,7 +477,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "hMDekBwrnWL1oLxe", "funding": "credit", @@ -493,15 +495,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270561, + "created": 1765342882, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_Yvi1gQt2CP1jYP?t=1762270561", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_1lreo6AEGdo3Hk?t=1765342883", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:02 GMT + recorded_at: Wed, 10 Dec 2025 05:01:54 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 64605e6cf1..493272d64d 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 3364af24-70a9-4a9a-9f4a-72ba7af13ce1 + - 13bc00fc-6732-4488-b62c-c35471c25745 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:09 GMT + - Wed, 10 Dec 2025 05:01:30 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3364af24-70a9-4a9a-9f4a-72ba7af13ce1 + - 13bc00fc-6732-4488-b62c-c35471c25745 Original-Request: - - req_Q8RE0B0paGv6qw + - req_UXI1PVkDZz8uCs Request-Id: - - req_Q8RE0B0paGv6qw + - req_UXI1PVkDZz8uCs Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHKBm8LoU8TY", + "id": "cus_TZpBV6Gn0Y3Zca", "object": "customer", "address": null, "balance": 0, - "created": 1762270568, + "created": 1765342889, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "P9RDUMVV", + "invoice_prefix": "YMF3KBAP", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:09 GMT + recorded_at: Wed, 10 Dec 2025 05:02:00 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedProcessingError&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHKBm8LoU8TY&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedProcessingError&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpBV6Gn0Y3Zca&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Q8RE0B0paGv6qw","request_duration_ms":479}}' + - '{"last_request_metrics":{"request_id":"req_UXI1PVkDZz8uCs","request_duration_ms":419}}' Idempotency-Key: - - c832fb00-5b7e-4687-94ad-2df710404beb + - 44002f96-3b3e-4fa2-8b27-32bd0c64263d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:09 GMT + - Wed, 10 Dec 2025 05:01:30 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c832fb00-5b7e-4687-94ad-2df710404beb + - 44002f96-3b3e-4fa2-8b27-32bd0c64263d Original-Request: - - req_UUovUv3Knx1grN + - req_7hgWtZtD5aUZBa Request-Id: - - req_UUovUv3Knx1grN + - req_7hgWtZtD5aUZBa Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmHFKuuB1fWySn1ZKZMAp1", + "id": "pi_3ScfWoKuuB1fWySn0x8q5egj", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270569, + "created": 1765342890, "currency": "eur", - "customer": "cus_TMVHKBm8LoU8TY", + "customer": "cus_TZpBV6Gn0Y3Zca", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmHFKuuB1fWySneo3FnWXI", + "payment_method": "pm_1ScfWoKuuB1fWySnafCNjjfR", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:09 GMT + recorded_at: Wed, 10 Dec 2025 05:02:01 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmHFKuuB1fWySn1ZKZMAp1/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWoKuuB1fWySn0x8q5egj/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_UUovUv3Knx1grN","request_duration_ms":503}}' + - '{"last_request_metrics":{"request_id":"req_7hgWtZtD5aUZBa","request_duration_ms":444}}' Idempotency-Key: - - aadd336a-d9ad-451f-ac38-a19e9657fc0e + - 49c6e42d-e141-4f86-acea-30b5cb0b1fd4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:10 GMT + - Wed, 10 Dec 2025 05:01:31 GMT Content-Type: - application/json Content-Length: - - '5306' + - '5383' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - aadd336a-d9ad-451f-ac38-a19e9657fc0e + - 49c6e42d-e141-4f86-acea-30b5cb0b1fd4 Original-Request: - - req_HNvSASIbtq4Yai + - req_XHVi0Io0eJz5HC Request-Id: - - req_HNvSASIbtq4Yai + - req_XHVi0Io0eJz5HC Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,14 +327,14 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmHFKuuB1fWySn1CxL3Y2E", + "charge": "ch_3ScfWoKuuB1fWySn0dYLeKwP", "code": "processing_error", "decline_code": "processing_error", "doc_url": "https://stripe.com/docs/error-codes/processing-error", "message": "An error occurred while processing your card. Try again in a little bit.", "network_decline_code": "06", "payment_intent": { - "id": "pi_3SPmHFKuuB1fWySn1ZKZMAp1", + "id": "pi_3ScfWoKuuB1fWySn0x8q5egj", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -349,22 +350,22 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270569, + "created": 1765342890, "currency": "eur", - "customer": "cus_TMVHKBm8LoU8TY", + "customer": "cus_TZpBV6Gn0Y3Zca", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmHFKuuB1fWySn1CxL3Y2E", + "charge": "ch_3ScfWoKuuB1fWySn0dYLeKwP", "code": "processing_error", "decline_code": "processing_error", "doc_url": "https://stripe.com/docs/error-codes/processing-error", "message": "An error occurred while processing your card. Try again in a little bit.", "network_decline_code": "06", "payment_method": { - "id": "pm_1SPmHFKuuB1fWySneo3FnWXI", + "id": "pm_1ScfWoKuuB1fWySnafCNjjfR", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -390,7 +391,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "9HWWxe4EyniQy61z", "funding": "credit", @@ -408,15 +409,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270569, + "created": 1765342890, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmHFKuuB1fWySn1CxL3Y2E", + "latest_charge": "ch_3ScfWoKuuB1fWySn0dYLeKwP", "livemode": false, "metadata": {}, "next_action": null, @@ -447,7 +449,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmHFKuuB1fWySneo3FnWXI", + "id": "pm_1ScfWoKuuB1fWySnafCNjjfR", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -473,7 +475,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "9HWWxe4EyniQy61z", "funding": "credit", @@ -491,15 +493,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270569, + "created": 1765342890, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_HNvSASIbtq4Yai?t=1762270569", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_XHVi0Io0eJz5HC?t=1765342890", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:10 GMT + recorded_at: Wed, 10 Dec 2025 05:02:02 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 88168e513c..4a69a4e306 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 4517a27a-1547-4c88-a2fd-ad0d78976dd4 + - 27860be7-e383-4054-9204-263328dbd7b8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:03 GMT + - Wed, 10 Dec 2025 05:01:24 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4517a27a-1547-4c88-a2fd-ad0d78976dd4 + - 27860be7-e383-4054-9204-263328dbd7b8 Original-Request: - - req_XTJ87b5qS3Yufy + - req_OCZ1W5JI0r0eUf Request-Id: - - req_XTJ87b5qS3Yufy + - req_OCZ1W5JI0r0eUf Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHES6eEwzNVp", + "id": "cus_TZpBbH0OFX1Wpz", "object": "customer", "address": null, "balance": 0, - "created": 1762270563, + "created": 1765342884, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "I7OVCYPD", + "invoice_prefix": "PAUPDMBT", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:36:03 GMT + recorded_at: Wed, 10 Dec 2025 05:01:55 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedStolenCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHES6eEwzNVp&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedStolenCard&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpBbH0OFX1Wpz&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XTJ87b5qS3Yufy","request_duration_ms":432}}' + - '{"last_request_metrics":{"request_id":"req_OCZ1W5JI0r0eUf","request_duration_ms":430}}' Idempotency-Key: - - e0c495e5-3ca5-45e8-bd20-57fd779d403a + - 6f8344c6-d4dd-4bdc-8232-aeb136839e1a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:03 GMT + - Wed, 10 Dec 2025 05:01:24 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e0c495e5-3ca5-45e8-bd20-57fd779d403a + - 6f8344c6-d4dd-4bdc-8232-aeb136839e1a Original-Request: - - req_BFKn5ifrsbaXNZ + - req_bWvkL8miMCpWrD Request-Id: - - req_BFKn5ifrsbaXNZ + - req_bWvkL8miMCpWrD Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmH9KuuB1fWySn1kgg05UF", + "id": "pi_3ScfWiKuuB1fWySn2mG1zfY0", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270563, + "created": 1765342884, "currency": "eur", - "customer": "cus_TMVHES6eEwzNVp", + "customer": "cus_TZpBbH0OFX1Wpz", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmH9KuuB1fWySnRj5LQQz8", + "payment_method": "pm_1ScfWiKuuB1fWySnPZECimSi", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:36:03 GMT + recorded_at: Wed, 10 Dec 2025 05:01:55 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmH9KuuB1fWySn1kgg05UF/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWiKuuB1fWySn2mG1zfY0/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BFKn5ifrsbaXNZ","request_duration_ms":612}}' + - '{"last_request_metrics":{"request_id":"req_bWvkL8miMCpWrD","request_duration_ms":442}}' Idempotency-Key: - - ee358913-eef5-449c-9ead-4c051f694d23 + - f0cb93d4-aa1f-42d1-bfb5-ba842895703b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:36:04 GMT + - Wed, 10 Dec 2025 05:01:25 GMT Content-Type: - application/json Content-Length: - - '5258' + - '5335' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ee358913-eef5-449c-9ead-4c051f694d23 + - f0cb93d4-aa1f-42d1-bfb5-ba842895703b Original-Request: - - req_N3qzc6D4HToHeQ + - req_W5mRMimSS5ttSE Request-Id: - - req_N3qzc6D4HToHeQ + - req_W5mRMimSS5ttSE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: { "error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmH9KuuB1fWySn1s3WWMUl", + "charge": "ch_3ScfWiKuuB1fWySn2XI10S3z", "code": "card_declined", "decline_code": "stolen_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -334,7 +335,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "43", "payment_intent": { - "id": "pi_3SPmH9KuuB1fWySn1kgg05UF", + "id": "pi_3ScfWiKuuB1fWySn2mG1zfY0", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -350,15 +351,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270563, + "created": 1765342884, "currency": "eur", - "customer": "cus_TMVHES6eEwzNVp", + "customer": "cus_TZpBbH0OFX1Wpz", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmH9KuuB1fWySn1s3WWMUl", + "charge": "ch_3ScfWiKuuB1fWySn2XI10S3z", "code": "card_declined", "decline_code": "stolen_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -366,7 +367,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "43", "payment_method": { - "id": "pm_1SPmH9KuuB1fWySnRj5LQQz8", + "id": "pm_1ScfWiKuuB1fWySnPZECimSi", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -392,7 +393,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "1pjhEFFOW1eCi1AB", "funding": "credit", @@ -410,15 +411,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270563, + "created": 1765342884, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmH9KuuB1fWySn1s3WWMUl", + "latest_charge": "ch_3ScfWiKuuB1fWySn2XI10S3z", "livemode": false, "metadata": {}, "next_action": null, @@ -449,7 +451,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmH9KuuB1fWySnRj5LQQz8", + "id": "pm_1ScfWiKuuB1fWySnPZECimSi", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -475,7 +477,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "1pjhEFFOW1eCi1AB", "funding": "credit", @@ -493,15 +495,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270563, + "created": 1765342884, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_N3qzc6D4HToHeQ?t=1762270564", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_W5mRMimSS5ttSE?t=1765342885", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:36:04 GMT + recorded_at: Wed, 10 Dec 2025 05:01:56 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml index 1e9cf4bb1b..075174664f 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ecipBFGS1o4tLN","request_duration_ms":241}}' + - '{"last_request_metrics":{"request_id":"req_9iMQiS4zbaCNeT","request_duration_ms":372}}' Idempotency-Key: - - 4d4c013c-b4a2-470e-b7e6-15127ef4fc0b + - 7dda7445-0058-4d28-8264-8a166624dfbc Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:27 GMT + - Wed, 10 Dec 2025 05:00:49 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4d4c013c-b4a2-470e-b7e6-15127ef4fc0b + - 7dda7445-0058-4d28-8264-8a166624dfbc Original-Request: - - req_Z6PLctU8xikIZq + - req_BJTeHvgQih9dxu Request-Id: - - req_Z6PLctU8xikIZq + - req_BJTeHvgQih9dxu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHzXPFYiLlXQ", + "id": "cus_TZpAQzi3OZiJyj", "object": "customer", "address": null, "balance": 0, - "created": 1762270527, + "created": 1765342849, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "0CX30UDW", + "invoice_prefix": "R3BITBVD", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:27 GMT + recorded_at: Wed, 10 Dec 2025 05:01:20 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHzXPFYiLlXQ&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAQzi3OZiJyj&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Z6PLctU8xikIZq","request_duration_ms":484}}' + - '{"last_request_metrics":{"request_id":"req_BJTeHvgQih9dxu","request_duration_ms":452}}' Idempotency-Key: - - f8188908-cdd0-473a-95e9-b7c97e79e084 + - 5111e889-f733-4b89-b819-21ed31a47133 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:28 GMT + - Wed, 10 Dec 2025 05:00:50 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f8188908-cdd0-473a-95e9-b7c97e79e084 + - 5111e889-f733-4b89-b819-21ed31a47133 Original-Request: - - req_9Pms9wg6XazTmt + - req_gYDgU5IvhzmzBb Request-Id: - - req_9Pms9wg6XazTmt + - req_gYDgU5IvhzmzBb Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGZKuuB1fWySn2XgnNYuk", + "id": "pi_3ScfWAKuuB1fWySn2ZrkxcEh", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270527, + "created": 1765342850, "currency": "eur", - "customer": "cus_TMVHzXPFYiLlXQ", + "customer": "cus_TZpAQzi3OZiJyj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGZKuuB1fWySnCEuwUHRK", + "payment_method": "pm_1ScfW9KuuB1fWySndNxaWSn4", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:28 GMT + recorded_at: Wed, 10 Dec 2025 05:01:20 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGZKuuB1fWySn2XgnNYuk/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWAKuuB1fWySn2ZrkxcEh/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9Pms9wg6XazTmt","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_gYDgU5IvhzmzBb","request_duration_ms":438}}' Idempotency-Key: - - 313d41ad-6783-4ae6-8f18-dc0be4901501 + - 6883087d-db8a-4a23-91d3-d59254b43f4d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:28 GMT + - Wed, 10 Dec 2025 05:00:51 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 313d41ad-6783-4ae6-8f18-dc0be4901501 + - 6883087d-db8a-4a23-91d3-d59254b43f4d Original-Request: - - req_FQaGMkgTe7wwG0 + - req_I37m1bMtqe4zVg Request-Id: - - req_FQaGMkgTe7wwG0 + - req_I37m1bMtqe4zVg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGZKuuB1fWySn2XgnNYuk", + "id": "pi_3ScfWAKuuB1fWySn2ZrkxcEh", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270527, + "created": 1765342850, "currency": "eur", - "customer": "cus_TMVHzXPFYiLlXQ", + "customer": "cus_TZpAQzi3OZiJyj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGZKuuB1fWySn2bKxqDni", + "latest_charge": "ch_3ScfWAKuuB1fWySn2VWChgSA", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGZKuuB1fWySnCEuwUHRK", + "payment_method": "pm_1ScfW9KuuB1fWySndNxaWSn4", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:29 GMT + recorded_at: Wed, 10 Dec 2025 05:01:21 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGZKuuB1fWySn2XgnNYuk + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWAKuuB1fWySn2ZrkxcEh body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_FQaGMkgTe7wwG0","request_duration_ms":919}}' + - '{"last_request_metrics":{"request_id":"req_I37m1bMtqe4zVg","request_duration_ms":1008}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:29 GMT + - Wed, 10 Dec 2025 05:00:51 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_trjR341LouwoJy + - req_TuSBiNJF1UYY2F Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGZKuuB1fWySn2XgnNYuk", + "id": "pi_3ScfWAKuuB1fWySn2ZrkxcEh", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270527, + "created": 1765342850, "currency": "eur", - "customer": "cus_TMVHzXPFYiLlXQ", + "customer": "cus_TZpAQzi3OZiJyj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGZKuuB1fWySn2bKxqDni", + "latest_charge": "ch_3ScfWAKuuB1fWySn2VWChgSA", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGZKuuB1fWySnCEuwUHRK", + "payment_method": "pm_1ScfW9KuuB1fWySndNxaWSn4", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:29 GMT + recorded_at: Wed, 10 Dec 2025 05:01:22 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGZKuuB1fWySn2XgnNYuk/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWAKuuB1fWySn2ZrkxcEh/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_trjR341LouwoJy","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_TuSBiNJF1UYY2F","request_duration_ms":387}}' Idempotency-Key: - - f4cc185a-5ef4-4513-a86a-ca0c0e3c390e + - 44f1690f-abac-425d-bf1b-f35df62fe9e0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:30 GMT + - Wed, 10 Dec 2025 05:00:53 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f4cc185a-5ef4-4513-a86a-ca0c0e3c390e + - 44f1690f-abac-425d-bf1b-f35df62fe9e0 Original-Request: - - req_A3Kqh2uoftnAA1 + - req_jsVRUaisDiuk7a Request-Id: - - req_A3Kqh2uoftnAA1 + - req_jsVRUaisDiuk7a Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGZKuuB1fWySn2XgnNYuk", + "id": "pi_3ScfWAKuuB1fWySn2ZrkxcEh", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270527, + "created": 1765342850, "currency": "eur", - "customer": "cus_TMVHzXPFYiLlXQ", + "customer": "cus_TZpAQzi3OZiJyj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGZKuuB1fWySn2bKxqDni", + "latest_charge": "ch_3ScfWAKuuB1fWySn2VWChgSA", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGZKuuB1fWySnCEuwUHRK", + "payment_method": "pm_1ScfW9KuuB1fWySndNxaWSn4", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:30 GMT + recorded_at: Wed, 10 Dec 2025 05:01:23 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGZKuuB1fWySn2XgnNYuk + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWAKuuB1fWySn2ZrkxcEh body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_A3Kqh2uoftnAA1","request_duration_ms":1429}}' + - '{"last_request_metrics":{"request_id":"req_jsVRUaisDiuk7a","request_duration_ms":1496}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:30 GMT + - Wed, 10 Dec 2025 05:00:53 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_FLncA3W0eZj2Dc + - req_yt7qKeHK6WQoyT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGZKuuB1fWySn2XgnNYuk", + "id": "pi_3ScfWAKuuB1fWySn2ZrkxcEh", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270527, + "created": 1765342850, "currency": "eur", - "customer": "cus_TMVHzXPFYiLlXQ", + "customer": "cus_TZpAQzi3OZiJyj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGZKuuB1fWySn2bKxqDni", + "latest_charge": "ch_3ScfWAKuuB1fWySn2VWChgSA", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGZKuuB1fWySnCEuwUHRK", + "payment_method": "pm_1ScfW9KuuB1fWySndNxaWSn4", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:31 GMT + recorded_at: Wed, 10 Dec 2025 05:01:24 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml index da1b7b2701..98014bb827 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1oTssCZeEG1qt7","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_2WN48RMrUo5r8j","request_duration_ms":315}}' Idempotency-Key: - - cc62a2c7-1286-419c-98db-b90b55c13706 + - 8876532d-d0f5-4e11-9f46-3f097352bf36 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:25 GMT + - Wed, 10 Dec 2025 05:00:47 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - cc62a2c7-1286-419c-98db-b90b55c13706 + - 8876532d-d0f5-4e11-9f46-3f097352bf36 Original-Request: - - req_JmhURzkDE2IXQc + - req_rffxZ1EVDozHXu Request-Id: - - req_JmhURzkDE2IXQc + - req_rffxZ1EVDozHXu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHWXgfrH5Snm", + "id": "cus_TZpAvHwmZPexCm", "object": "customer", "address": null, "balance": 0, - "created": 1762270524, + "created": 1765342847, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "KHEGFNG8", + "invoice_prefix": "RUPB1LS3", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:25 GMT + recorded_at: Wed, 10 Dec 2025 05:01:17 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHWXgfrH5Snm&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAvHwmZPexCm&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_JmhURzkDE2IXQc","request_duration_ms":436}}' + - '{"last_request_metrics":{"request_id":"req_rffxZ1EVDozHXu","request_duration_ms":426}}' Idempotency-Key: - - 2e422ab5-d86c-4fbb-8c75-a111e311ed79 + - 1e373b76-61a5-471a-a070-59f41ccfc966 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:25 GMT + - Wed, 10 Dec 2025 05:00:47 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 2e422ab5-d86c-4fbb-8c75-a111e311ed79 + - 1e373b76-61a5-471a-a070-59f41ccfc966 Original-Request: - - req_LoOaNWoITqJwFw + - req_jKpwlWszQXp0lm Request-Id: - - req_LoOaNWoITqJwFw + - req_jKpwlWszQXp0lm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGXKuuB1fWySn0mumchlX", + "id": "pi_3ScfW7KuuB1fWySn0elaZjLl", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270525, + "created": 1765342847, "currency": "eur", - "customer": "cus_TMVHWXgfrH5Snm", + "customer": "cus_TZpAvHwmZPexCm", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGXKuuB1fWySnrI2nt7xF", + "payment_method": "pm_1ScfW7KuuB1fWySnrSdzxgss", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:25 GMT + recorded_at: Wed, 10 Dec 2025 05:01:18 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGXKuuB1fWySn0mumchlX/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW7KuuB1fWySn0elaZjLl/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_LoOaNWoITqJwFw","request_duration_ms":405}}' + - '{"last_request_metrics":{"request_id":"req_jKpwlWszQXp0lm","request_duration_ms":564}}' Idempotency-Key: - - 0ed28d38-88ad-4b6e-af97-5da4957a6e7e + - 8fa0bad5-edcb-4b51-abda-9f3ff662dd0c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:26 GMT + - Wed, 10 Dec 2025 05:00:48 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 0ed28d38-88ad-4b6e-af97-5da4957a6e7e + - 8fa0bad5-edcb-4b51-abda-9f3ff662dd0c Original-Request: - - req_2Kmt7F4b8cI4nk + - req_JlSI6IgSetN3zg Request-Id: - - req_2Kmt7F4b8cI4nk + - req_JlSI6IgSetN3zg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGXKuuB1fWySn0mumchlX", + "id": "pi_3ScfW7KuuB1fWySn0elaZjLl", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270525, + "created": 1765342847, "currency": "eur", - "customer": "cus_TMVHWXgfrH5Snm", + "customer": "cus_TZpAvHwmZPexCm", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGXKuuB1fWySn0Cb9B1OK", + "latest_charge": "ch_3ScfW7KuuB1fWySn0GE77Gno", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGXKuuB1fWySnrI2nt7xF", + "payment_method": "pm_1ScfW7KuuB1fWySnrSdzxgss", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:26 GMT + recorded_at: Wed, 10 Dec 2025 05:01:19 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGXKuuB1fWySn0mumchlX + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW7KuuB1fWySn0elaZjLl body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_2Kmt7F4b8cI4nk","request_duration_ms":919}}' + - '{"last_request_metrics":{"request_id":"req_JlSI6IgSetN3zg","request_duration_ms":930}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:27 GMT + - Wed, 10 Dec 2025 05:00:49 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ecipBFGS1o4tLN + - req_9iMQiS4zbaCNeT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGXKuuB1fWySn0mumchlX", + "id": "pi_3ScfW7KuuB1fWySn0elaZjLl", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270525, + "created": 1765342847, "currency": "eur", - "customer": "cus_TMVHWXgfrH5Snm", + "customer": "cus_TZpAvHwmZPexCm", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGXKuuB1fWySn0Cb9B1OK", + "latest_charge": "ch_3ScfW7KuuB1fWySn0GE77Gno", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGXKuuB1fWySnrI2nt7xF", + "payment_method": "pm_1ScfW7KuuB1fWySnrSdzxgss", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:27 GMT + recorded_at: Wed, 10 Dec 2025 05:01:19 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml index 6f1b0ae32d..3e7cc0b864 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ChKuJJkxrl04zA","request_duration_ms":342}}' + - '{"last_request_metrics":{"request_id":"req_W8iIii7Ag6HNNN","request_duration_ms":695}}' Idempotency-Key: - - 21ca9f5b-e5a4-4640-9a1e-abbdf523785b + - f3fdc536-7239-4955-9c0c-846c6f77d5f0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:40 GMT + - Wed, 10 Dec 2025 05:01:02 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 21ca9f5b-e5a4-4640-9a1e-abbdf523785b + - f3fdc536-7239-4955-9c0c-846c6f77d5f0 Original-Request: - - req_Q1UmehRLhlLWuR + - req_0xXOLXyjKIkRBR Request-Id: - - req_Q1UmehRLhlLWuR + - req_0xXOLXyjKIkRBR Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHqKMTgM1OrP", + "id": "cus_TZpAMNazlmB7xY", "object": "customer", "address": null, "balance": 0, - "created": 1762270540, + "created": 1765342862, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "OUEEUGMN", + "invoice_prefix": "LVBDWGXF", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:40 GMT + recorded_at: Wed, 10 Dec 2025 05:01:33 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHqKMTgM1OrP&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAMNazlmB7xY&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Q1UmehRLhlLWuR","request_duration_ms":544}}' + - '{"last_request_metrics":{"request_id":"req_0xXOLXyjKIkRBR","request_duration_ms":440}}' Idempotency-Key: - - ec75fe38-2f85-4d5b-9826-f95d5c03c2ff + - eaa8f43e-2738-43d2-ab6a-4604d817a6fd Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:41 GMT + - Wed, 10 Dec 2025 05:01:02 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ec75fe38-2f85-4d5b-9826-f95d5c03c2ff + - eaa8f43e-2738-43d2-ab6a-4604d817a6fd Original-Request: - - req_KmuwFTRxMjGsWS + - req_08k2lOVRM5Jd0J Request-Id: - - req_KmuwFTRxMjGsWS + - req_08k2lOVRM5Jd0J Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGnKuuB1fWySn0tWlJeSs", + "id": "pi_3ScfWMKuuB1fWySn1wVALxYz", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270541, + "created": 1765342862, "currency": "eur", - "customer": "cus_TMVHqKMTgM1OrP", + "customer": "cus_TZpAMNazlmB7xY", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGmKuuB1fWySnZzJTa0tf", + "payment_method": "pm_1ScfWMKuuB1fWySnkvwXzSJ0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:41 GMT + recorded_at: Wed, 10 Dec 2025 05:01:33 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGnKuuB1fWySn0tWlJeSs/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWMKuuB1fWySn1wVALxYz/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_KmuwFTRxMjGsWS","request_duration_ms":392}}' + - '{"last_request_metrics":{"request_id":"req_08k2lOVRM5Jd0J","request_duration_ms":458}}' Idempotency-Key: - - a30427e9-8eef-4cc0-bbc4-54057ad83ab8 + - ebc38a4b-1bd6-4d5e-8c3c-a819c17c3c22 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:41 GMT + - Wed, 10 Dec 2025 05:01:03 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a30427e9-8eef-4cc0-bbc4-54057ad83ab8 + - ebc38a4b-1bd6-4d5e-8c3c-a819c17c3c22 Original-Request: - - req_Ky7vDWgLO291he + - req_vyIb6Mx6qyS9ox Request-Id: - - req_Ky7vDWgLO291he + - req_vyIb6Mx6qyS9ox Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGnKuuB1fWySn0tWlJeSs", + "id": "pi_3ScfWMKuuB1fWySn1wVALxYz", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270541, + "created": 1765342862, "currency": "eur", - "customer": "cus_TMVHqKMTgM1OrP", + "customer": "cus_TZpAMNazlmB7xY", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGnKuuB1fWySn01k4EqNc", + "latest_charge": "ch_3ScfWMKuuB1fWySn1r8k9HfQ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGmKuuB1fWySnZzJTa0tf", + "payment_method": "pm_1ScfWMKuuB1fWySnkvwXzSJ0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:42 GMT + recorded_at: Wed, 10 Dec 2025 05:01:34 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGnKuuB1fWySn0tWlJeSs + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWMKuuB1fWySn1wVALxYz body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Ky7vDWgLO291he","request_duration_ms":831}}' + - '{"last_request_metrics":{"request_id":"req_vyIb6Mx6qyS9ox","request_duration_ms":923}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:42 GMT + - Wed, 10 Dec 2025 05:01:04 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ph6shFouXPFdMM + - req_YykqQATOgNLgGC Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGnKuuB1fWySn0tWlJeSs", + "id": "pi_3ScfWMKuuB1fWySn1wVALxYz", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270541, + "created": 1765342862, "currency": "eur", - "customer": "cus_TMVHqKMTgM1OrP", + "customer": "cus_TZpAMNazlmB7xY", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGnKuuB1fWySn01k4EqNc", + "latest_charge": "ch_3ScfWMKuuB1fWySn1r8k9HfQ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGmKuuB1fWySnZzJTa0tf", + "payment_method": "pm_1ScfWMKuuB1fWySnkvwXzSJ0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:42 GMT + recorded_at: Wed, 10 Dec 2025 05:01:34 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGnKuuB1fWySn0tWlJeSs/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWMKuuB1fWySn1wVALxYz/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ph6shFouXPFdMM","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_YykqQATOgNLgGC","request_duration_ms":318}}' Idempotency-Key: - - 7b6673a8-ed18-4627-93db-d5afba46f23a + - 91c289d4-1940-4e8f-aab6-c0ad93eca21f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:43 GMT + - Wed, 10 Dec 2025 05:01:05 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 7b6673a8-ed18-4627-93db-d5afba46f23a + - 91c289d4-1940-4e8f-aab6-c0ad93eca21f Original-Request: - - req_R5HEzJrT9yhqZH + - req_eBczzSpC7sYfos Request-Id: - - req_R5HEzJrT9yhqZH + - req_eBczzSpC7sYfos Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGnKuuB1fWySn0tWlJeSs", + "id": "pi_3ScfWMKuuB1fWySn1wVALxYz", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270541, + "created": 1765342862, "currency": "eur", - "customer": "cus_TMVHqKMTgM1OrP", + "customer": "cus_TZpAMNazlmB7xY", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGnKuuB1fWySn01k4EqNc", + "latest_charge": "ch_3ScfWMKuuB1fWySn1r8k9HfQ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGmKuuB1fWySnZzJTa0tf", + "payment_method": "pm_1ScfWMKuuB1fWySnkvwXzSJ0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:43 GMT + recorded_at: Wed, 10 Dec 2025 05:01:36 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGnKuuB1fWySn0tWlJeSs + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWMKuuB1fWySn1wVALxYz body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_R5HEzJrT9yhqZH","request_duration_ms":1329}}' + - '{"last_request_metrics":{"request_id":"req_eBczzSpC7sYfos","request_duration_ms":1262}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:43 GMT + - Wed, 10 Dec 2025 05:01:05 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_FGDems8LyG4Ol4 + - req_spPhMwznL90adD Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGnKuuB1fWySn0tWlJeSs", + "id": "pi_3ScfWMKuuB1fWySn1wVALxYz", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270541, + "created": 1765342862, "currency": "eur", - "customer": "cus_TMVHqKMTgM1OrP", + "customer": "cus_TZpAMNazlmB7xY", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGnKuuB1fWySn01k4EqNc", + "latest_charge": "ch_3ScfWMKuuB1fWySn1r8k9HfQ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGmKuuB1fWySnZzJTa0tf", + "payment_method": "pm_1ScfWMKuuB1fWySnkvwXzSJ0", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:44 GMT + recorded_at: Wed, 10 Dec 2025 05:01:36 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml index 9a87b95aa7..8ac16e2cd5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aPtrU8xolGmmbv","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_mqDc28RgZT5OwU","request_duration_ms":318}}' Idempotency-Key: - - 7a2029e4-c4a0-4d7d-8c77-aef53947eb1e + - 96c1f742-abc6-4f28-a99d-b13dbc20de08 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:37 GMT + - Wed, 10 Dec 2025 05:00:59 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 7a2029e4-c4a0-4d7d-8c77-aef53947eb1e + - 96c1f742-abc6-4f28-a99d-b13dbc20de08 Original-Request: - - req_A22IcHcax0pvkx + - req_WuYoF604VcgRx4 Request-Id: - - req_A22IcHcax0pvkx + - req_WuYoF604VcgRx4 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHjBpsd5PEEL", + "id": "cus_TZpAQ51spgWhWt", "object": "customer", "address": null, "balance": 0, - "created": 1762270537, + "created": 1765342859, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "T6NHV1TA", + "invoice_prefix": "LEQLTMEY", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:37 GMT + recorded_at: Wed, 10 Dec 2025 05:01:30 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHjBpsd5PEEL&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAQ51spgWhWt&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_A22IcHcax0pvkx","request_duration_ms":439}}' + - '{"last_request_metrics":{"request_id":"req_WuYoF604VcgRx4","request_duration_ms":412}}' Idempotency-Key: - - a2d8b147-d45c-43e3-9a8c-85bb08416958 + - 78788fb7-9d27-40f5-be9e-44a9455a0d23 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:38 GMT + - Wed, 10 Dec 2025 05:01:00 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a2d8b147-d45c-43e3-9a8c-85bb08416958 + - 78788fb7-9d27-40f5-be9e-44a9455a0d23 Original-Request: - - req_WoyhuA6MNxxix9 + - req_ywEZJ8IdtBfl4h Request-Id: - - req_WoyhuA6MNxxix9 + - req_ywEZJ8IdtBfl4h Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGkKuuB1fWySn2IwPSLcD", + "id": "pi_3ScfWKKuuB1fWySn2BRHgYTF", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270538, + "created": 1765342860, "currency": "eur", - "customer": "cus_TMVHjBpsd5PEEL", + "customer": "cus_TZpAQ51spgWhWt", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGjKuuB1fWySnMAaqVQbp", + "payment_method": "pm_1ScfWJKuuB1fWySnqNLJiiaJ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:38 GMT + recorded_at: Wed, 10 Dec 2025 05:01:30 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGkKuuB1fWySn2IwPSLcD/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWKKuuB1fWySn2BRHgYTF/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_WoyhuA6MNxxix9","request_duration_ms":612}}' + - '{"last_request_metrics":{"request_id":"req_ywEZJ8IdtBfl4h","request_duration_ms":463}}' Idempotency-Key: - - d6feb861-133d-4988-b9d7-d8229b055f19 + - ab408585-74b2-4bbf-9b04-33d65ec2d2d7 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:39 GMT + - Wed, 10 Dec 2025 05:01:01 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d6feb861-133d-4988-b9d7-d8229b055f19 + - ab408585-74b2-4bbf-9b04-33d65ec2d2d7 Original-Request: - - req_OuACUjci3iiq9v + - req_Z1ChouY4JIJh1V Request-Id: - - req_OuACUjci3iiq9v + - req_Z1ChouY4JIJh1V Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGkKuuB1fWySn2IwPSLcD", + "id": "pi_3ScfWKKuuB1fWySn2BRHgYTF", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270538, + "created": 1765342860, "currency": "eur", - "customer": "cus_TMVHjBpsd5PEEL", + "customer": "cus_TZpAQ51spgWhWt", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGkKuuB1fWySn2BACBmM4", + "latest_charge": "ch_3ScfWKKuuB1fWySn2vBgZd22", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGjKuuB1fWySnMAaqVQbp", + "payment_method": "pm_1ScfWJKuuB1fWySnqNLJiiaJ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:39 GMT + recorded_at: Wed, 10 Dec 2025 05:01:31 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGkKuuB1fWySn2IwPSLcD + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWKKuuB1fWySn2BRHgYTF body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OuACUjci3iiq9v","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_Z1ChouY4JIJh1V","request_duration_ms":982}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:40 GMT + - Wed, 10 Dec 2025 05:01:01 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ChKuJJkxrl04zA + - req_W8iIii7Ag6HNNN Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGkKuuB1fWySn2IwPSLcD", + "id": "pi_3ScfWKKuuB1fWySn2BRHgYTF", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270538, + "created": 1765342860, "currency": "eur", - "customer": "cus_TMVHjBpsd5PEEL", + "customer": "cus_TZpAQ51spgWhWt", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGkKuuB1fWySn2BACBmM4", + "latest_charge": "ch_3ScfWKKuuB1fWySn2vBgZd22", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGjKuuB1fWySnMAaqVQbp", + "payment_method": "pm_1ScfWJKuuB1fWySnqNLJiiaJ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:40 GMT + recorded_at: Wed, 10 Dec 2025 05:01:32 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml index 8aa9804f09..8791695c9e 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_NMgSNayxNWa5GB","request_duration_ms":332}}' + - '{"last_request_metrics":{"request_id":"req_hmjWXkhFwxGH05","request_duration_ms":320}}' Idempotency-Key: - - 6dc3a236-d4a8-4765-adfd-532a25e499e4 + - df41bd8e-ee35-4383-8d4d-557b53d201c6 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:34 GMT + - Wed, 10 Dec 2025 05:00:56 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6dc3a236-d4a8-4765-adfd-532a25e499e4 + - df41bd8e-ee35-4383-8d4d-557b53d201c6 Original-Request: - - req_MBdZQaNNDhkIA1 + - req_2roPsULLot86bf Request-Id: - - req_MBdZQaNNDhkIA1 + - req_2roPsULLot86bf Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHNiB2Hnbgd6", + "id": "cus_TZpAQGGdMJEnCg", "object": "customer", "address": null, "balance": 0, - "created": 1762270533, + "created": 1765342855, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "JCMTXI0T", + "invoice_prefix": "FGDF9JNG", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:34 GMT + recorded_at: Wed, 10 Dec 2025 05:01:26 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHNiB2Hnbgd6&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAQGGdMJEnCg&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MBdZQaNNDhkIA1","request_duration_ms":451}}' + - '{"last_request_metrics":{"request_id":"req_2roPsULLot86bf","request_duration_ms":449}}' Idempotency-Key: - - d031a32e-100e-4f3e-a0bb-d0bf40fedc88 + - 5306fe8d-967f-4820-850a-a58a4b1a704c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:34 GMT + - Wed, 10 Dec 2025 05:00:56 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d031a32e-100e-4f3e-a0bb-d0bf40fedc88 + - 5306fe8d-967f-4820-850a-a58a4b1a704c Original-Request: - - req_VDh7y6BN8Sm3HS + - req_enidlGOJCUswCP Request-Id: - - req_VDh7y6BN8Sm3HS + - req_enidlGOJCUswCP Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGgKuuB1fWySn1U9h7wrD", + "id": "pi_3ScfWGKuuB1fWySn0FDDmtXO", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270534, + "created": 1765342856, "currency": "eur", - "customer": "cus_TMVHNiB2Hnbgd6", + "customer": "cus_TZpAQGGdMJEnCg", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGgKuuB1fWySnId5TwG24", + "payment_method": "pm_1ScfWGKuuB1fWySnkPD8AAnr", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:34 GMT + recorded_at: Wed, 10 Dec 2025 05:01:27 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGgKuuB1fWySn1U9h7wrD/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWGKuuB1fWySn0FDDmtXO/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VDh7y6BN8Sm3HS","request_duration_ms":419}}' + - '{"last_request_metrics":{"request_id":"req_enidlGOJCUswCP","request_duration_ms":449}}' Idempotency-Key: - - c62e3f75-7444-4cc3-a8da-45361645b68c + - 98319817-6cb8-4e1b-9969-291737aa68f5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:35 GMT + - Wed, 10 Dec 2025 05:00:57 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c62e3f75-7444-4cc3-a8da-45361645b68c + - 98319817-6cb8-4e1b-9969-291737aa68f5 Original-Request: - - req_DXf8bwMEKuI8k0 + - req_8N31IhqZ95zeiB Request-Id: - - req_DXf8bwMEKuI8k0 + - req_8N31IhqZ95zeiB Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGgKuuB1fWySn1U9h7wrD", + "id": "pi_3ScfWGKuuB1fWySn0FDDmtXO", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270534, + "created": 1765342856, "currency": "eur", - "customer": "cus_TMVHNiB2Hnbgd6", + "customer": "cus_TZpAQGGdMJEnCg", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGgKuuB1fWySn1yoO46bT", + "latest_charge": "ch_3ScfWGKuuB1fWySn0BSzmO2x", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGgKuuB1fWySnId5TwG24", + "payment_method": "pm_1ScfWGKuuB1fWySnkPD8AAnr", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:35 GMT + recorded_at: Wed, 10 Dec 2025 05:01:28 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGgKuuB1fWySn1U9h7wrD + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWGKuuB1fWySn0FDDmtXO body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_DXf8bwMEKuI8k0","request_duration_ms":1008}}' + - '{"last_request_metrics":{"request_id":"req_8N31IhqZ95zeiB","request_duration_ms":879}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:35 GMT + - Wed, 10 Dec 2025 05:00:57 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_qLOORlThCl11ud + - req_25J6AnUK1LpFex Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGgKuuB1fWySn1U9h7wrD", + "id": "pi_3ScfWGKuuB1fWySn0FDDmtXO", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270534, + "created": 1765342856, "currency": "eur", - "customer": "cus_TMVHNiB2Hnbgd6", + "customer": "cus_TZpAQGGdMJEnCg", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGgKuuB1fWySn1yoO46bT", + "latest_charge": "ch_3ScfWGKuuB1fWySn0BSzmO2x", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGgKuuB1fWySnId5TwG24", + "payment_method": "pm_1ScfWGKuuB1fWySnkPD8AAnr", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:35 GMT + recorded_at: Wed, 10 Dec 2025 05:01:28 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGgKuuB1fWySn1U9h7wrD/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWGKuuB1fWySn0FDDmtXO/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_qLOORlThCl11ud","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_25J6AnUK1LpFex","request_duration_ms":331}}' Idempotency-Key: - - 4842d3f2-8921-4ca6-9bf0-5bf30fb6f645 + - 635d70cc-d1a2-4e02-8b7f-86b84f243b4c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:36 GMT + - Wed, 10 Dec 2025 05:00:58 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4842d3f2-8921-4ca6-9bf0-5bf30fb6f645 + - 635d70cc-d1a2-4e02-8b7f-86b84f243b4c Original-Request: - - req_BIKJ5nR5pCMwIB + - req_9PrlhjOLSjBqIz Request-Id: - - req_BIKJ5nR5pCMwIB + - req_9PrlhjOLSjBqIz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGgKuuB1fWySn1U9h7wrD", + "id": "pi_3ScfWGKuuB1fWySn0FDDmtXO", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270534, + "created": 1765342856, "currency": "eur", - "customer": "cus_TMVHNiB2Hnbgd6", + "customer": "cus_TZpAQGGdMJEnCg", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGgKuuB1fWySn1yoO46bT", + "latest_charge": "ch_3ScfWGKuuB1fWySn0BSzmO2x", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGgKuuB1fWySnId5TwG24", + "payment_method": "pm_1ScfWGKuuB1fWySnkPD8AAnr", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:37 GMT + recorded_at: Wed, 10 Dec 2025 05:01:29 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGgKuuB1fWySn1U9h7wrD + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWGKuuB1fWySn0FDDmtXO body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BIKJ5nR5pCMwIB","request_duration_ms":1019}}' + - '{"last_request_metrics":{"request_id":"req_9PrlhjOLSjBqIz","request_duration_ms":1101}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:37 GMT + - Wed, 10 Dec 2025 05:00:59 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_aPtrU8xolGmmbv + - req_mqDc28RgZT5OwU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGgKuuB1fWySn1U9h7wrD", + "id": "pi_3ScfWGKuuB1fWySn0FDDmtXO", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270534, + "created": 1765342856, "currency": "eur", - "customer": "cus_TMVHNiB2Hnbgd6", + "customer": "cus_TZpAQGGdMJEnCg", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGgKuuB1fWySn1yoO46bT", + "latest_charge": "ch_3ScfWGKuuB1fWySn0BSzmO2x", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGgKuuB1fWySnId5TwG24", + "payment_method": "pm_1ScfWGKuuB1fWySnkPD8AAnr", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:37 GMT + recorded_at: Wed, 10 Dec 2025 05:01:29 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml index 21458b2fdf..5e14ccca62 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_FLncA3W0eZj2Dc","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_yt7qKeHK6WQoyT","request_duration_ms":325}}' Idempotency-Key: - - 5f4d00bb-9b64-4c74-9c37-9512fd86982f + - c6822927-84df-42f1-b4d4-9b9d45e3599e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:31 GMT + - Wed, 10 Dec 2025 05:00:53 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5f4d00bb-9b64-4c74-9c37-9512fd86982f + - c6822927-84df-42f1-b4d4-9b9d45e3599e Original-Request: - - req_J3E1hg8sY0k3ff + - req_H2HJk1i9JyAkvz Request-Id: - - req_J3E1hg8sY0k3ff + - req_H2HJk1i9JyAkvz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHFSiXvMgJ59", + "id": "cus_TZpAVuTQmgCaPp", "object": "customer", "address": null, "balance": 0, - "created": 1762270531, + "created": 1765342853, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "PPCSMOP6", + "invoice_prefix": "KYTZC5LQ", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:31 GMT + recorded_at: Wed, 10 Dec 2025 05:01:24 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHFSiXvMgJ59&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAVuTQmgCaPp&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_J3E1hg8sY0k3ff","request_duration_ms":347}}' + - '{"last_request_metrics":{"request_id":"req_H2HJk1i9JyAkvz","request_duration_ms":475}}' Idempotency-Key: - - 77166bcb-a13a-4b79-9143-95bb63280ebb + - fdbf2f36-bb03-4c40-93ce-1e9aefe3ad32 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:31 GMT + - Wed, 10 Dec 2025 05:00:54 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 77166bcb-a13a-4b79-9143-95bb63280ebb + - fdbf2f36-bb03-4c40-93ce-1e9aefe3ad32 Original-Request: - - req_xtCFyPVf9rjZJO + - req_3XksJvJaux6FfG Request-Id: - - req_xtCFyPVf9rjZJO + - req_3XksJvJaux6FfG Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGdKuuB1fWySn2rew1hj7", + "id": "pi_3ScfWEKuuB1fWySn2FSFwqrm", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270531, + "created": 1765342854, "currency": "eur", - "customer": "cus_TMVHFSiXvMgJ59", + "customer": "cus_TZpAVuTQmgCaPp", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGdKuuB1fWySnEnQTP0uL", + "payment_method": "pm_1ScfWEKuuB1fWySn6E2Tz3gq", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:31 GMT + recorded_at: Wed, 10 Dec 2025 05:01:24 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGdKuuB1fWySn2rew1hj7/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWEKuuB1fWySn2FSFwqrm/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_xtCFyPVf9rjZJO","request_duration_ms":498}}' + - '{"last_request_metrics":{"request_id":"req_3XksJvJaux6FfG","request_duration_ms":482}}' Idempotency-Key: - - f06ccc5a-067f-4ab8-ae5b-ee47e62b30ed + - f4e1624a-c555-419c-b4b0-a524c0a16869 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:32 GMT + - Wed, 10 Dec 2025 05:00:55 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f06ccc5a-067f-4ab8-ae5b-ee47e62b30ed + - f4e1624a-c555-419c-b4b0-a524c0a16869 Original-Request: - - req_XthzF3y6urDSok + - req_BPDPjc6AtYdiDg Request-Id: - - req_XthzF3y6urDSok + - req_BPDPjc6AtYdiDg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGdKuuB1fWySn2rew1hj7", + "id": "pi_3ScfWEKuuB1fWySn2FSFwqrm", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270531, + "created": 1765342854, "currency": "eur", - "customer": "cus_TMVHFSiXvMgJ59", + "customer": "cus_TZpAVuTQmgCaPp", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGdKuuB1fWySn2KncQjbd", + "latest_charge": "ch_3ScfWEKuuB1fWySn2ALrQrb5", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGdKuuB1fWySnEnQTP0uL", + "payment_method": "pm_1ScfWEKuuB1fWySn6E2Tz3gq", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:32 GMT + recorded_at: Wed, 10 Dec 2025 05:01:25 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGdKuuB1fWySn2rew1hj7 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWEKuuB1fWySn2FSFwqrm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XthzF3y6urDSok","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_BPDPjc6AtYdiDg","request_duration_ms":950}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:33 GMT + - Wed, 10 Dec 2025 05:00:55 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_NMgSNayxNWa5GB + - req_hmjWXkhFwxGH05 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGdKuuB1fWySn2rew1hj7", + "id": "pi_3ScfWEKuuB1fWySn2FSFwqrm", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270531, + "created": 1765342854, "currency": "eur", - "customer": "cus_TMVHFSiXvMgJ59", + "customer": "cus_TZpAVuTQmgCaPp", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGdKuuB1fWySn2KncQjbd", + "latest_charge": "ch_3ScfWEKuuB1fWySn2ALrQrb5", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGdKuuB1fWySnEnQTP0uL", + "payment_method": "pm_1ScfWEKuuB1fWySn6E2Tz3gq", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:33 GMT + recorded_at: Wed, 10 Dec 2025 05:01:26 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml index 0a4b3c1eac..5f2b30f4d6 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_LYlV1AAy5snbfV","request_duration_ms":308}}' + - '{"last_request_metrics":{"request_id":"req_0wF0DGFdEHGyQH","request_duration_ms":316}}' Idempotency-Key: - - f27ff8e7-3a64-4a54-9e9b-ec91a3f5f248 + - 4f5344fb-65f2-488c-acbe-34e928663486 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:47 GMT + - Wed, 10 Dec 2025 05:01:08 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f27ff8e7-3a64-4a54-9e9b-ec91a3f5f248 + - 4f5344fb-65f2-488c-acbe-34e928663486 Original-Request: - - req_F2HHZLEo0cVUJP + - req_QMJNFqvTELrZWG Request-Id: - - req_F2HHZLEo0cVUJP + - req_QMJNFqvTELrZWG Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHwdjpHCG5LC", + "id": "cus_TZpAcSQ80ASOuP", "object": "customer", "address": null, "balance": 0, - "created": 1762270546, + "created": 1765342868, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "NLARKOXW", + "invoice_prefix": "U1JUJJWM", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:47 GMT + recorded_at: Wed, 10 Dec 2025 05:01:39 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHwdjpHCG5LC&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAcSQ80ASOuP&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_F2HHZLEo0cVUJP","request_duration_ms":437}}' + - '{"last_request_metrics":{"request_id":"req_QMJNFqvTELrZWG","request_duration_ms":415}}' Idempotency-Key: - - da264e7c-362c-486b-abdd-1f1c369dff0f + - ec9d3274-2660-4040-8cdd-75cd05bc39fb Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:47 GMT + - Wed, 10 Dec 2025 05:01:09 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - da264e7c-362c-486b-abdd-1f1c369dff0f + - ec9d3274-2660-4040-8cdd-75cd05bc39fb Original-Request: - - req_1L2lUnJ3q9WWyN + - req_PE5sGATRIj25vG Request-Id: - - req_1L2lUnJ3q9WWyN + - req_PE5sGATRIj25vG Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGtKuuB1fWySn29CD8nm1", + "id": "pi_3ScfWTKuuB1fWySn2XubxSys", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270547, + "created": 1765342869, "currency": "eur", - "customer": "cus_TMVHwdjpHCG5LC", + "customer": "cus_TZpAcSQ80ASOuP", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGtKuuB1fWySnI1lIyFVR", + "payment_method": "pm_1ScfWSKuuB1fWySncUTOAYNN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:47 GMT + recorded_at: Wed, 10 Dec 2025 05:01:39 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGtKuuB1fWySn29CD8nm1/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWTKuuB1fWySn2XubxSys/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1L2lUnJ3q9WWyN","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_PE5sGATRIj25vG","request_duration_ms":474}}' Idempotency-Key: - - 88dda906-410d-44ef-93c3-e19fdfae4979 + - b82bdfd3-e6df-4924-9ec4-21aa9726ce3c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:48 GMT + - Wed, 10 Dec 2025 05:01:10 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 88dda906-410d-44ef-93c3-e19fdfae4979 + - b82bdfd3-e6df-4924-9ec4-21aa9726ce3c Original-Request: - - req_K2QAWYaTZCLUbA + - req_Wgo3HGacpiKsMO Request-Id: - - req_K2QAWYaTZCLUbA + - req_Wgo3HGacpiKsMO Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGtKuuB1fWySn29CD8nm1", + "id": "pi_3ScfWTKuuB1fWySn2XubxSys", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270547, + "created": 1765342869, "currency": "eur", - "customer": "cus_TMVHwdjpHCG5LC", + "customer": "cus_TZpAcSQ80ASOuP", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGtKuuB1fWySn2m5ToSUf", + "latest_charge": "ch_3ScfWTKuuB1fWySn2ta5wj0q", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGtKuuB1fWySnI1lIyFVR", + "payment_method": "pm_1ScfWSKuuB1fWySncUTOAYNN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:48 GMT + recorded_at: Wed, 10 Dec 2025 05:01:40 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGtKuuB1fWySn29CD8nm1 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWTKuuB1fWySn2XubxSys body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_K2QAWYaTZCLUbA","request_duration_ms":917}}' + - '{"last_request_metrics":{"request_id":"req_Wgo3HGacpiKsMO","request_duration_ms":959}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:48 GMT + - Wed, 10 Dec 2025 05:01:10 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_VgbsOEXH6As9ba + - req_MKSN6cTtFzGHzr Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGtKuuB1fWySn29CD8nm1", + "id": "pi_3ScfWTKuuB1fWySn2XubxSys", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270547, + "created": 1765342869, "currency": "eur", - "customer": "cus_TMVHwdjpHCG5LC", + "customer": "cus_TZpAcSQ80ASOuP", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGtKuuB1fWySn2m5ToSUf", + "latest_charge": "ch_3ScfWTKuuB1fWySn2ta5wj0q", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGtKuuB1fWySnI1lIyFVR", + "payment_method": "pm_1ScfWSKuuB1fWySncUTOAYNN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:48 GMT + recorded_at: Wed, 10 Dec 2025 05:01:41 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGtKuuB1fWySn29CD8nm1/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWTKuuB1fWySn2XubxSys/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VgbsOEXH6As9ba","request_duration_ms":253}}' + - '{"last_request_metrics":{"request_id":"req_MKSN6cTtFzGHzr","request_duration_ms":322}}' Idempotency-Key: - - 629423fe-81fb-4e8e-906c-3c672bbcb12f + - c6fc2983-7eae-4369-bcda-65712f08089a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:50 GMT + - Wed, 10 Dec 2025 05:01:11 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 629423fe-81fb-4e8e-906c-3c672bbcb12f + - c6fc2983-7eae-4369-bcda-65712f08089a Original-Request: - - req_MkneodHH3GjtMl + - req_aObqqyJLz9k59W Request-Id: - - req_MkneodHH3GjtMl + - req_aObqqyJLz9k59W Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGtKuuB1fWySn29CD8nm1", + "id": "pi_3ScfWTKuuB1fWySn2XubxSys", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270547, + "created": 1765342869, "currency": "eur", - "customer": "cus_TMVHwdjpHCG5LC", + "customer": "cus_TZpAcSQ80ASOuP", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGtKuuB1fWySn2m5ToSUf", + "latest_charge": "ch_3ScfWTKuuB1fWySn2ta5wj0q", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGtKuuB1fWySnI1lIyFVR", + "payment_method": "pm_1ScfWSKuuB1fWySncUTOAYNN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:50 GMT + recorded_at: Wed, 10 Dec 2025 05:01:42 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGtKuuB1fWySn29CD8nm1 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWTKuuB1fWySn2XubxSys body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MkneodHH3GjtMl","request_duration_ms":1376}}' + - '{"last_request_metrics":{"request_id":"req_aObqqyJLz9k59W","request_duration_ms":1150}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:50 GMT + - Wed, 10 Dec 2025 05:01:11 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_MHeimaQFsntvdY + - req_NIiVT916uyrPb2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGtKuuB1fWySn29CD8nm1", + "id": "pi_3ScfWTKuuB1fWySn2XubxSys", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270547, + "created": 1765342869, "currency": "eur", - "customer": "cus_TMVHwdjpHCG5LC", + "customer": "cus_TZpAcSQ80ASOuP", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGtKuuB1fWySn2m5ToSUf", + "latest_charge": "ch_3ScfWTKuuB1fWySn2ta5wj0q", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGtKuuB1fWySnI1lIyFVR", + "payment_method": "pm_1ScfWSKuuB1fWySncUTOAYNN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:50 GMT + recorded_at: Wed, 10 Dec 2025 05:01:42 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml index dd94ae0e4f..c90d6f7793 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_FGDems8LyG4Ol4","request_duration_ms":404}}' + - '{"last_request_metrics":{"request_id":"req_spPhMwznL90adD","request_duration_ms":327}}' Idempotency-Key: - - 3e3d7644-b1e4-44be-82ed-99fa5b77382e + - 623fadba-8eaa-450f-a18b-a6e6e824c967 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:44 GMT + - Wed, 10 Dec 2025 05:01:06 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3e3d7644-b1e4-44be-82ed-99fa5b77382e + - 623fadba-8eaa-450f-a18b-a6e6e824c967 Original-Request: - - req_r5oLG187xt1OtV + - req_zcHuCDMrRSV2JE Request-Id: - - req_r5oLG187xt1OtV + - req_zcHuCDMrRSV2JE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVH8G7HFZp72P", + "id": "cus_TZpAUM81uypZgw", "object": "customer", "address": null, "balance": 0, - "created": 1762270544, + "created": 1765342865, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "3ZGNY9WE", + "invoice_prefix": "0ERVDWDM", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:44 GMT + recorded_at: Wed, 10 Dec 2025 05:01:36 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVH8G7HFZp72P&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAUM81uypZgw&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_r5oLG187xt1OtV","request_duration_ms":438}}' + - '{"last_request_metrics":{"request_id":"req_zcHuCDMrRSV2JE","request_duration_ms":446}}' Idempotency-Key: - - fe38d5d4-068f-4245-a85c-15fef2413c3a + - 275431c7-34cc-4d78-b918-35953880aa31 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:44 GMT + - Wed, 10 Dec 2025 05:01:06 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - fe38d5d4-068f-4245-a85c-15fef2413c3a + - 275431c7-34cc-4d78-b918-35953880aa31 Original-Request: - - req_giqLC8p8FfCjIo + - req_GBxB9T6wVrwbh2 Request-Id: - - req_giqLC8p8FfCjIo + - req_GBxB9T6wVrwbh2 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGqKuuB1fWySn2ayu62xN", + "id": "pi_3ScfWQKuuB1fWySn11DxpKkr", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270544, + "created": 1765342866, "currency": "eur", - "customer": "cus_TMVH8G7HFZp72P", + "customer": "cus_TZpAUM81uypZgw", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGqKuuB1fWySnQO0W8sjG", + "payment_method": "pm_1ScfWQKuuB1fWySnlTO8Apch", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:44 GMT + recorded_at: Wed, 10 Dec 2025 05:01:37 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGqKuuB1fWySn2ayu62xN/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWQKuuB1fWySn11DxpKkr/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_giqLC8p8FfCjIo","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_GBxB9T6wVrwbh2","request_duration_ms":467}}' Idempotency-Key: - - 94b59576-7ee3-4d17-834f-fecb0b502dca + - eac72e7e-c008-4f54-9c36-74aca68ede36 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:45 GMT + - Wed, 10 Dec 2025 05:01:07 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 94b59576-7ee3-4d17-834f-fecb0b502dca + - eac72e7e-c008-4f54-9c36-74aca68ede36 Original-Request: - - req_rdCTLOgezHht1C + - req_jHGSBTV7i7YGWu Request-Id: - - req_rdCTLOgezHht1C + - req_jHGSBTV7i7YGWu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGqKuuB1fWySn2ayu62xN", + "id": "pi_3ScfWQKuuB1fWySn11DxpKkr", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270544, + "created": 1765342866, "currency": "eur", - "customer": "cus_TMVH8G7HFZp72P", + "customer": "cus_TZpAUM81uypZgw", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGqKuuB1fWySn22UV6iVG", + "latest_charge": "ch_3ScfWQKuuB1fWySn147kYUaV", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGqKuuB1fWySnQO0W8sjG", + "payment_method": "pm_1ScfWQKuuB1fWySnlTO8Apch", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:45 GMT + recorded_at: Wed, 10 Dec 2025 05:01:38 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGqKuuB1fWySn2ayu62xN + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWQKuuB1fWySn11DxpKkr body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_rdCTLOgezHht1C","request_duration_ms":796}}' + - '{"last_request_metrics":{"request_id":"req_jHGSBTV7i7YGWu","request_duration_ms":1218}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:46 GMT + - Wed, 10 Dec 2025 05:01:08 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_LYlV1AAy5snbfV + - req_0wF0DGFdEHGyQH Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGqKuuB1fWySn2ayu62xN", + "id": "pi_3ScfWQKuuB1fWySn11DxpKkr", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270544, + "created": 1765342866, "currency": "eur", - "customer": "cus_TMVH8G7HFZp72P", + "customer": "cus_TZpAUM81uypZgw", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGqKuuB1fWySn22UV6iVG", + "latest_charge": "ch_3ScfWQKuuB1fWySn147kYUaV", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGqKuuB1fWySnQO0W8sjG", + "payment_method": "pm_1ScfWQKuuB1fWySnlTO8Apch", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:46 GMT + recorded_at: Wed, 10 Dec 2025 05:01:38 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml index 0107930495..aff4bdeb68 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ttwFAUobUbUrxJ","request_duration_ms":392}}' + - '{"last_request_metrics":{"request_id":"req_gcITBF5qh1EGuz","request_duration_ms":341}}' Idempotency-Key: - - eb9d98f5-fab6-4c5c-a6d6-93da25acd8b5 + - 50d59b84-772c-4f60-b9d9-886952c71fe5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:07 GMT + - Wed, 10 Dec 2025 05:00:30 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - eb9d98f5-fab6-4c5c-a6d6-93da25acd8b5 + - 50d59b84-772c-4f60-b9d9-886952c71fe5 Original-Request: - - req_pZrjswqm5vMi6L + - req_FCfCDdI7URHMI5 Request-Id: - - req_pZrjswqm5vMi6L + - req_FCfCDdI7URHMI5 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGMMQSufQQRi", + "id": "cus_TZpATFNtaD3HSX", "object": "customer", "address": null, "balance": 0, - "created": 1762270507, + "created": 1765342830, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "XLESOL6P", + "invoice_prefix": "OGVCYXUC", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:07 GMT + recorded_at: Wed, 10 Dec 2025 05:01:01 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGMMQSufQQRi&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpATFNtaD3HSX&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_pZrjswqm5vMi6L","request_duration_ms":448}}' + - '{"last_request_metrics":{"request_id":"req_FCfCDdI7URHMI5","request_duration_ms":445}}' Idempotency-Key: - - 5888c230-1646-4b21-9f75-19129e6648a4 + - 76002ce6-73e1-4914-ad53-a3de9874f43e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:08 GMT + - Wed, 10 Dec 2025 05:00:30 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5888c230-1646-4b21-9f75-19129e6648a4 + - 76002ce6-73e1-4914-ad53-a3de9874f43e Original-Request: - - req_yom4O6IjurmiDe + - req_j771djBZ4vy2ga Request-Id: - - req_yom4O6IjurmiDe + - req_j771djBZ4vy2ga Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGGKuuB1fWySn0TZv1OMS", + "id": "pi_3ScfVqKuuB1fWySn03jySp6E", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270508, + "created": 1765342830, "currency": "eur", - "customer": "cus_TMVGMMQSufQQRi", + "customer": "cus_TZpATFNtaD3HSX", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGFKuuB1fWySnNV4C10PU", + "payment_method": "pm_1ScfVqKuuB1fWySnwQzzDzsF", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:08 GMT + recorded_at: Wed, 10 Dec 2025 05:01:01 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGGKuuB1fWySn0TZv1OMS/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVqKuuB1fWySn03jySp6E/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_yom4O6IjurmiDe","request_duration_ms":612}}' + - '{"last_request_metrics":{"request_id":"req_j771djBZ4vy2ga","request_duration_ms":479}}' Idempotency-Key: - - 0a070ef8-58c8-4d56-b1c7-7a98b63d7705 + - 5a842e6b-deb0-4d7d-afdf-1b6f02478da2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:09 GMT + - Wed, 10 Dec 2025 05:00:31 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 0a070ef8-58c8-4d56-b1c7-7a98b63d7705 + - 5a842e6b-deb0-4d7d-afdf-1b6f02478da2 Original-Request: - - req_SkY8Kl5LWbiPzN + - req_qytgRfb1MnHoSh Request-Id: - - req_SkY8Kl5LWbiPzN + - req_qytgRfb1MnHoSh Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGGKuuB1fWySn0TZv1OMS", + "id": "pi_3ScfVqKuuB1fWySn03jySp6E", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270508, + "created": 1765342830, "currency": "eur", - "customer": "cus_TMVGMMQSufQQRi", + "customer": "cus_TZpATFNtaD3HSX", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGGKuuB1fWySn0RASVhLe", + "latest_charge": "ch_3ScfVqKuuB1fWySn0zLwWQQw", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGFKuuB1fWySnNV4C10PU", + "payment_method": "pm_1ScfVqKuuB1fWySnwQzzDzsF", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:09 GMT + recorded_at: Wed, 10 Dec 2025 05:01:02 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGGKuuB1fWySn0TZv1OMS + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVqKuuB1fWySn03jySp6E body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_SkY8Kl5LWbiPzN","request_duration_ms":1121}}' + - '{"last_request_metrics":{"request_id":"req_qytgRfb1MnHoSh","request_duration_ms":999}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:09 GMT + - Wed, 10 Dec 2025 05:00:32 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_gr7IYtRm0gndva + - req_qNBiozphu2oIda Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGGKuuB1fWySn0TZv1OMS", + "id": "pi_3ScfVqKuuB1fWySn03jySp6E", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270508, + "created": 1765342830, "currency": "eur", - "customer": "cus_TMVGMMQSufQQRi", + "customer": "cus_TZpATFNtaD3HSX", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGGKuuB1fWySn0RASVhLe", + "latest_charge": "ch_3ScfVqKuuB1fWySn0zLwWQQw", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGFKuuB1fWySnNV4C10PU", + "payment_method": "pm_1ScfVqKuuB1fWySnwQzzDzsF", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:09 GMT + recorded_at: Wed, 10 Dec 2025 05:01:02 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGGKuuB1fWySn0TZv1OMS/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVqKuuB1fWySn03jySp6E/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_gr7IYtRm0gndva","request_duration_ms":406}}' + - '{"last_request_metrics":{"request_id":"req_qNBiozphu2oIda","request_duration_ms":328}}' Idempotency-Key: - - a9f38239-1065-4af0-ae1e-c1c6be9c222d + - 74bfb5b4-a5f8-49a8-9206-03a10287ae87 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:10 GMT + - Wed, 10 Dec 2025 05:00:33 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a9f38239-1065-4af0-ae1e-c1c6be9c222d + - 74bfb5b4-a5f8-49a8-9206-03a10287ae87 Original-Request: - - req_qc4M18rr5X8KlF + - req_45voIEqcICEbs9 Request-Id: - - req_qc4M18rr5X8KlF + - req_45voIEqcICEbs9 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGGKuuB1fWySn0TZv1OMS", + "id": "pi_3ScfVqKuuB1fWySn03jySp6E", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270508, + "created": 1765342830, "currency": "eur", - "customer": "cus_TMVGMMQSufQQRi", + "customer": "cus_TZpATFNtaD3HSX", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGGKuuB1fWySn0RASVhLe", + "latest_charge": "ch_3ScfVqKuuB1fWySn0zLwWQQw", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGFKuuB1fWySnNV4C10PU", + "payment_method": "pm_1ScfVqKuuB1fWySnwQzzDzsF", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:11 GMT + recorded_at: Wed, 10 Dec 2025 05:01:04 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGGKuuB1fWySn0TZv1OMS + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVqKuuB1fWySn03jySp6E body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_qc4M18rr5X8KlF","request_duration_ms":1122}}' + - '{"last_request_metrics":{"request_id":"req_45voIEqcICEbs9","request_duration_ms":1558}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:11 GMT + - Wed, 10 Dec 2025 05:00:34 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_501WF7lJ5o7rT1 + - req_hpj9Bf2CLrDQgR Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGGKuuB1fWySn0TZv1OMS", + "id": "pi_3ScfVqKuuB1fWySn03jySp6E", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270508, + "created": 1765342830, "currency": "eur", - "customer": "cus_TMVGMMQSufQQRi", + "customer": "cus_TZpATFNtaD3HSX", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGGKuuB1fWySn0RASVhLe", + "latest_charge": "ch_3ScfVqKuuB1fWySn0zLwWQQw", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGFKuuB1fWySnNV4C10PU", + "payment_method": "pm_1ScfVqKuuB1fWySnwQzzDzsF", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:11 GMT + recorded_at: Wed, 10 Dec 2025 05:01:05 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml index 0697eeb6bd..2f3c5f507e 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ijlqRdHi6jPS7T","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_7Ez5Jnev856LUE","request_duration_ms":314}}' Idempotency-Key: - - eec320ec-2814-46f1-bb7a-590ab7db61d5 + - 0e2c1c94-21bf-49bc-bd5e-e98b216e2cf6 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:05 GMT + - Wed, 10 Dec 2025 05:00:28 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - eec320ec-2814-46f1-bb7a-590ab7db61d5 + - 0e2c1c94-21bf-49bc-bd5e-e98b216e2cf6 Original-Request: - - req_mds2ODW2bAI8SM + - req_DveGY9T356ZV10 Request-Id: - - req_mds2ODW2bAI8SM + - req_DveGY9T356ZV10 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVG7siFajtvsd", + "id": "cus_TZpAVX77NER4ix", "object": "customer", "address": null, "balance": 0, - "created": 1762270505, + "created": 1765342827, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "HQSZBSTZ", + "invoice_prefix": "4DNCTT9X", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:05 GMT + recorded_at: Wed, 10 Dec 2025 05:00:58 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVG7siFajtvsd&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAVX77NER4ix&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mds2ODW2bAI8SM","request_duration_ms":376}}' + - '{"last_request_metrics":{"request_id":"req_DveGY9T356ZV10","request_duration_ms":441}}' Idempotency-Key: - - 786765e6-6ad1-4425-b917-a10a686fb85a + - 3bb13027-eb2d-4732-992c-cff715ca7c42 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:05 GMT + - Wed, 10 Dec 2025 05:00:28 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 786765e6-6ad1-4425-b917-a10a686fb85a + - 3bb13027-eb2d-4732-992c-cff715ca7c42 Original-Request: - - req_5c4c56cpEHVAXn + - req_O0SmRQhmfE7R5q Request-Id: - - req_5c4c56cpEHVAXn + - req_O0SmRQhmfE7R5q Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGDKuuB1fWySn2ELr7qAB", + "id": "pi_3ScfVoKuuB1fWySn2QcfrsdY", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270505, + "created": 1765342828, "currency": "eur", - "customer": "cus_TMVG7siFajtvsd", + "customer": "cus_TZpAVX77NER4ix", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGDKuuB1fWySnGH1lFg2I", + "payment_method": "pm_1ScfVoKuuB1fWySnMwr1fI8R", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:05 GMT + recorded_at: Wed, 10 Dec 2025 05:00:59 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGDKuuB1fWySn2ELr7qAB/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVoKuuB1fWySn2QcfrsdY/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_5c4c56cpEHVAXn","request_duration_ms":464}}' + - '{"last_request_metrics":{"request_id":"req_O0SmRQhmfE7R5q","request_duration_ms":441}}' Idempotency-Key: - - 6ad1f933-16e9-4c70-9c3d-7e6108638c1c + - 2ef8d091-f007-4100-986f-3d84dd776825 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:06 GMT + - Wed, 10 Dec 2025 05:00:29 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6ad1f933-16e9-4c70-9c3d-7e6108638c1c + - 2ef8d091-f007-4100-986f-3d84dd776825 Original-Request: - - req_XLetpZmkmRtukw + - req_YXm3a75V0iWyi1 Request-Id: - - req_XLetpZmkmRtukw + - req_YXm3a75V0iWyi1 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGDKuuB1fWySn2ELr7qAB", + "id": "pi_3ScfVoKuuB1fWySn2QcfrsdY", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270505, + "created": 1765342828, "currency": "eur", - "customer": "cus_TMVG7siFajtvsd", + "customer": "cus_TZpAVX77NER4ix", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGDKuuB1fWySn2O9J7wqP", + "latest_charge": "ch_3ScfVoKuuB1fWySn2W4SaaI7", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGDKuuB1fWySnGH1lFg2I", + "payment_method": "pm_1ScfVoKuuB1fWySnMwr1fI8R", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:06 GMT + recorded_at: Wed, 10 Dec 2025 05:01:00 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGDKuuB1fWySn2ELr7qAB + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVoKuuB1fWySn2QcfrsdY body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XLetpZmkmRtukw","request_duration_ms":817}}' + - '{"last_request_metrics":{"request_id":"req_YXm3a75V0iWyi1","request_duration_ms":956}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:07 GMT + - Wed, 10 Dec 2025 05:00:29 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ttwFAUobUbUrxJ + - req_gcITBF5qh1EGuz Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGDKuuB1fWySn2ELr7qAB", + "id": "pi_3ScfVoKuuB1fWySn2QcfrsdY", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270505, + "created": 1765342828, "currency": "eur", - "customer": "cus_TMVG7siFajtvsd", + "customer": "cus_TZpAVX77NER4ix", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGDKuuB1fWySn2O9J7wqP", + "latest_charge": "ch_3ScfVoKuuB1fWySn2W4SaaI7", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGDKuuB1fWySnGH1lFg2I", + "payment_method": "pm_1ScfVoKuuB1fWySnMwr1fI8R", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:07 GMT + recorded_at: Wed, 10 Dec 2025 05:01:00 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml index f6ea7d6fce..1bc9c90e4f 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_yzJn5U6MvzJaV2","request_duration_ms":249}}' + - '{"last_request_metrics":{"request_id":"req_8uo1Xo1XpSUmdh","request_duration_ms":311}}' Idempotency-Key: - - c1a5f3d8-e101-457c-ad69-afd5ef97d7a8 + - f0e03b34-3056-45e7-bf70-07d40feb4906 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:14 GMT + - Wed, 10 Dec 2025 05:00:37 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c1a5f3d8-e101-457c-ad69-afd5ef97d7a8 + - f0e03b34-3056-45e7-bf70-07d40feb4906 Original-Request: - - req_XTLp9N4f1MJbz4 + - req_pwOC6R8oQcORYc Request-Id: - - req_XTLp9N4f1MJbz4 + - req_pwOC6R8oQcORYc Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGWp6XPcRLuh", + "id": "cus_TZpAsAED6BswJA", "object": "customer", "address": null, "balance": 0, - "created": 1762270514, + "created": 1765342836, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "DHTY9AGT", + "invoice_prefix": "ZW6LF5VO", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:14 GMT + recorded_at: Wed, 10 Dec 2025 05:01:07 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGWp6XPcRLuh&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAsAED6BswJA&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XTLp9N4f1MJbz4","request_duration_ms":448}}' + - '{"last_request_metrics":{"request_id":"req_pwOC6R8oQcORYc","request_duration_ms":433}}' Idempotency-Key: - - 6e94bb10-d075-4fbf-a415-ca909aec80e7 + - bf836062-1dbb-4325-861a-6a01ef06f084 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:14 GMT + - Wed, 10 Dec 2025 05:00:37 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6e94bb10-d075-4fbf-a415-ca909aec80e7 + - bf836062-1dbb-4325-861a-6a01ef06f084 Original-Request: - - req_VB1TvdY1zKz4zo + - req_liD1b7O529C8xA Request-Id: - - req_VB1TvdY1zKz4zo + - req_liD1b7O529C8xA Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGMKuuB1fWySn2OO47fvH", + "id": "pi_3ScfVxKuuB1fWySn0SLB9F4f", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270514, + "created": 1765342837, "currency": "eur", - "customer": "cus_TMVGWp6XPcRLuh", + "customer": "cus_TZpAsAED6BswJA", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGMKuuB1fWySnGODEgPHo", + "payment_method": "pm_1ScfVxKuuB1fWySnoEWaGTEy", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:14 GMT + recorded_at: Wed, 10 Dec 2025 05:01:08 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGMKuuB1fWySn2OO47fvH/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVxKuuB1fWySn0SLB9F4f/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VB1TvdY1zKz4zo","request_duration_ms":411}}' + - '{"last_request_metrics":{"request_id":"req_liD1b7O529C8xA","request_duration_ms":447}}' Idempotency-Key: - - b16c0135-743e-4e79-a08e-d90ef4393df9 + - 6c271ec3-b76f-4980-ad6b-7335a7a89a90 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:15 GMT + - Wed, 10 Dec 2025 05:00:38 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b16c0135-743e-4e79-a08e-d90ef4393df9 + - 6c271ec3-b76f-4980-ad6b-7335a7a89a90 Original-Request: - - req_iwRYfCnXhOefGF + - req_y9bMRvVkyLbSzH Request-Id: - - req_iwRYfCnXhOefGF + - req_y9bMRvVkyLbSzH Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGMKuuB1fWySn2OO47fvH", + "id": "pi_3ScfVxKuuB1fWySn0SLB9F4f", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270514, + "created": 1765342837, "currency": "eur", - "customer": "cus_TMVGWp6XPcRLuh", + "customer": "cus_TZpAsAED6BswJA", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGMKuuB1fWySn2yNpiKiX", + "latest_charge": "ch_3ScfVxKuuB1fWySn0xcURdxh", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGMKuuB1fWySnGODEgPHo", + "payment_method": "pm_1ScfVxKuuB1fWySnoEWaGTEy", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:15 GMT + recorded_at: Wed, 10 Dec 2025 05:01:09 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGMKuuB1fWySn2OO47fvH + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVxKuuB1fWySn0SLB9F4f body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_iwRYfCnXhOefGF","request_duration_ms":913}}' + - '{"last_request_metrics":{"request_id":"req_y9bMRvVkyLbSzH","request_duration_ms":941}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:16 GMT + - Wed, 10 Dec 2025 05:00:39 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_1jpkuKrWUTnenE + - req_stwtePvRfrT0MI Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGMKuuB1fWySn2OO47fvH", + "id": "pi_3ScfVxKuuB1fWySn0SLB9F4f", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270514, + "created": 1765342837, "currency": "eur", - "customer": "cus_TMVGWp6XPcRLuh", + "customer": "cus_TZpAsAED6BswJA", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGMKuuB1fWySn2yNpiKiX", + "latest_charge": "ch_3ScfVxKuuB1fWySn0xcURdxh", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGMKuuB1fWySnGODEgPHo", + "payment_method": "pm_1ScfVxKuuB1fWySnoEWaGTEy", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:16 GMT + recorded_at: Wed, 10 Dec 2025 05:01:09 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGMKuuB1fWySn2OO47fvH/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVxKuuB1fWySn0SLB9F4f/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1jpkuKrWUTnenE","request_duration_ms":252}}' + - '{"last_request_metrics":{"request_id":"req_stwtePvRfrT0MI","request_duration_ms":697}}' Idempotency-Key: - - eaee11de-2ff4-469c-9d7f-c8fec78b55bd + - c1df8825-8943-4726-a09c-54bd97523a07 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:17 GMT + - Wed, 10 Dec 2025 05:00:40 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - eaee11de-2ff4-469c-9d7f-c8fec78b55bd + - c1df8825-8943-4726-a09c-54bd97523a07 Original-Request: - - req_QCk8zEyajwR6mm + - req_bhgGRmIWMREqsF Request-Id: - - req_QCk8zEyajwR6mm + - req_bhgGRmIWMREqsF Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGMKuuB1fWySn2OO47fvH", + "id": "pi_3ScfVxKuuB1fWySn0SLB9F4f", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270514, + "created": 1765342837, "currency": "eur", - "customer": "cus_TMVGWp6XPcRLuh", + "customer": "cus_TZpAsAED6BswJA", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGMKuuB1fWySn2yNpiKiX", + "latest_charge": "ch_3ScfVxKuuB1fWySn0xcURdxh", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGMKuuB1fWySnGODEgPHo", + "payment_method": "pm_1ScfVxKuuB1fWySnoEWaGTEy", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:17 GMT + recorded_at: Wed, 10 Dec 2025 05:01:10 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGMKuuB1fWySn2OO47fvH + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVxKuuB1fWySn0SLB9F4f body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_QCk8zEyajwR6mm","request_duration_ms":1376}}' + - '{"last_request_metrics":{"request_id":"req_bhgGRmIWMREqsF","request_duration_ms":1139}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:17 GMT + - Wed, 10 Dec 2025 05:00:40 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_1xY005HTux49la + - req_XWmC6fT4PpN3Mc Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGMKuuB1fWySn2OO47fvH", + "id": "pi_3ScfVxKuuB1fWySn0SLB9F4f", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270514, + "created": 1765342837, "currency": "eur", - "customer": "cus_TMVGWp6XPcRLuh", + "customer": "cus_TZpAsAED6BswJA", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGMKuuB1fWySn2yNpiKiX", + "latest_charge": "ch_3ScfVxKuuB1fWySn0xcURdxh", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGMKuuB1fWySnGODEgPHo", + "payment_method": "pm_1ScfVxKuuB1fWySnoEWaGTEy", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:17 GMT + recorded_at: Wed, 10 Dec 2025 05:01:11 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml index 3a6c41abaa..aba1c107ee 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_501WF7lJ5o7rT1","request_duration_ms":282}}' + - '{"last_request_metrics":{"request_id":"req_hpj9Bf2CLrDQgR","request_duration_ms":685}}' Idempotency-Key: - - 22b2e440-c8c4-4e8f-97e8-e54856833551 + - 6e750ce9-0b99-44c1-bbbf-236d7f98e310 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:11 GMT + - Wed, 10 Dec 2025 05:00:34 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 22b2e440-c8c4-4e8f-97e8-e54856833551 + - 6e750ce9-0b99-44c1-bbbf-236d7f98e310 Original-Request: - - req_KOQR7tRuTRCxt2 + - req_RC3x8Mi5UI2y3o Request-Id: - - req_KOQR7tRuTRCxt2 + - req_RC3x8Mi5UI2y3o Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGrwUI8yAUzH", + "id": "cus_TZpAWcFVq7XBTr", "object": "customer", "address": null, "balance": 0, - "created": 1762270511, + "created": 1765342834, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "5QB5E3GZ", + "invoice_prefix": "JQOSCXR7", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:11 GMT + recorded_at: Wed, 10 Dec 2025 05:01:05 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGrwUI8yAUzH&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAWcFVq7XBTr&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_KOQR7tRuTRCxt2","request_duration_ms":459}}' + - '{"last_request_metrics":{"request_id":"req_RC3x8Mi5UI2y3o","request_duration_ms":429}}' Idempotency-Key: - - 6ec53864-b7f3-4365-af1c-016d46dc7af9 + - 0ee9bbc0-0b8c-4bba-a668-6ddb33f9eced Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:12 GMT + - Wed, 10 Dec 2025 05:00:35 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6ec53864-b7f3-4365-af1c-016d46dc7af9 + - 0ee9bbc0-0b8c-4bba-a668-6ddb33f9eced Original-Request: - - req_Y5dKtRrCMjcFSH + - req_ytRZYoZ7kutCiS Request-Id: - - req_Y5dKtRrCMjcFSH + - req_ytRZYoZ7kutCiS Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGKKuuB1fWySn2l1sbw00", + "id": "pi_3ScfVvKuuB1fWySn2TQgo8S9", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270512, + "created": 1765342835, "currency": "eur", - "customer": "cus_TMVGrwUI8yAUzH", + "customer": "cus_TZpAWcFVq7XBTr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGKKuuB1fWySntap1MMoQ", + "payment_method": "pm_1ScfVvKuuB1fWySnbwZTrFgw", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:12 GMT + recorded_at: Wed, 10 Dec 2025 05:01:05 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGKKuuB1fWySn2l1sbw00/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVvKuuB1fWySn2TQgo8S9/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Y5dKtRrCMjcFSH","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_ytRZYoZ7kutCiS","request_duration_ms":437}}' Idempotency-Key: - - 862fc18b-a595-42cf-b38b-2a11c534b827 + - c27cf613-06e9-4af1-a10f-e338de762450 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:13 GMT + - Wed, 10 Dec 2025 05:00:36 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 862fc18b-a595-42cf-b38b-2a11c534b827 + - c27cf613-06e9-4af1-a10f-e338de762450 Original-Request: - - req_XU9uAewfJvUiBt + - req_PJgnpaCBhcvegr Request-Id: - - req_XU9uAewfJvUiBt + - req_PJgnpaCBhcvegr Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGKKuuB1fWySn2l1sbw00", + "id": "pi_3ScfVvKuuB1fWySn2TQgo8S9", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270512, + "created": 1765342835, "currency": "eur", - "customer": "cus_TMVGrwUI8yAUzH", + "customer": "cus_TZpAWcFVq7XBTr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGKKuuB1fWySn2t2cOB6f", + "latest_charge": "ch_3ScfVvKuuB1fWySn261B4DH5", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGKKuuB1fWySntap1MMoQ", + "payment_method": "pm_1ScfVvKuuB1fWySnbwZTrFgw", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:13 GMT + recorded_at: Wed, 10 Dec 2025 05:01:06 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGKKuuB1fWySn2l1sbw00 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVvKuuB1fWySn2TQgo8S9 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XU9uAewfJvUiBt","request_duration_ms":919}}' + - '{"last_request_metrics":{"request_id":"req_PJgnpaCBhcvegr","request_duration_ms":918}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:13 GMT + - Wed, 10 Dec 2025 05:00:36 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_yzJn5U6MvzJaV2 + - req_8uo1Xo1XpSUmdh Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGKKuuB1fWySn2l1sbw00", + "id": "pi_3ScfVvKuuB1fWySn2TQgo8S9", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270512, + "created": 1765342835, "currency": "eur", - "customer": "cus_TMVGrwUI8yAUzH", + "customer": "cus_TZpAWcFVq7XBTr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGKKuuB1fWySn2t2cOB6f", + "latest_charge": "ch_3ScfVvKuuB1fWySn261B4DH5", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGKKuuB1fWySntap1MMoQ", + "payment_method": "pm_1ScfVvKuuB1fWySnbwZTrFgw", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:13 GMT + recorded_at: Wed, 10 Dec 2025 05:01:07 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml index 675053cf92..34ce9ca59f 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cWqi4IJfRj1hJw","request_duration_ms":393}}' + - '{"last_request_metrics":{"request_id":"req_2swhX06zkE5Qps","request_duration_ms":330}}' Idempotency-Key: - - 797a1beb-bf65-43e3-a46a-bf52c79e1bd9 + - 1ebe0347-6ce1-45c8-ab02-9b695b1b3e7a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:21 GMT + - Wed, 10 Dec 2025 05:00:43 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 797a1beb-bf65-43e3-a46a-bf52c79e1bd9 + - 1ebe0347-6ce1-45c8-ab02-9b695b1b3e7a Original-Request: - - req_aunYOud8kpuvgn + - req_CtoQrzhdIxPCom Request-Id: - - req_aunYOud8kpuvgn + - req_CtoQrzhdIxPCom Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHMWpIqZyWxZ", + "id": "cus_TZpAGE32BXlf7M", "object": "customer", "address": null, "balance": 0, - "created": 1762270520, + "created": 1765342843, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "IH8DLBY1", + "invoice_prefix": "SMC6X6XG", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:21 GMT + recorded_at: Wed, 10 Dec 2025 05:01:14 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHMWpIqZyWxZ&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAGE32BXlf7M&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aunYOud8kpuvgn","request_duration_ms":492}}' + - '{"last_request_metrics":{"request_id":"req_CtoQrzhdIxPCom","request_duration_ms":470}}' Idempotency-Key: - - 10c5fa66-d262-431d-8766-e38c98ef962e + - 76140d6c-1a58-4549-86fe-901359594e35 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:21 GMT + - Wed, 10 Dec 2025 05:00:43 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 10c5fa66-d262-431d-8766-e38c98ef962e + - 76140d6c-1a58-4549-86fe-901359594e35 Original-Request: - - req_Ut3Eh3ZhMPtdxk + - req_Erf9Is7ex7npJW Request-Id: - - req_Ut3Eh3ZhMPtdxk + - req_Erf9Is7ex7npJW Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGTKuuB1fWySn2k2icnam", + "id": "pi_3ScfW3KuuB1fWySn27Rg6Ade", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270521, + "created": 1765342843, "currency": "eur", - "customer": "cus_TMVHMWpIqZyWxZ", + "customer": "cus_TZpAGE32BXlf7M", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGTKuuB1fWySnAc3Oe6xc", + "payment_method": "pm_1ScfW3KuuB1fWySnsGLf5EES", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:21 GMT + recorded_at: Wed, 10 Dec 2025 05:01:14 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGTKuuB1fWySn2k2icnam/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW3KuuB1fWySn27Rg6Ade/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Ut3Eh3ZhMPtdxk","request_duration_ms":369}}' + - '{"last_request_metrics":{"request_id":"req_Erf9Is7ex7npJW","request_duration_ms":446}}' Idempotency-Key: - - b23a19bb-3eea-446b-94f9-ac8e268ee31e + - 21ef0225-147b-44e5-bf89-76be22a9bf5b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:22 GMT + - Wed, 10 Dec 2025 05:00:44 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b23a19bb-3eea-446b-94f9-ac8e268ee31e + - 21ef0225-147b-44e5-bf89-76be22a9bf5b Original-Request: - - req_CXwcLfyOK1OXlu + - req_5KqzDTGQ92f4Kd Request-Id: - - req_CXwcLfyOK1OXlu + - req_5KqzDTGQ92f4Kd Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGTKuuB1fWySn2k2icnam", + "id": "pi_3ScfW3KuuB1fWySn27Rg6Ade", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270521, + "created": 1765342843, "currency": "eur", - "customer": "cus_TMVHMWpIqZyWxZ", + "customer": "cus_TZpAGE32BXlf7M", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGTKuuB1fWySn2YQbu5V7", + "latest_charge": "ch_3ScfW3KuuB1fWySn2eMPcoW2", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGTKuuB1fWySnAc3Oe6xc", + "payment_method": "pm_1ScfW3KuuB1fWySnsGLf5EES", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:22 GMT + recorded_at: Wed, 10 Dec 2025 05:01:15 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGTKuuB1fWySn2k2icnam + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW3KuuB1fWySn27Rg6Ade body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_CXwcLfyOK1OXlu","request_duration_ms":899}}' + - '{"last_request_metrics":{"request_id":"req_5KqzDTGQ92f4Kd","request_duration_ms":961}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:22 GMT + - Wed, 10 Dec 2025 05:00:45 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_kZ061F88JL1AeK + - req_jxEVoGHa4DWL16 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGTKuuB1fWySn2k2icnam", + "id": "pi_3ScfW3KuuB1fWySn27Rg6Ade", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270521, + "created": 1765342843, "currency": "eur", - "customer": "cus_TMVHMWpIqZyWxZ", + "customer": "cus_TZpAGE32BXlf7M", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGTKuuB1fWySn2YQbu5V7", + "latest_charge": "ch_3ScfW3KuuB1fWySn2eMPcoW2", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGTKuuB1fWySnAc3Oe6xc", + "payment_method": "pm_1ScfW3KuuB1fWySnsGLf5EES", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:22 GMT + recorded_at: Wed, 10 Dec 2025 05:01:15 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGTKuuB1fWySn2k2icnam/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW3KuuB1fWySn27Rg6Ade/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_kZ061F88JL1AeK","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_jxEVoGHa4DWL16","request_duration_ms":323}}' Idempotency-Key: - - 4cc1d248-cb2a-42ce-b4a1-864c5b36635e + - 01b1c7d6-506e-46ca-a85f-2646cd4d76a4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:24 GMT + - Wed, 10 Dec 2025 05:00:46 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4cc1d248-cb2a-42ce-b4a1-864c5b36635e + - 01b1c7d6-506e-46ca-a85f-2646cd4d76a4 Original-Request: - - req_8ZxGVyMd03iM0R + - req_ExBUzc4QfOBTQJ Request-Id: - - req_8ZxGVyMd03iM0R + - req_ExBUzc4QfOBTQJ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGTKuuB1fWySn2k2icnam", + "id": "pi_3ScfW3KuuB1fWySn27Rg6Ade", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270521, + "created": 1765342843, "currency": "eur", - "customer": "cus_TMVHMWpIqZyWxZ", + "customer": "cus_TZpAGE32BXlf7M", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGTKuuB1fWySn2YQbu5V7", + "latest_charge": "ch_3ScfW3KuuB1fWySn2eMPcoW2", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGTKuuB1fWySnAc3Oe6xc", + "payment_method": "pm_1ScfW3KuuB1fWySnsGLf5EES", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:24 GMT + recorded_at: Wed, 10 Dec 2025 05:01:17 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGTKuuB1fWySn2k2icnam + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW3KuuB1fWySn27Rg6Ade body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_8ZxGVyMd03iM0R","request_duration_ms":1530}}' + - '{"last_request_metrics":{"request_id":"req_ExBUzc4QfOBTQJ","request_duration_ms":1347}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:24 GMT + - Wed, 10 Dec 2025 05:00:46 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_1oTssCZeEG1qt7 + - req_2WN48RMrUo5r8j Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGTKuuB1fWySn2k2icnam", + "id": "pi_3ScfW3KuuB1fWySn27Rg6Ade", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270521, + "created": 1765342843, "currency": "eur", - "customer": "cus_TMVHMWpIqZyWxZ", + "customer": "cus_TZpAGE32BXlf7M", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGTKuuB1fWySn2YQbu5V7", + "latest_charge": "ch_3ScfW3KuuB1fWySn2eMPcoW2", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGTKuuB1fWySnAc3Oe6xc", + "payment_method": "pm_1ScfW3KuuB1fWySnsGLf5EES", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:24 GMT + recorded_at: Wed, 10 Dec 2025 05:01:17 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml index 962038e996..4401c0d14c 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1xY005HTux49la","request_duration_ms":302}}' + - '{"last_request_metrics":{"request_id":"req_XWmC6fT4PpN3Mc","request_duration_ms":328}}' Idempotency-Key: - - ace2f766-8c97-4a0e-af3e-6c5788fba362 + - b3410bc0-4ace-4dcb-aaca-9159101ed20e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:18 GMT + - Wed, 10 Dec 2025 05:00:41 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ace2f766-8c97-4a0e-af3e-6c5788fba362 + - b3410bc0-4ace-4dcb-aaca-9159101ed20e Original-Request: - - req_h9hzP85xF8PgtW + - req_bgf3c1kyHEHyp3 Request-Id: - - req_h9hzP85xF8PgtW + - req_bgf3c1kyHEHyp3 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGyeQgUEZfgY", + "id": "cus_TZpADL4hte3zJG", "object": "customer", "address": null, "balance": 0, - "created": 1762270517, + "created": 1765342840, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "EBWFYRQF", + "invoice_prefix": "MMMXCQQJ", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:18 GMT + recorded_at: Wed, 10 Dec 2025 05:01:11 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGyeQgUEZfgY&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpADL4hte3zJG&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_h9hzP85xF8PgtW","request_duration_ms":433}}' + - '{"last_request_metrics":{"request_id":"req_bgf3c1kyHEHyp3","request_duration_ms":450}}' Idempotency-Key: - - e9a3a563-7feb-4294-9528-67a0adb58ed0 + - ea70458a-1a42-466f-a2b5-dc24a4460696 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:18 GMT + - Wed, 10 Dec 2025 05:00:41 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e9a3a563-7feb-4294-9528-67a0adb58ed0 + - ea70458a-1a42-466f-a2b5-dc24a4460696 Original-Request: - - req_0G6Y1C0XYdJMcM + - req_l1ikuiIw4Re4H8 Request-Id: - - req_0G6Y1C0XYdJMcM + - req_l1ikuiIw4Re4H8 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGQKuuB1fWySn03NNX9kN", + "id": "pi_3ScfW1KuuB1fWySn2qZRsbHA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270518, + "created": 1765342841, "currency": "eur", - "customer": "cus_TMVGyeQgUEZfgY", + "customer": "cus_TZpADL4hte3zJG", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGQKuuB1fWySnzKuEBVFY", + "payment_method": "pm_1ScfW1KuuB1fWySn4ujp6XZp", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:18 GMT + recorded_at: Wed, 10 Dec 2025 05:01:12 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGQKuuB1fWySn03NNX9kN/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW1KuuB1fWySn2qZRsbHA/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_0G6Y1C0XYdJMcM","request_duration_ms":430}}' + - '{"last_request_metrics":{"request_id":"req_l1ikuiIw4Re4H8","request_duration_ms":455}}' Idempotency-Key: - - cd69cadc-8320-41fa-8cb9-9af68094eff1 + - 958b9648-711f-4c03-abf7-7030bad9241c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:19 GMT + - Wed, 10 Dec 2025 05:00:42 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - cd69cadc-8320-41fa-8cb9-9af68094eff1 + - 958b9648-711f-4c03-abf7-7030bad9241c Original-Request: - - req_K4LBTcpMFv68t4 + - req_RzIDJmiKgf8qxg Request-Id: - - req_K4LBTcpMFv68t4 + - req_RzIDJmiKgf8qxg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGQKuuB1fWySn03NNX9kN", + "id": "pi_3ScfW1KuuB1fWySn2qZRsbHA", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270518, + "created": 1765342841, "currency": "eur", - "customer": "cus_TMVGyeQgUEZfgY", + "customer": "cus_TZpADL4hte3zJG", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGQKuuB1fWySn0YBmXMBF", + "latest_charge": "ch_3ScfW1KuuB1fWySn2IouOzpl", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGQKuuB1fWySnzKuEBVFY", + "payment_method": "pm_1ScfW1KuuB1fWySn4ujp6XZp", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:19 GMT + recorded_at: Wed, 10 Dec 2025 05:01:13 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGQKuuB1fWySn03NNX9kN + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfW1KuuB1fWySn2qZRsbHA body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_K4LBTcpMFv68t4","request_duration_ms":1198}}' + - '{"last_request_metrics":{"request_id":"req_RzIDJmiKgf8qxg","request_duration_ms":902}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:20 GMT + - Wed, 10 Dec 2025 05:00:42 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_cWqi4IJfRj1hJw + - req_2swhX06zkE5Qps Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGQKuuB1fWySn03NNX9kN", + "id": "pi_3ScfW1KuuB1fWySn2qZRsbHA", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270518, + "created": 1765342841, "currency": "eur", - "customer": "cus_TMVGyeQgUEZfgY", + "customer": "cus_TZpADL4hte3zJG", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGQKuuB1fWySn0YBmXMBF", + "latest_charge": "ch_3ScfW1KuuB1fWySn2IouOzpl", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGQKuuB1fWySnzKuEBVFY", + "payment_method": "pm_1ScfW1KuuB1fWySn4ujp6XZp", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:20 GMT + recorded_at: Wed, 10 Dec 2025 05:01:13 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml index 91d035ebb5..89a17a505b 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aXmH8HC2vQTWph","request_duration_ms":310}}' + - '{"last_request_metrics":{"request_id":"req_KbbW13AZpZbXGj","request_duration_ms":332}}' Idempotency-Key: - - 6125bfa7-0240-4a2e-b31c-8533404daf47 + - b942c19c-5000-489a-b153-8976b96dd1ad Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:53 GMT + - Wed, 10 Dec 2025 05:01:14 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6125bfa7-0240-4a2e-b31c-8533404daf47 + - b942c19c-5000-489a-b153-8976b96dd1ad Original-Request: - - req_zendtV4rlqwy6K + - req_ho7cTvMwt9v6Zb Request-Id: - - req_zendtV4rlqwy6K + - req_ho7cTvMwt9v6Zb Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVHM2w47Sedf8", + "id": "cus_TZpAvR55iiCDvj", "object": "customer", "address": null, "balance": 0, - "created": 1762270553, + "created": 1765342874, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "BNC9GF5G", + "invoice_prefix": "UBMI1SPN", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:53 GMT + recorded_at: Wed, 10 Dec 2025 05:01:45 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVHM2w47Sedf8&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAvR55iiCDvj&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_zendtV4rlqwy6K","request_duration_ms":451}}' + - '{"last_request_metrics":{"request_id":"req_ho7cTvMwt9v6Zb","request_duration_ms":414}}' Idempotency-Key: - - 6ee3c1bd-8430-4246-98a4-2f014359cb52 + - '049f162b-8887-4963-8cb9-d8c4107f2841' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:54 GMT + - Wed, 10 Dec 2025 05:01:15 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6ee3c1bd-8430-4246-98a4-2f014359cb52 + - '049f162b-8887-4963-8cb9-d8c4107f2841' Original-Request: - - req_Mu5JjO4xBIIHSV + - req_2z87n4OJTVrKFg Request-Id: - - req_Mu5JjO4xBIIHSV + - req_2z87n4OJTVrKFg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGzKuuB1fWySn0OnoN8uM", + "id": "pi_3ScfWYKuuB1fWySn0VbNUpWA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270553, + "created": 1765342874, "currency": "eur", - "customer": "cus_TMVHM2w47Sedf8", + "customer": "cus_TZpAvR55iiCDvj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGzKuuB1fWySnXzzgTINX", + "payment_method": "pm_1ScfWYKuuB1fWySnCEnIVc2b", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:54 GMT + recorded_at: Wed, 10 Dec 2025 05:01:45 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGzKuuB1fWySn0OnoN8uM/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWYKuuB1fWySn0VbNUpWA/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Mu5JjO4xBIIHSV","request_duration_ms":510}}' + - '{"last_request_metrics":{"request_id":"req_2z87n4OJTVrKFg","request_duration_ms":436}}' Idempotency-Key: - - e5dabe17-4993-4148-8c49-048f967cd54d + - 42e6e6e9-cee3-4f77-bd16-ca2e92155e50 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:54 GMT + - Wed, 10 Dec 2025 05:01:16 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e5dabe17-4993-4148-8c49-048f967cd54d + - 42e6e6e9-cee3-4f77-bd16-ca2e92155e50 Original-Request: - - req_Do21H9islz38VI + - req_byIx76dHji0289 Request-Id: - - req_Do21H9islz38VI + - req_byIx76dHji0289 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGzKuuB1fWySn0OnoN8uM", + "id": "pi_3ScfWYKuuB1fWySn0VbNUpWA", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270553, + "created": 1765342874, "currency": "eur", - "customer": "cus_TMVHM2w47Sedf8", + "customer": "cus_TZpAvR55iiCDvj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGzKuuB1fWySn0oTry0bK", + "latest_charge": "ch_3ScfWYKuuB1fWySn0JNFIWKz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGzKuuB1fWySnXzzgTINX", + "payment_method": "pm_1ScfWYKuuB1fWySnCEnIVc2b", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:55 GMT + recorded_at: Wed, 10 Dec 2025 05:01:46 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGzKuuB1fWySn0OnoN8uM + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWYKuuB1fWySn0VbNUpWA body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Do21H9islz38VI","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_byIx76dHji0289","request_duration_ms":1039}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:55 GMT + - Wed, 10 Dec 2025 05:01:16 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_RDWte9fk0LRK5l + - req_fSOrDgaoz46b10 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGzKuuB1fWySn0OnoN8uM", + "id": "pi_3ScfWYKuuB1fWySn0VbNUpWA", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270553, + "created": 1765342874, "currency": "eur", - "customer": "cus_TMVHM2w47Sedf8", + "customer": "cus_TZpAvR55iiCDvj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGzKuuB1fWySn0oTry0bK", + "latest_charge": "ch_3ScfWYKuuB1fWySn0JNFIWKz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGzKuuB1fWySnXzzgTINX", + "payment_method": "pm_1ScfWYKuuB1fWySnCEnIVc2b", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:55 GMT + recorded_at: Wed, 10 Dec 2025 05:01:47 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGzKuuB1fWySn0OnoN8uM/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWYKuuB1fWySn0VbNUpWA/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_RDWte9fk0LRK5l","request_duration_ms":305}}' + - '{"last_request_metrics":{"request_id":"req_fSOrDgaoz46b10","request_duration_ms":320}}' Idempotency-Key: - - e840e878-fd5c-43cc-b0b5-dc9d0444eeb9 + - daf4446e-4220-4cac-ba87-049403fe3844 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:56 GMT + - Wed, 10 Dec 2025 05:01:17 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e840e878-fd5c-43cc-b0b5-dc9d0444eeb9 + - daf4446e-4220-4cac-ba87-049403fe3844 Original-Request: - - req_hqOfCEd5CkhoIJ + - req_dxtf3LhH51g8uY Request-Id: - - req_hqOfCEd5CkhoIJ + - req_dxtf3LhH51g8uY Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGzKuuB1fWySn0OnoN8uM", + "id": "pi_3ScfWYKuuB1fWySn0VbNUpWA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270553, + "created": 1765342874, "currency": "eur", - "customer": "cus_TMVHM2w47Sedf8", + "customer": "cus_TZpAvR55iiCDvj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGzKuuB1fWySn0oTry0bK", + "latest_charge": "ch_3ScfWYKuuB1fWySn0JNFIWKz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGzKuuB1fWySnXzzgTINX", + "payment_method": "pm_1ScfWYKuuB1fWySnCEnIVc2b", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:56 GMT + recorded_at: Wed, 10 Dec 2025 05:01:48 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGzKuuB1fWySn0OnoN8uM + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWYKuuB1fWySn0VbNUpWA body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_hqOfCEd5CkhoIJ","request_duration_ms":1429}}' + - '{"last_request_metrics":{"request_id":"req_dxtf3LhH51g8uY","request_duration_ms":1153}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:56 GMT + - Wed, 10 Dec 2025 05:01:17 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_Nop2qkp1LnkwYX + - req_ieGRzEsqo8BB5k Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGzKuuB1fWySn0OnoN8uM", + "id": "pi_3ScfWYKuuB1fWySn0VbNUpWA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270553, + "created": 1765342874, "currency": "eur", - "customer": "cus_TMVHM2w47Sedf8", + "customer": "cus_TZpAvR55iiCDvj", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGzKuuB1fWySn0oTry0bK", + "latest_charge": "ch_3ScfWYKuuB1fWySn0JNFIWKz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGzKuuB1fWySnXzzgTINX", + "payment_method": "pm_1ScfWYKuuB1fWySnCEnIVc2b", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:57 GMT + recorded_at: Wed, 10 Dec 2025 05:01:48 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml index 0a2cb17e61..64921c2b63 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MHeimaQFsntvdY","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_NIiVT916uyrPb2","request_duration_ms":319}}' Idempotency-Key: - - 4c0fbed6-deb7-461a-b68f-1c9615350a7d + - 6106e18a-2eaf-4aae-a9bf-7c551d7d7d34 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:50 GMT + - Wed, 10 Dec 2025 05:01:12 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4c0fbed6-deb7-461a-b68f-1c9615350a7d + - 6106e18a-2eaf-4aae-a9bf-7c551d7d7d34 Original-Request: - - req_OY5HJ6GJTqheKh + - req_QZrwChQM4pJ2yY Request-Id: - - req_OY5HJ6GJTqheKh + - req_QZrwChQM4pJ2yY Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVH5DUx1T9ZvU", + "id": "cus_TZpAW5Hk2kXWsV", "object": "customer", "address": null, "balance": 0, - "created": 1762270550, + "created": 1765342872, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "8Y9NJYVG", + "invoice_prefix": "XE2BD0YK", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:50 GMT + recorded_at: Wed, 10 Dec 2025 05:01:43 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVH5DUx1T9ZvU&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAW5Hk2kXWsV&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OY5HJ6GJTqheKh","request_duration_ms":438}}' + - '{"last_request_metrics":{"request_id":"req_QZrwChQM4pJ2yY","request_duration_ms":444}}' Idempotency-Key: - - c5ef644f-dcc1-454c-9422-a5ca52ba5fbc + - c981ff01-9aed-44d2-b95c-738b7a3e4b96 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:51 GMT + - Wed, 10 Dec 2025 05:01:12 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c5ef644f-dcc1-454c-9422-a5ca52ba5fbc + - c981ff01-9aed-44d2-b95c-738b7a3e4b96 Original-Request: - - req_3QPNzDcTzABW89 + - req_FoNIIWLIQlUQCz Request-Id: - - req_3QPNzDcTzABW89 + - req_FoNIIWLIQlUQCz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGxKuuB1fWySn0CFWwjfm", + "id": "pi_3ScfWWKuuB1fWySn0isLT9Zo", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270551, + "created": 1765342872, "currency": "eur", - "customer": "cus_TMVH5DUx1T9ZvU", + "customer": "cus_TZpAW5Hk2kXWsV", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGxKuuB1fWySnrhQXgxmm", + "payment_method": "pm_1ScfWWKuuB1fWySnQDwXOZz9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:51 GMT + recorded_at: Wed, 10 Dec 2025 05:01:43 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGxKuuB1fWySn0CFWwjfm/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWWKuuB1fWySn0isLT9Zo/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_3QPNzDcTzABW89","request_duration_ms":406}}' + - '{"last_request_metrics":{"request_id":"req_FoNIIWLIQlUQCz","request_duration_ms":444}}' Idempotency-Key: - - 6238d058-d644-4f08-9811-5e354ecdc9bf + - faa911bb-2ccf-4bba-bb22-b4148e310561 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:52 GMT + - Wed, 10 Dec 2025 05:01:13 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6238d058-d644-4f08-9811-5e354ecdc9bf + - faa911bb-2ccf-4bba-bb22-b4148e310561 Original-Request: - - req_j7zYjCfienurIo + - req_v15OAHHdadGHJI Request-Id: - - req_j7zYjCfienurIo + - req_v15OAHHdadGHJI Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGxKuuB1fWySn0CFWwjfm", + "id": "pi_3ScfWWKuuB1fWySn0isLT9Zo", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270551, + "created": 1765342872, "currency": "eur", - "customer": "cus_TMVH5DUx1T9ZvU", + "customer": "cus_TZpAW5Hk2kXWsV", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGxKuuB1fWySn0BLGWRCb", + "latest_charge": "ch_3ScfWWKuuB1fWySn0Pg5sfpm", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGxKuuB1fWySnrhQXgxmm", + "payment_method": "pm_1ScfWWKuuB1fWySnQDwXOZz9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:52 GMT + recorded_at: Wed, 10 Dec 2025 05:01:44 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmGxKuuB1fWySn0CFWwjfm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfWWKuuB1fWySn0isLT9Zo body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_j7zYjCfienurIo","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_v15OAHHdadGHJI","request_duration_ms":898}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:52 GMT + - Wed, 10 Dec 2025 05:01:14 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_aXmH8HC2vQTWph + - req_KbbW13AZpZbXGj Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmGxKuuB1fWySn0CFWwjfm", + "id": "pi_3ScfWWKuuB1fWySn0isLT9Zo", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270551, + "created": 1765342872, "currency": "eur", - "customer": "cus_TMVH5DUx1T9ZvU", + "customer": "cus_TZpAW5Hk2kXWsV", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmGxKuuB1fWySn0BLGWRCb", + "latest_charge": "ch_3ScfWWKuuB1fWySn0Pg5sfpm", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmGxKuuB1fWySnrhQXgxmm", + "payment_method": "pm_1ScfWWKuuB1fWySnQDwXOZz9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:53 GMT + recorded_at: Wed, 10 Dec 2025 05:01:44 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml index 64142253e2..831a00823e 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1DNLlRAdcROlU7","request_duration_ms":350}}' + - '{"last_request_metrics":{"request_id":"req_4nKI5uzodExrIK","request_duration_ms":319}}' Idempotency-Key: - - 5c7dbe23-a74e-4385-b98c-e41d46719901 + - 113a28a7-bc4b-4634-aac0-11b25548dd2a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:54 GMT + - Wed, 10 Dec 2025 05:00:17 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5c7dbe23-a74e-4385-b98c-e41d46719901 + - 113a28a7-bc4b-4634-aac0-11b25548dd2a Original-Request: - - req_bYBrEOjyzYXhcg + - req_DFaDQxpKZoJmAv Request-Id: - - req_bYBrEOjyzYXhcg + - req_DFaDQxpKZoJmAv Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGATQyiluxhs", + "id": "cus_TZp9lqJXii1pXi", "object": "customer", "address": null, "balance": 0, - "created": 1762270494, + "created": 1765342817, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "ANEVV83B", + "invoice_prefix": "NHJMLOXQ", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:34:54 GMT + recorded_at: Wed, 10 Dec 2025 05:00:48 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGATQyiluxhs&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual&customer=cus_TZp9lqJXii1pXi&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_bYBrEOjyzYXhcg","request_duration_ms":374}}' + - '{"last_request_metrics":{"request_id":"req_DFaDQxpKZoJmAv","request_duration_ms":471}}' Idempotency-Key: - - 4834fc71-ee9b-4056-9f78-b8f45f15aa1e + - 2d60884e-6570-498c-908d-e8f5303e37b4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:54 GMT + - Wed, 10 Dec 2025 05:00:18 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4834fc71-ee9b-4056-9f78-b8f45f15aa1e + - 2d60884e-6570-498c-908d-e8f5303e37b4 Original-Request: - - req_SpyKQkyxsuz5w1 + - req_UXS6XEMXjjZyth Request-Id: - - req_SpyKQkyxsuz5w1 + - req_UXS6XEMXjjZyth Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG2KuuB1fWySn2znLLSGJ", + "id": "pi_3ScfVeKuuB1fWySn1Vubomhs", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270494, + "created": 1765342818, "currency": "eur", - "customer": "cus_TMVGATQyiluxhs", + "customer": "cus_TZp9lqJXii1pXi", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG2KuuB1fWySngJLV3g2t", + "payment_method": "pm_1ScfVeKuuB1fWySnjS0cc9Az", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:55 GMT + recorded_at: Wed, 10 Dec 2025 05:00:49 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG2KuuB1fWySn2znLLSGJ/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVeKuuB1fWySn1Vubomhs/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_SpyKQkyxsuz5w1","request_duration_ms":475}}' + - '{"last_request_metrics":{"request_id":"req_UXS6XEMXjjZyth","request_duration_ms":438}}' Idempotency-Key: - - 16286556-4fd5-40ba-914f-071efa9a5328 + - 75799b4a-7b0c-4a10-aaca-c9720f45d84d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:55 GMT + - Wed, 10 Dec 2025 05:00:19 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 16286556-4fd5-40ba-914f-071efa9a5328 + - 75799b4a-7b0c-4a10-aaca-c9720f45d84d Original-Request: - - req_jZ9oQd1Z1apfas + - req_sSQh5L5puJyPkP Request-Id: - - req_jZ9oQd1Z1apfas + - req_sSQh5L5puJyPkP Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG2KuuB1fWySn2znLLSGJ", + "id": "pi_3ScfVeKuuB1fWySn1Vubomhs", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270494, + "created": 1765342818, "currency": "eur", - "customer": "cus_TMVGATQyiluxhs", + "customer": "cus_TZp9lqJXii1pXi", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG2KuuB1fWySn2ldrSnyN", + "latest_charge": "ch_3ScfVeKuuB1fWySn1MxGLQVq", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG2KuuB1fWySngJLV3g2t", + "payment_method": "pm_1ScfVeKuuB1fWySnjS0cc9Az", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:56 GMT + recorded_at: Wed, 10 Dec 2025 05:00:49 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG2KuuB1fWySn2znLLSGJ + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVeKuuB1fWySn1Vubomhs body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_jZ9oQd1Z1apfas","request_duration_ms":917}}' + - '{"last_request_metrics":{"request_id":"req_sSQh5L5puJyPkP","request_duration_ms":918}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:56 GMT + - Wed, 10 Dec 2025 05:00:19 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_cRG6yoQb06TdSc + - req_qLMUIn0FMw5oHk Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG2KuuB1fWySn2znLLSGJ", + "id": "pi_3ScfVeKuuB1fWySn1Vubomhs", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270494, + "created": 1765342818, "currency": "eur", - "customer": "cus_TMVGATQyiluxhs", + "customer": "cus_TZp9lqJXii1pXi", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG2KuuB1fWySn2ldrSnyN", + "latest_charge": "ch_3ScfVeKuuB1fWySn1MxGLQVq", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG2KuuB1fWySngJLV3g2t", + "payment_method": "pm_1ScfVeKuuB1fWySnjS0cc9Az", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:56 GMT + recorded_at: Wed, 10 Dec 2025 05:00:50 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG2KuuB1fWySn2znLLSGJ/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVeKuuB1fWySn1Vubomhs/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cRG6yoQb06TdSc","request_duration_ms":405}}' + - '{"last_request_metrics":{"request_id":"req_qLMUIn0FMw5oHk","request_duration_ms":321}}' Idempotency-Key: - - 14457e3b-cf8b-4ddf-9369-3ac0af1c57fe + - 634183e1-04a4-4b79-88ed-245a8d509dab Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:57 GMT + - Wed, 10 Dec 2025 05:00:21 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 14457e3b-cf8b-4ddf-9369-3ac0af1c57fe + - 634183e1-04a4-4b79-88ed-245a8d509dab Original-Request: - - req_5Q7C5mkj9uffhT + - req_UTpzGtK4UeCgTm Request-Id: - - req_5Q7C5mkj9uffhT + - req_UTpzGtK4UeCgTm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG2KuuB1fWySn2znLLSGJ", + "id": "pi_3ScfVeKuuB1fWySn1Vubomhs", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270494, + "created": 1765342818, "currency": "eur", - "customer": "cus_TMVGATQyiluxhs", + "customer": "cus_TZp9lqJXii1pXi", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG2KuuB1fWySn2ldrSnyN", + "latest_charge": "ch_3ScfVeKuuB1fWySn1MxGLQVq", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG2KuuB1fWySngJLV3g2t", + "payment_method": "pm_1ScfVeKuuB1fWySnjS0cc9Az", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:57 GMT + recorded_at: Wed, 10 Dec 2025 05:00:51 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG2KuuB1fWySn2znLLSGJ + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVeKuuB1fWySn1Vubomhs body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_5Q7C5mkj9uffhT","request_duration_ms":1225}}' + - '{"last_request_metrics":{"request_id":"req_UTpzGtK4UeCgTm","request_duration_ms":1568}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:57 GMT + - Wed, 10 Dec 2025 05:00:21 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_VRt2vUteOGVdoA + - req_fhEf3hMIf1LDxy Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG2KuuB1fWySn2znLLSGJ", + "id": "pi_3ScfVeKuuB1fWySn1Vubomhs", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270494, + "created": 1765342818, "currency": "eur", - "customer": "cus_TMVGATQyiluxhs", + "customer": "cus_TZp9lqJXii1pXi", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG2KuuB1fWySn2ldrSnyN", + "latest_charge": "ch_3ScfVeKuuB1fWySn1MxGLQVq", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG2KuuB1fWySngJLV3g2t", + "payment_method": "pm_1ScfVeKuuB1fWySnjS0cc9Az", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:58 GMT + recorded_at: Wed, 10 Dec 2025 05:00:52 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml index 25a053503b..75d648283d 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml @@ -8,13 +8,13 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - f0d925e9-613b-477b-a2a3-3fc63e63d011 + - b8aa84f9-849b-4840-82c6-8973d2cbec01 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:51 GMT + - Wed, 10 Dec 2025 05:00:15 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f0d925e9-613b-477b-a2a3-3fc63e63d011 + - b8aa84f9-849b-4840-82c6-8973d2cbec01 Original-Request: - - req_TEJ9jHz5Gouzyt + - req_3YvrpAWFxTiW1l Request-Id: - - req_TEJ9jHz5Gouzyt + - req_3YvrpAWFxTiW1l Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,18 +79,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGvIiEHPX9yL", + "id": "cus_TZp9VLjtHHbMyT", "object": "customer", "address": null, "balance": 0, - "created": 1762270491, + "created": 1765342815, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "JZFVREPV", + "invoice_prefix": "PH2WIK3G", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -107,24 +108,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:34:51 GMT + recorded_at: Wed, 10 Dec 2025 05:00:46 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGvIiEHPX9yL&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual&customer=cus_TZp9VLjtHHbMyT&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_TEJ9jHz5Gouzyt","request_duration_ms":404}}' + - '{"last_request_metrics":{"request_id":"req_3YvrpAWFxTiW1l","request_duration_ms":451}}' Idempotency-Key: - - 46c671e7-7a00-40df-b724-a08f17795214 + - db230fdd-3284-46ad-b8cb-01df84a383a8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -141,11 +142,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:52 GMT + - Wed, 10 Dec 2025 05:00:16 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -164,17 +165,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 46c671e7-7a00-40df-b724-a08f17795214 + - db230fdd-3284-46ad-b8cb-01df84a383a8 Original-Request: - - req_egMsH1gXnpL8GC + - req_ME8nvvHngBya7I Request-Id: - - req_egMsH1gXnpL8GC + - req_ME8nvvHngBya7I Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -189,7 +190,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG0KuuB1fWySn2u2sOMZC", + "id": "pi_3ScfVbKuuB1fWySn0821kf4L", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -205,19 +206,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270492, + "created": 1765342815, "currency": "eur", - "customer": "cus_TMVGvIiEHPX9yL", + "customer": "cus_TZp9VLjtHHbMyT", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFzKuuB1fWySnky1WfKK6", + "payment_method": "pm_1ScfVbKuuB1fWySn4t6UzFN3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -242,24 +243,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:52 GMT + recorded_at: Wed, 10 Dec 2025 05:00:46 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG0KuuB1fWySn2u2sOMZC/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVbKuuB1fWySn0821kf4L/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_egMsH1gXnpL8GC","request_duration_ms":510}}' + - '{"last_request_metrics":{"request_id":"req_ME8nvvHngBya7I","request_duration_ms":531}}' Idempotency-Key: - - 3ae6c1ed-2540-4c54-a74c-0d5492a46258 + - 88d6ad93-2552-4a15-97a6-11fbc58f317b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -276,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:53 GMT + - Wed, 10 Dec 2025 05:00:17 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -299,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3ae6c1ed-2540-4c54-a74c-0d5492a46258 + - 88d6ad93-2552-4a15-97a6-11fbc58f317b Original-Request: - - req_CN81bSIITxco1N + - req_5HnuyxPqaXNiG0 Request-Id: - - req_CN81bSIITxco1N + - req_5HnuyxPqaXNiG0 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -324,7 +325,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG0KuuB1fWySn2u2sOMZC", + "id": "pi_3ScfVbKuuB1fWySn0821kf4L", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -340,19 +341,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270492, + "created": 1765342815, "currency": "eur", - "customer": "cus_TMVGvIiEHPX9yL", + "customer": "cus_TZp9VLjtHHbMyT", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG0KuuB1fWySn2e89bXqu", + "latest_charge": "ch_3ScfVbKuuB1fWySn0WcJDK1P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFzKuuB1fWySnky1WfKK6", + "payment_method": "pm_1ScfVbKuuB1fWySn4t6UzFN3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -377,22 +378,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:53 GMT + recorded_at: Wed, 10 Dec 2025 05:00:47 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG0KuuB1fWySn2u2sOMZC + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVbKuuB1fWySn0821kf4L body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_CN81bSIITxco1N","request_duration_ms":1020}}' + - '{"last_request_metrics":{"request_id":"req_5HnuyxPqaXNiG0","request_duration_ms":889}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -407,11 +408,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:54 GMT + - Wed, 10 Dec 2025 05:00:17 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -430,11 +431,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_1DNLlRAdcROlU7 + - req_4nKI5uzodExrIK Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -449,7 +450,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG0KuuB1fWySn2u2sOMZC", + "id": "pi_3ScfVbKuuB1fWySn0821kf4L", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -465,19 +466,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270492, + "created": 1765342815, "currency": "eur", - "customer": "cus_TMVGvIiEHPX9yL", + "customer": "cus_TZp9VLjtHHbMyT", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG0KuuB1fWySn2e89bXqu", + "latest_charge": "ch_3ScfVbKuuB1fWySn0WcJDK1P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFzKuuB1fWySnky1WfKK6", + "payment_method": "pm_1ScfVbKuuB1fWySn4t6UzFN3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -502,5 +503,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:54 GMT + recorded_at: Wed, 10 Dec 2025 05:00:48 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml index bb799302a6..6d8ffd4ae5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_jI7YvkInGDIiMW","request_duration_ms":283}}' + - '{"last_request_metrics":{"request_id":"req_KlIfmKFbrQVOjR","request_duration_ms":321}}' Idempotency-Key: - - 3e3eb3f0-ba22-445f-a146-bb51ba8c9c88 + - b5ce2701-ceb2-4bd5-9082-60226f4a4692 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:01 GMT + - Wed, 10 Dec 2025 05:00:24 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3e3eb3f0-ba22-445f-a146-bb51ba8c9c88 + - b5ce2701-ceb2-4bd5-9082-60226f4a4692 Original-Request: - - req_W9L8ePAxZyo0DU + - req_wCezQy52Uz55I6 Request-Id: - - req_W9L8ePAxZyo0DU + - req_wCezQy52Uz55I6 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGIRLkkRO5XO", + "id": "cus_TZpA2WMOLsIZcr", "object": "customer", "address": null, "balance": 0, - "created": 1762270500, + "created": 1765342824, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "JWCCXVA4", + "invoice_prefix": "GVNIUKRR", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:35:01 GMT + recorded_at: Wed, 10 Dec 2025 05:00:55 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGIRLkkRO5XO&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpA2WMOLsIZcr&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_W9L8ePAxZyo0DU","request_duration_ms":363}}' + - '{"last_request_metrics":{"request_id":"req_wCezQy52Uz55I6","request_duration_ms":451}}' Idempotency-Key: - - af92bf5e-13de-4571-be53-8eab81d9b570 + - 0a93983e-9cc1-4e3e-a6bd-0a9495eb5f05 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:01 GMT + - Wed, 10 Dec 2025 05:00:24 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - af92bf5e-13de-4571-be53-8eab81d9b570 + - 0a93983e-9cc1-4e3e-a6bd-0a9495eb5f05 Original-Request: - - req_hYP9LtsfgdKYCZ + - req_A3IiFKVwgX4UYj Request-Id: - - req_hYP9LtsfgdKYCZ + - req_A3IiFKVwgX4UYj Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG9KuuB1fWySn0W0QY0oa", + "id": "pi_3ScfVkKuuB1fWySn143Xgsag", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270501, + "created": 1765342824, "currency": "eur", - "customer": "cus_TMVGIRLkkRO5XO", + "customer": "cus_TZpA2WMOLsIZcr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG9KuuB1fWySnvavHuvr9", + "payment_method": "pm_1ScfVkKuuB1fWySniwNxRr9v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:01 GMT + recorded_at: Wed, 10 Dec 2025 05:00:55 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG9KuuB1fWySn0W0QY0oa/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVkKuuB1fWySn143Xgsag/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_hYP9LtsfgdKYCZ","request_duration_ms":407}}' + - '{"last_request_metrics":{"request_id":"req_A3IiFKVwgX4UYj","request_duration_ms":474}}' Idempotency-Key: - - a085f49c-0546-4326-aa5a-374c9b84f2d8 + - 1cf05e2b-23ae-44ce-b57a-21ce31bc5877 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:02 GMT + - Wed, 10 Dec 2025 05:00:25 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a085f49c-0546-4326-aa5a-374c9b84f2d8 + - 1cf05e2b-23ae-44ce-b57a-21ce31bc5877 Original-Request: - - req_rbfCg7ZN4rqDap + - req_ogrQTkYYTb9rMe Request-Id: - - req_rbfCg7ZN4rqDap + - req_ogrQTkYYTb9rMe Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG9KuuB1fWySn0W0QY0oa", + "id": "pi_3ScfVkKuuB1fWySn143Xgsag", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270501, + "created": 1765342824, "currency": "eur", - "customer": "cus_TMVGIRLkkRO5XO", + "customer": "cus_TZpA2WMOLsIZcr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG9KuuB1fWySn0SEkpBGa", + "latest_charge": "ch_3ScfVkKuuB1fWySn1XV2ZuGG", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG9KuuB1fWySnvavHuvr9", + "payment_method": "pm_1ScfVkKuuB1fWySniwNxRr9v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:02 GMT + recorded_at: Wed, 10 Dec 2025 05:00:56 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG9KuuB1fWySn0W0QY0oa + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVkKuuB1fWySn143Xgsag body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_rbfCg7ZN4rqDap","request_duration_ms":990}}' + - '{"last_request_metrics":{"request_id":"req_ogrQTkYYTb9rMe","request_duration_ms":914}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:02 GMT + - Wed, 10 Dec 2025 05:00:26 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_UuieVBjXPmF6oP + - req_chRXOVX0U2FEnk Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG9KuuB1fWySn0W0QY0oa", + "id": "pi_3ScfVkKuuB1fWySn143Xgsag", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270501, + "created": 1765342824, "currency": "eur", - "customer": "cus_TMVGIRLkkRO5XO", + "customer": "cus_TZpA2WMOLsIZcr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG9KuuB1fWySn0SEkpBGa", + "latest_charge": "ch_3ScfVkKuuB1fWySn1XV2ZuGG", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG9KuuB1fWySnvavHuvr9", + "payment_method": "pm_1ScfVkKuuB1fWySniwNxRr9v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,24 +505,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:02 GMT + recorded_at: Wed, 10 Dec 2025 05:00:56 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG9KuuB1fWySn0W0QY0oa/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVkKuuB1fWySn143Xgsag/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_UuieVBjXPmF6oP","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_chRXOVX0U2FEnk","request_duration_ms":315}}' Idempotency-Key: - - dac124b9-1282-436f-b158-2345977141d4 + - b61549d2-444c-4de1-903c-4af82e6c3431 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -538,11 +539,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:04 GMT + - Wed, 10 Dec 2025 05:00:27 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -561,17 +562,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - dac124b9-1282-436f-b158-2345977141d4 + - b61549d2-444c-4de1-903c-4af82e6c3431 Original-Request: - - req_pT8hyZBO1oGgnM + - req_mtQrqgQE3TV9jr Request-Id: - - req_pT8hyZBO1oGgnM + - req_mtQrqgQE3TV9jr Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -586,7 +587,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG9KuuB1fWySn0W0QY0oa", + "id": "pi_3ScfVkKuuB1fWySn143Xgsag", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -602,19 +603,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270501, + "created": 1765342824, "currency": "eur", - "customer": "cus_TMVGIRLkkRO5XO", + "customer": "cus_TZpA2WMOLsIZcr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG9KuuB1fWySn0SEkpBGa", + "latest_charge": "ch_3ScfVkKuuB1fWySn1XV2ZuGG", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG9KuuB1fWySnvavHuvr9", + "payment_method": "pm_1ScfVkKuuB1fWySniwNxRr9v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -639,22 +640,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:04 GMT + recorded_at: Wed, 10 Dec 2025 05:00:57 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG9KuuB1fWySn0W0QY0oa + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVkKuuB1fWySn143Xgsag body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_pT8hyZBO1oGgnM","request_duration_ms":1633}}' + - '{"last_request_metrics":{"request_id":"req_mtQrqgQE3TV9jr","request_duration_ms":1235}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -669,11 +670,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:04 GMT + - Wed, 10 Dec 2025 05:00:27 GMT Content-Type: - application/json Content-Length: - - '1424' + - '1433' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -692,11 +693,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ijlqRdHi6jPS7T + - req_7Ez5Jnev856LUE Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -711,7 +712,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG9KuuB1fWySn0W0QY0oa", + "id": "pi_3ScfVkKuuB1fWySn143Xgsag", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -727,19 +728,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270501, + "created": 1765342824, "currency": "eur", - "customer": "cus_TMVGIRLkkRO5XO", + "customer": "cus_TZpA2WMOLsIZcr", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG9KuuB1fWySn0SEkpBGa", + "latest_charge": "ch_3ScfVkKuuB1fWySn1XV2ZuGG", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG9KuuB1fWySnvavHuvr9", + "payment_method": "pm_1ScfVkKuuB1fWySniwNxRr9v", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -764,5 +765,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:04 GMT + recorded_at: Wed, 10 Dec 2025 05:00:58 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml similarity index 80% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml index 8b58b2675c..fb9eef0ed6 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_Stripe_customer/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VRt2vUteOGVdoA","request_duration_ms":405}}' + - '{"last_request_metrics":{"request_id":"req_fhEf3hMIf1LDxy","request_duration_ms":349}}' Idempotency-Key: - - f9ae37a1-5f3f-467f-a723-576f295968ac + - f7ce3572-a29d-42e4-9b23-5a116aff5727 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:58 GMT + - Wed, 10 Dec 2025 05:00:22 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f9ae37a1-5f3f-467f-a723-576f295968ac + - f7ce3572-a29d-42e4-9b23-5a116aff5727 Original-Request: - - req_01dTOsm5Ipz4oN + - req_I8WFGdCWIdFFty Request-Id: - - req_01dTOsm5Ipz4oN + - req_I8WFGdCWIdFFty Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,18 +81,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TMVGcRwlWJFIvD", + "id": "cus_TZpAztQeZXuZL1", "object": "customer", "address": null, "balance": 0, - "created": 1762270498, + "created": 1765342821, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "BI12CGH1", + "invoice_prefix": "NIJVHU6Z", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -109,24 +110,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 04 Nov 2025 15:34:58 GMT + recorded_at: Wed, 10 Dec 2025 05:00:52 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents body: encoding: UTF-8 - string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TMVGcRwlWJFIvD&setup_future_usage=off_session + string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual&customer=cus_TZpAztQeZXuZL1&setup_future_usage=off_session headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_01dTOsm5Ipz4oN","request_duration_ms":417}}' + - '{"last_request_metrics":{"request_id":"req_I8WFGdCWIdFFty","request_duration_ms":428}}' Idempotency-Key: - - 90811430-ac6d-41fb-afdd-04d4822dd3ea + - 0fda52d8-ca98-4ab2-b009-86f0c857c8e8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -143,11 +144,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:58 GMT + - Wed, 10 Dec 2025 05:00:22 GMT Content-Type: - application/json Content-Length: - - '1409' + - '1418' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -166,17 +167,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 90811430-ac6d-41fb-afdd-04d4822dd3ea + - 0fda52d8-ca98-4ab2-b009-86f0c857c8e8 Original-Request: - - req_P13FW2v8xgi6Nz + - req_zsUAvjFLC9O2dt Request-Id: - - req_P13FW2v8xgi6Nz + - req_zsUAvjFLC9O2dt Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -191,7 +192,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG6KuuB1fWySn0raQMRpv", + "id": "pi_3ScfViKuuB1fWySn2ROrEym3", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -207,19 +208,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270498, + "created": 1765342822, "currency": "eur", - "customer": "cus_TMVGcRwlWJFIvD", + "customer": "cus_TZpAztQeZXuZL1", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG6KuuB1fWySnIuff9px3", + "payment_method": "pm_1ScfViKuuB1fWySn7rB5TBDL", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -244,24 +245,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:59 GMT + recorded_at: Wed, 10 Dec 2025 05:00:53 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG6KuuB1fWySn0raQMRpv/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfViKuuB1fWySn2ROrEym3/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_P13FW2v8xgi6Nz","request_duration_ms":404}}' + - '{"last_request_metrics":{"request_id":"req_zsUAvjFLC9O2dt","request_duration_ms":459}}' Idempotency-Key: - - 745b145e-b685-42fa-a327-04df00d854e0 + - 43f70325-9841-460a-a8a1-2d67042765ef Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -278,11 +279,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:59 GMT + - Wed, 10 Dec 2025 05:00:23 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -301,17 +302,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 745b145e-b685-42fa-a327-04df00d854e0 + - 43f70325-9841-460a-a8a1-2d67042765ef Original-Request: - - req_P57jayVCivw8pl + - req_7beJd9bv36Nh2B Request-Id: - - req_P57jayVCivw8pl + - req_7beJd9bv36Nh2B Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -326,7 +327,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG6KuuB1fWySn0raQMRpv", + "id": "pi_3ScfViKuuB1fWySn2ROrEym3", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -342,19 +343,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270498, + "created": 1765342822, "currency": "eur", - "customer": "cus_TMVGcRwlWJFIvD", + "customer": "cus_TZpAztQeZXuZL1", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG6KuuB1fWySn02CPTF23", + "latest_charge": "ch_3ScfViKuuB1fWySn2RPjPyrE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG6KuuB1fWySnIuff9px3", + "payment_method": "pm_1ScfViKuuB1fWySn7rB5TBDL", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -379,22 +380,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:59 GMT + recorded_at: Wed, 10 Dec 2025 05:00:54 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmG6KuuB1fWySn0raQMRpv + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfViKuuB1fWySn2ROrEym3 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_P57jayVCivw8pl","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_7beJd9bv36Nh2B","request_duration_ms":1042}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -409,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:35:00 GMT + - Wed, 10 Dec 2025 05:00:23 GMT Content-Type: - application/json Content-Length: - - '1431' + - '1440' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -432,11 +433,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_jI7YvkInGDIiMW + - req_KlIfmKFbrQVOjR Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -451,7 +452,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmG6KuuB1fWySn0raQMRpv", + "id": "pi_3ScfViKuuB1fWySn2ROrEym3", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -467,19 +468,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270498, + "created": 1765342822, "currency": "eur", - "customer": "cus_TMVGcRwlWJFIvD", + "customer": "cus_TZpAztQeZXuZL1", + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmG6KuuB1fWySn02CPTF23", + "latest_charge": "ch_3ScfViKuuB1fWySn2RPjPyrE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmG6KuuB1fWySnIuff9px3", + "payment_method": "pm_1ScfViKuuB1fWySn7rB5TBDL", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -504,5 +505,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:35:00 GMT + recorded_at: Wed, 10 Dec 2025 05:00:54 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 86% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 38bf16de7f..ade5d9683c 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Exceeding_velocity_limit_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedVelocityLimitExceeded&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 0a46cb1c-5bdd-4f83-987e-4d223c7fdf0b + - e310dc60-9271-4a1c-9c06-03a75bf972e4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:50 GMT + - Wed, 10 Dec 2025 05:00:14 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 0a46cb1c-5bdd-4f83-987e-4d223c7fdf0b + - e310dc60-9271-4a1c-9c06-03a75bf972e4 Original-Request: - - req_HzNCaFm0hO8lRH + - req_f8omkztLii5S1x Request-Id: - - req_HzNCaFm0hO8lRH + - req_f8omkztLii5S1x Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFyKuuB1fWySn27KFvHwl", + "id": "pi_3ScfVaKuuB1fWySn2dI3iGuq", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270490, + "created": 1765342814, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFyKuuB1fWySnHgGTfnDy", + "payment_method": "pm_1ScfVZKuuB1fWySneIRkqzRN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:50 GMT + recorded_at: Wed, 10 Dec 2025 05:00:44 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFyKuuB1fWySn27KFvHwl/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVaKuuB1fWySn2dI3iGuq/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_HzNCaFm0hO8lRH","request_duration_ms":395}}' + - '{"last_request_metrics":{"request_id":"req_f8omkztLii5S1x","request_duration_ms":460}}' Idempotency-Key: - - 4378929f-2097-40de-a508-7f698ee2b64b + - 631ce5b5-b8e7-4ae2-a7b8-3cd81ad7ad31 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:51 GMT + - Wed, 10 Dec 2025 05:00:15 GMT Content-Type: - application/json Content-Length: - - '5401' + - '5478' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4378929f-2097-40de-a508-7f698ee2b64b + - 631ce5b5-b8e7-4ae2-a7b8-3cd81ad7ad31 Original-Request: - - req_lhynTJ2UCLIpZV + - req_8RRTVUy2vV93Sv Request-Id: - - req_lhynTJ2UCLIpZV + - req_8RRTVUy2vV93Sv Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFyKuuB1fWySn26c2FCet", + "charge": "ch_3ScfVaKuuB1fWySn23zPYwca", "code": "card_declined", "decline_code": "card_velocity_exceeded", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -224,7 +224,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "61", "payment_intent": { - "id": "pi_3SPmFyKuuB1fWySn27KFvHwl", + "id": "pi_3ScfVaKuuB1fWySn2dI3iGuq", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -240,15 +240,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270490, + "created": 1765342814, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFyKuuB1fWySn26c2FCet", + "charge": "ch_3ScfVaKuuB1fWySn23zPYwca", "code": "card_declined", "decline_code": "card_velocity_exceeded", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -256,7 +256,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "61", "payment_method": { - "id": "pm_1SPmFyKuuB1fWySnHgGTfnDy", + "id": "pm_1ScfVZKuuB1fWySneIRkqzRN", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -282,7 +282,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "WoxwxVPUPcg0EjXW", "funding": "credit", @@ -300,15 +300,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270490, + "created": 1765342813, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFyKuuB1fWySn26c2FCet", + "latest_charge": "ch_3ScfVaKuuB1fWySn23zPYwca", "livemode": false, "metadata": {}, "next_action": null, @@ -339,7 +340,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFyKuuB1fWySnHgGTfnDy", + "id": "pm_1ScfVZKuuB1fWySneIRkqzRN", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -365,7 +366,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "WoxwxVPUPcg0EjXW", "funding": "credit", @@ -383,15 +384,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270490, + "created": 1765342813, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_lhynTJ2UCLIpZV?t=1762270490", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_8RRTVUy2vV93Sv?t=1765342814", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:51 GMT + recorded_at: Wed, 10 Dec 2025 05:00:45 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 5fc3dc21a9..7fbadf19f4 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Expired_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedExpiredCard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - ca108eb0-2ed9-4d6b-93ce-c28926a40f32 + - b26c7dff-b553-4b64-be49-5fad9f61bff8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:45 GMT + - Wed, 10 Dec 2025 05:00:09 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - ca108eb0-2ed9-4d6b-93ce-c28926a40f32 + - b26c7dff-b553-4b64-be49-5fad9f61bff8 Original-Request: - - req_i3dDeAKdzXYymq + - req_nAF18onbRyFWZz Request-Id: - - req_i3dDeAKdzXYymq + - req_nAF18onbRyFWZz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFtKuuB1fWySn0Xiexfez", + "id": "pi_3ScfVVKuuB1fWySn2Y4U9LJt", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270485, + "created": 1765342809, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFtKuuB1fWySnXpPNoptA", + "payment_method": "pm_1ScfVVKuuB1fWySnCqbYBhhJ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:46 GMT + recorded_at: Wed, 10 Dec 2025 05:00:40 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFtKuuB1fWySn0Xiexfez/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVVKuuB1fWySn2Y4U9LJt/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_i3dDeAKdzXYymq","request_duration_ms":447}}' + - '{"last_request_metrics":{"request_id":"req_nAF18onbRyFWZz","request_duration_ms":496}}' Idempotency-Key: - - 2bd6d38e-9480-491a-bfd4-f678bdef81f3 + - e58df520-ee9d-4d1b-8bec-fcebd1a98309 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:46 GMT + - Wed, 10 Dec 2025 05:00:10 GMT Content-Type: - application/json Content-Length: - - '5287' + - '5364' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 2bd6d38e-9480-491a-bfd4-f678bdef81f3 + - e58df520-ee9d-4d1b-8bec-fcebd1a98309 Original-Request: - - req_B9b3BtPxA4yuhO + - req_egwAylA3vBFT1F Request-Id: - - req_B9b3BtPxA4yuhO + - req_egwAylA3vBFT1F Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmFtKuuB1fWySn0HxWqUyA", + "charge": "ch_3ScfVVKuuB1fWySn2zkIgCrx", "code": "expired_card", "decline_code": "expired_card", "doc_url": "https://stripe.com/docs/error-codes/expired-card", @@ -225,7 +225,7 @@ http_interactions: "network_decline_code": "54", "param": "exp_month", "payment_intent": { - "id": "pi_3SPmFtKuuB1fWySn0Xiexfez", + "id": "pi_3ScfVVKuuB1fWySn2Y4U9LJt", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -241,15 +241,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270485, + "created": 1765342809, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmFtKuuB1fWySn0HxWqUyA", + "charge": "ch_3ScfVVKuuB1fWySn2zkIgCrx", "code": "expired_card", "decline_code": "expired_card", "doc_url": "https://stripe.com/docs/error-codes/expired-card", @@ -258,7 +258,7 @@ http_interactions: "network_decline_code": "54", "param": "exp_month", "payment_method": { - "id": "pm_1SPmFtKuuB1fWySnXpPNoptA", + "id": "pm_1ScfVVKuuB1fWySnCqbYBhhJ", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -284,7 +284,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "qpQikrTL7IyNA2rE", "funding": "credit", @@ -302,15 +302,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270485, + "created": 1765342809, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFtKuuB1fWySn0HxWqUyA", + "latest_charge": "ch_3ScfVVKuuB1fWySn2zkIgCrx", "livemode": false, "metadata": {}, "next_action": null, @@ -341,7 +342,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFtKuuB1fWySnXpPNoptA", + "id": "pm_1ScfVVKuuB1fWySnCqbYBhhJ", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -367,7 +368,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "qpQikrTL7IyNA2rE", "funding": "credit", @@ -385,15 +386,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270485, + "created": 1765342809, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_B9b3BtPxA4yuhO?t=1762270486", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_egwAylA3vBFT1F?t=1765342809", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:47 GMT + recorded_at: Wed, 10 Dec 2025 05:00:41 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index bb632a9d2b..aa2698fff7 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Generic_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclined&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_hjDjyr8Uk8EC2o","request_duration_ms":398}}' + - '{"last_request_metrics":{"request_id":"req_YFZzrNQpbV6UVG","request_duration_ms":334}}' Idempotency-Key: - - 6358a1b1-960f-40e6-8b6e-9bdb20475732 + - eb88b578-d5a5-4ee8-878e-e3b548123f06 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:40 GMT + - Wed, 10 Dec 2025 05:00:04 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6358a1b1-960f-40e6-8b6e-9bdb20475732 + - eb88b578-d5a5-4ee8-878e-e3b548123f06 Original-Request: - - req_cErvP7w6o6b0qW + - req_OvIZkJle1R8UBq Request-Id: - - req_cErvP7w6o6b0qW + - req_OvIZkJle1R8UBq Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFnKuuB1fWySn0eYfhWTr", + "id": "pi_3ScfVPKuuB1fWySn0AqsSAAs", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270479, + "created": 1765342803, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFnKuuB1fWySnPYa33oDp", + "payment_method": "pm_1ScfVPKuuB1fWySnq5Y2UARH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:40 GMT + recorded_at: Wed, 10 Dec 2025 05:00:34 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFnKuuB1fWySn0eYfhWTr/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVPKuuB1fWySn0AqsSAAs/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cErvP7w6o6b0qW","request_duration_ms":435}}' + - '{"last_request_metrics":{"request_id":"req_OvIZkJle1R8UBq","request_duration_ms":433}}' Idempotency-Key: - - 0e581692-5d5e-4907-8317-981f775a044d + - d0fb05ac-b33b-4ac4-a17b-73c70601a551 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:41 GMT + - Wed, 10 Dec 2025 05:00:05 GMT Content-Type: - application/json Content-Length: - - '5169' + - '5246' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 0e581692-5d5e-4907-8317-981f775a044d + - d0fb05ac-b33b-4ac4-a17b-73c70601a551 Original-Request: - - req_8Zz281sujD9rpb + - req_qpugIJE5y0s5T2 Request-Id: - - req_8Zz281sujD9rpb + - req_qpugIJE5y0s5T2 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -218,14 +218,14 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFnKuuB1fWySn0nuIwH0V", + "charge": "ch_3ScfVPKuuB1fWySn05KntjLl", "code": "card_declined", "decline_code": "generic_decline", "doc_url": "https://stripe.com/docs/error-codes/card-declined", "message": "Your card was declined.", "network_decline_code": "01", "payment_intent": { - "id": "pi_3SPmFnKuuB1fWySn0eYfhWTr", + "id": "pi_3ScfVPKuuB1fWySn0AqsSAAs", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -241,22 +241,22 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270479, + "created": 1765342803, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFnKuuB1fWySn0nuIwH0V", + "charge": "ch_3ScfVPKuuB1fWySn05KntjLl", "code": "card_declined", "decline_code": "generic_decline", "doc_url": "https://stripe.com/docs/error-codes/card-declined", "message": "Your card was declined.", "network_decline_code": "01", "payment_method": { - "id": "pm_1SPmFnKuuB1fWySnPYa33oDp", + "id": "pm_1ScfVPKuuB1fWySnq5Y2UARH", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -282,7 +282,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "IKC2ubfpSLuZKsVs", "funding": "credit", @@ -300,15 +300,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270479, + "created": 1765342803, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFnKuuB1fWySn0nuIwH0V", + "latest_charge": "ch_3ScfVPKuuB1fWySn05KntjLl", "livemode": false, "metadata": {}, "next_action": null, @@ -339,7 +340,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFnKuuB1fWySnPYa33oDp", + "id": "pm_1ScfVPKuuB1fWySnq5Y2UARH", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -365,7 +366,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "IKC2ubfpSLuZKsVs", "funding": "credit", @@ -383,15 +384,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270479, + "created": 1765342803, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_8Zz281sujD9rpb?t=1762270480", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_qpugIJE5y0s5T2?t=1765342804", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:41 GMT + recorded_at: Wed, 10 Dec 2025 05:00:35 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 52d70f6ae4..73948b06b5 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Incorrect_CVC_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedIncorrectCvc&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 2d8661b7-6a2c-4d39-820e-925e821c7627 + - 6fd452c3-f177-428e-a2d1-992318b188ed Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:47 GMT + - Wed, 10 Dec 2025 05:00:11 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 2d8661b7-6a2c-4d39-820e-925e821c7627 + - 6fd452c3-f177-428e-a2d1-992318b188ed Original-Request: - - req_hidhscDcUh5rxA + - req_Z826eeGPHstkNc Request-Id: - - req_hidhscDcUh5rxA + - req_Z826eeGPHstkNc Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFvKuuB1fWySn1Gh7vbuK", + "id": "pi_3ScfVXKuuB1fWySn1d2bsEje", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270487, + "created": 1765342811, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFvKuuB1fWySnBAPmVkWu", + "payment_method": "pm_1ScfVXKuuB1fWySnBhS159K2", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:47 GMT + recorded_at: Wed, 10 Dec 2025 05:00:41 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFvKuuB1fWySn1Gh7vbuK/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVXKuuB1fWySn1d2bsEje/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_hidhscDcUh5rxA","request_duration_ms":448}}' + - '{"last_request_metrics":{"request_id":"req_Z826eeGPHstkNc","request_duration_ms":436}}' Idempotency-Key: - - b040db7f-94e0-4670-9b96-fae019612be9 + - 1f8d9128-9235-4532-9ac6-d3bd5973a496 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:48 GMT + - Wed, 10 Dec 2025 05:00:12 GMT Content-Type: - application/json Content-Length: - - '5315' + - '5392' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b040db7f-94e0-4670-9b96-fae019612be9 + - 1f8d9128-9235-4532-9ac6-d3bd5973a496 Original-Request: - - req_jQ9lonaIkKdlwp + - req_ApVTsZVx2PwX5o Request-Id: - - req_jQ9lonaIkKdlwp + - req_ApVTsZVx2PwX5o Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmFvKuuB1fWySn1YTiWxdV", + "charge": "ch_3ScfVXKuuB1fWySn1VbzGt5I", "code": "incorrect_cvc", "decline_code": "incorrect_cvc", "doc_url": "https://stripe.com/docs/error-codes/incorrect-cvc", @@ -225,7 +225,7 @@ http_interactions: "network_decline_code": "N7", "param": "cvc", "payment_intent": { - "id": "pi_3SPmFvKuuB1fWySn1Gh7vbuK", + "id": "pi_3ScfVXKuuB1fWySn1d2bsEje", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -241,15 +241,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270487, + "created": 1765342811, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "confirm_card_data", - "charge": "ch_3SPmFvKuuB1fWySn1YTiWxdV", + "charge": "ch_3ScfVXKuuB1fWySn1VbzGt5I", "code": "incorrect_cvc", "decline_code": "incorrect_cvc", "doc_url": "https://stripe.com/docs/error-codes/incorrect-cvc", @@ -258,7 +258,7 @@ http_interactions: "network_decline_code": "N7", "param": "cvc", "payment_method": { - "id": "pm_1SPmFvKuuB1fWySnBAPmVkWu", + "id": "pm_1ScfVXKuuB1fWySnBhS159K2", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -284,7 +284,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "eWmxEL5j3bNdPnK5", "funding": "credit", @@ -302,15 +302,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270487, + "created": 1765342811, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFvKuuB1fWySn1YTiWxdV", + "latest_charge": "ch_3ScfVXKuuB1fWySn1VbzGt5I", "livemode": false, "metadata": {}, "next_action": null, @@ -341,7 +342,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFvKuuB1fWySnBAPmVkWu", + "id": "pm_1ScfVXKuuB1fWySnBhS159K2", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -367,7 +368,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "eWmxEL5j3bNdPnK5", "funding": "credit", @@ -385,15 +386,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270487, + "created": 1765342811, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_jQ9lonaIkKdlwp?t=1762270487", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_ApVTsZVx2PwX5o?t=1765342811", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:48 GMT + recorded_at: Wed, 10 Dec 2025 05:00:42 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 7f76ae2885..a59c487f7b 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Insufficient_funds_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedInsufficientFunds&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 8448ac58-f932-48d7-95c6-53505f8f15ee + - 13012d98-c96d-4ca4-a4e9-b9fb99f5f390 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:41 GMT + - Wed, 10 Dec 2025 05:00:05 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 8448ac58-f932-48d7-95c6-53505f8f15ee + - 13012d98-c96d-4ca4-a4e9-b9fb99f5f390 Original-Request: - - req_N9AvZzfH3sKoy9 + - req_TMk7LbqyMdwvBL Request-Id: - - req_N9AvZzfH3sKoy9 + - req_TMk7LbqyMdwvBL Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFpKuuB1fWySn2Fhv39tY", + "id": "pi_3ScfVRKuuB1fWySn2KDF24BI", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270481, + "created": 1765342805, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFpKuuB1fWySnPqdoRUKc", + "payment_method": "pm_1ScfVRKuuB1fWySnseiktq8U", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:41 GMT + recorded_at: Wed, 10 Dec 2025 05:00:36 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFpKuuB1fWySn2Fhv39tY/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVRKuuB1fWySn2KDF24BI/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_N9AvZzfH3sKoy9","request_duration_ms":389}}' + - '{"last_request_metrics":{"request_id":"req_TMk7LbqyMdwvBL","request_duration_ms":450}}' Idempotency-Key: - - b75f0f10-b419-4e55-8042-01211d111056 + - 24848969-c550-4aa1-afb3-3566cf1f2b29 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:42 GMT + - Wed, 10 Dec 2025 05:00:06 GMT Content-Type: - application/json Content-Length: - - '5265' + - '5342' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b75f0f10-b419-4e55-8042-01211d111056 + - 24848969-c550-4aa1-afb3-3566cf1f2b29 Original-Request: - - req_f3QESbekK3oFtT + - req_ARQ3pXKZGWKm81 Request-Id: - - req_f3QESbekK3oFtT + - req_ARQ3pXKZGWKm81 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFpKuuB1fWySn2gUNNPLJ", + "charge": "ch_3ScfVRKuuB1fWySn2RleKsFu", "code": "card_declined", "decline_code": "insufficient_funds", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -224,7 +224,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "51", "payment_intent": { - "id": "pi_3SPmFpKuuB1fWySn2Fhv39tY", + "id": "pi_3ScfVRKuuB1fWySn2KDF24BI", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -240,15 +240,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270481, + "created": 1765342805, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFpKuuB1fWySn2gUNNPLJ", + "charge": "ch_3ScfVRKuuB1fWySn2RleKsFu", "code": "card_declined", "decline_code": "insufficient_funds", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -256,7 +256,7 @@ http_interactions: "network_advice_code": "02", "network_decline_code": "51", "payment_method": { - "id": "pm_1SPmFpKuuB1fWySnPqdoRUKc", + "id": "pm_1ScfVRKuuB1fWySnseiktq8U", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -282,7 +282,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "O0I0muUGQBJy3p73", "funding": "credit", @@ -300,15 +300,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270481, + "created": 1765342805, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFpKuuB1fWySn2gUNNPLJ", + "latest_charge": "ch_3ScfVRKuuB1fWySn2RleKsFu", "livemode": false, "metadata": {}, "next_action": null, @@ -339,7 +340,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFpKuuB1fWySnPqdoRUKc", + "id": "pm_1ScfVRKuuB1fWySnseiktq8U", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -365,7 +366,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "O0I0muUGQBJy3p73", "funding": "credit", @@ -383,15 +384,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270481, + "created": 1765342805, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_f3QESbekK3oFtT?t=1762270481", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_ARQ3pXKZGWKm81?t=1765342805", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:42 GMT + recorded_at: Wed, 10 Dec 2025 05:00:37 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 657e541fb9..6d2e91738e 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Lost_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedLostCard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 740ffbb4-d955-491b-8bb6-28789aa1701e + - 5bb632cd-1f9e-49da-99b7-4d1fb3fe7fb3 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:42 GMT + - Wed, 10 Dec 2025 05:00:06 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 740ffbb4-d955-491b-8bb6-28789aa1701e + - 5bb632cd-1f9e-49da-99b7-4d1fb3fe7fb3 Original-Request: - - req_n7vn01RiD9lAyv + - req_7Z8czRUj9ZYTBl Request-Id: - - req_n7vn01RiD9lAyv + - req_7Z8czRUj9ZYTBl Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFqKuuB1fWySn0ZvmhhnF", + "id": "pi_3ScfVSKuuB1fWySn1nOF5UGP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270482, + "created": 1765342806, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFqKuuB1fWySnkBRgGtgg", + "payment_method": "pm_1ScfVSKuuB1fWySn2mCMRrcd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:43 GMT + recorded_at: Wed, 10 Dec 2025 05:00:37 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFqKuuB1fWySn0ZvmhhnF/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVSKuuB1fWySn1nOF5UGP/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_n7vn01RiD9lAyv","request_duration_ms":447}}' + - '{"last_request_metrics":{"request_id":"req_7Z8czRUj9ZYTBl","request_duration_ms":446}}' Idempotency-Key: - - 63dbd6d8-e731-4451-a310-fb5a2d1c94de + - 26cb5b5f-a50a-4fa2-aa06-61c8e4a23925 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:43 GMT + - Wed, 10 Dec 2025 05:00:07 GMT Content-Type: - application/json Content-Length: - - '5229' + - '5306' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 63dbd6d8-e731-4451-a310-fb5a2d1c94de + - 26cb5b5f-a50a-4fa2-aa06-61c8e4a23925 Original-Request: - - req_3chN8qlQZJtszh + - req_XgbiZrx8T6wsWf Request-Id: - - req_3chN8qlQZJtszh + - req_XgbiZrx8T6wsWf Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmFqKuuB1fWySn0BKsmaRL", + "charge": "ch_3ScfVSKuuB1fWySn19zgQhj3", "code": "card_declined", "decline_code": "lost_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -224,7 +224,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "41", "payment_intent": { - "id": "pi_3SPmFqKuuB1fWySn0ZvmhhnF", + "id": "pi_3ScfVSKuuB1fWySn1nOF5UGP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -240,15 +240,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270482, + "created": 1765342806, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmFqKuuB1fWySn0BKsmaRL", + "charge": "ch_3ScfVSKuuB1fWySn19zgQhj3", "code": "card_declined", "decline_code": "lost_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -256,7 +256,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "41", "payment_method": { - "id": "pm_1SPmFqKuuB1fWySnkBRgGtgg", + "id": "pm_1ScfVSKuuB1fWySn2mCMRrcd", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -282,7 +282,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "hMDekBwrnWL1oLxe", "funding": "credit", @@ -300,15 +300,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270482, + "created": 1765342806, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFqKuuB1fWySn0BKsmaRL", + "latest_charge": "ch_3ScfVSKuuB1fWySn19zgQhj3", "livemode": false, "metadata": {}, "next_action": null, @@ -339,7 +340,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFqKuuB1fWySnkBRgGtgg", + "id": "pm_1ScfVSKuuB1fWySn2mCMRrcd", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -365,7 +366,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "hMDekBwrnWL1oLxe", "funding": "credit", @@ -383,15 +384,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270482, + "created": 1765342806, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_3chN8qlQZJtszh?t=1762270483", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_XgbiZrx8T6wsWf?t=1765342807", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:43 GMT + recorded_at: Wed, 10 Dec 2025 05:00:38 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 9157a6173d..542fec8868 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Processing_error_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_chargeDeclinedProcessingError&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - d5e5d56c-3efe-4c2c-a5f7-228f14061217 + - dc407f06-6ca4-44df-a40b-085f3af6d5d6 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:49 GMT + - Wed, 10 Dec 2025 05:00:12 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d5e5d56c-3efe-4c2c-a5f7-228f14061217 + - dc407f06-6ca4-44df-a40b-085f3af6d5d6 Original-Request: - - req_aqxxjt2vCPAyFO + - req_qD1UQXWn8TSb9b Request-Id: - - req_aqxxjt2vCPAyFO + - req_qD1UQXWn8TSb9b Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFwKuuB1fWySn1llgTFeW", + "id": "pi_3ScfVYKuuB1fWySn2EWoMUTA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270488, + "created": 1765342812, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFwKuuB1fWySn395lOna0", + "payment_method": "pm_1ScfVYKuuB1fWySnJ0t6af2J", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:49 GMT + recorded_at: Wed, 10 Dec 2025 05:00:43 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFwKuuB1fWySn1llgTFeW/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVYKuuB1fWySn2EWoMUTA/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aqxxjt2vCPAyFO","request_duration_ms":441}}' + - '{"last_request_metrics":{"request_id":"req_qD1UQXWn8TSb9b","request_duration_ms":469}}' Idempotency-Key: - - 57d3bf71-9b69-48ed-af89-9ab95f243643 + - adcd30ff-4b96-43d5-a883-544b4262b0a7 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:49 GMT + - Wed, 10 Dec 2025 05:00:13 GMT Content-Type: - application/json Content-Length: - - '5281' + - '5358' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 57d3bf71-9b69-48ed-af89-9ab95f243643 + - adcd30ff-4b96-43d5-a883-544b4262b0a7 Original-Request: - - req_XPBa45k7snnrgx + - req_iNSPbByemn6VB4 Request-Id: - - req_XPBa45k7snnrgx + - req_iNSPbByemn6VB4 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,14 +216,14 @@ http_interactions: { "error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFwKuuB1fWySn1b1LaSNH", + "charge": "ch_3ScfVYKuuB1fWySn22M8K4UI", "code": "processing_error", "decline_code": "processing_error", "doc_url": "https://stripe.com/docs/error-codes/processing-error", "message": "An error occurred while processing your card. Try again in a little bit.", "network_decline_code": "06", "payment_intent": { - "id": "pi_3SPmFwKuuB1fWySn1llgTFeW", + "id": "pi_3ScfVYKuuB1fWySn2EWoMUTA", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -239,22 +239,22 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270488, + "created": 1765342812, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "try_again_later", - "charge": "ch_3SPmFwKuuB1fWySn1b1LaSNH", + "charge": "ch_3ScfVYKuuB1fWySn22M8K4UI", "code": "processing_error", "decline_code": "processing_error", "doc_url": "https://stripe.com/docs/error-codes/processing-error", "message": "An error occurred while processing your card. Try again in a little bit.", "network_decline_code": "06", "payment_method": { - "id": "pm_1SPmFwKuuB1fWySn395lOna0", + "id": "pm_1ScfVYKuuB1fWySnJ0t6af2J", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -280,7 +280,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "9HWWxe4EyniQy61z", "funding": "credit", @@ -298,15 +298,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270488, + "created": 1765342812, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFwKuuB1fWySn1b1LaSNH", + "latest_charge": "ch_3ScfVYKuuB1fWySn22M8K4UI", "livemode": false, "metadata": {}, "next_action": null, @@ -337,7 +338,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFwKuuB1fWySn395lOna0", + "id": "pm_1ScfVYKuuB1fWySnJ0t6af2J", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -363,7 +364,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "9HWWxe4EyniQy61z", "funding": "credit", @@ -381,15 +382,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270488, + "created": 1765342812, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_XPBa45k7snnrgx?t=1762270489", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_iNSPbByemn6VB4?t=1765342812", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:50 GMT + recorded_at: Wed, 10 Dec 2025 05:00:44 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml similarity index 85% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml index 31f41f8dc2..9e1f6bcb4c 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_invalid/from_Stolen_card_decline/raises_Stripe_error_with_payment_intent_last_payment_error_as_message.yml @@ -8,13 +8,13 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_chargeDeclinedStolenCard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 31104fab-9174-4ffb-b16f-7a962fee2007 + - 977bc686-6421-40d8-b8a6-9d22a5610478 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:44 GMT + - Wed, 10 Dec 2025 05:00:08 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 31104fab-9174-4ffb-b16f-7a962fee2007 + - 977bc686-6421-40d8-b8a6-9d22a5610478 Original-Request: - - req_fhAAxXsJzpDXir + - req_L4umomv5u4QF8o Request-Id: - - req_fhAAxXsJzpDXir + - req_L4umomv5u4QF8o Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFsKuuB1fWySn2n5X0Kfb", + "id": "pi_3ScfVUKuuB1fWySn0En3gtyV", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -95,19 +95,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270484, + "created": 1765342808, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFsKuuB1fWySnE31Z5E0B", + "payment_method": "pm_1ScfVUKuuB1fWySnUAPKSLdh", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -132,24 +132,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:44 GMT + recorded_at: Wed, 10 Dec 2025 05:00:39 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFsKuuB1fWySn2n5X0Kfb/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVUKuuB1fWySn0En3gtyV/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_fhAAxXsJzpDXir","request_duration_ms":446}}' + - '{"last_request_metrics":{"request_id":"req_L4umomv5u4QF8o","request_duration_ms":452}}' Idempotency-Key: - - d534e7fc-48dd-467f-a368-20a2aaf8485b + - ff3f54c7-479a-4575-b295-e84ec331c01f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -166,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:45 GMT + - Wed, 10 Dec 2025 05:00:09 GMT Content-Type: - application/json Content-Length: - - '5233' + - '5310' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -189,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d534e7fc-48dd-467f-a368-20a2aaf8485b + - ff3f54c7-479a-4575-b295-e84ec331c01f Original-Request: - - req_XkqesczAiaVUwm + - req_PaArrSacspfrLU Request-Id: - - req_XkqesczAiaVUwm + - req_PaArrSacspfrLU Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: { "error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmFsKuuB1fWySn2MiCLWFt", + "charge": "ch_3ScfVUKuuB1fWySn0ZheEYtC", "code": "card_declined", "decline_code": "stolen_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -224,7 +224,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "43", "payment_intent": { - "id": "pi_3SPmFsKuuB1fWySn2n5X0Kfb", + "id": "pi_3ScfVUKuuB1fWySn0En3gtyV", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -240,15 +240,15 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270484, + "created": 1765342808, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": { "advice_code": "do_not_try_again", - "charge": "ch_3SPmFsKuuB1fWySn2MiCLWFt", + "charge": "ch_3ScfVUKuuB1fWySn0ZheEYtC", "code": "card_declined", "decline_code": "stolen_card", "doc_url": "https://stripe.com/docs/error-codes/card-declined", @@ -256,7 +256,7 @@ http_interactions: "network_advice_code": "01", "network_decline_code": "43", "payment_method": { - "id": "pm_1SPmFsKuuB1fWySnE31Z5E0B", + "id": "pm_1ScfVUKuuB1fWySnUAPKSLdh", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -282,7 +282,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "1pjhEFFOW1eCi1AB", "funding": "credit", @@ -300,15 +300,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270484, + "created": 1765342808, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, "type": "card_error" }, - "latest_charge": "ch_3SPmFsKuuB1fWySn2MiCLWFt", + "latest_charge": "ch_3ScfVUKuuB1fWySn0ZheEYtC", "livemode": false, "metadata": {}, "next_action": null, @@ -339,7 +340,7 @@ http_interactions: "transfer_group": null }, "payment_method": { - "id": "pm_1SPmFsKuuB1fWySnE31Z5E0B", + "id": "pm_1ScfVUKuuB1fWySnUAPKSLdh", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -365,7 +366,7 @@ http_interactions: }, "country": "US", "display_brand": "visa", - "exp_month": 11, + "exp_month": 12, "exp_year": 2026, "fingerprint": "1pjhEFFOW1eCi1AB", "funding": "credit", @@ -383,15 +384,16 @@ http_interactions: }, "wallet": null }, - "created": 1762270484, + "created": 1765342808, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" }, - "request_log_url": "https://dashboard.stripe.com/test/logs/req_XkqesczAiaVUwm?t=1762270484", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_PaArrSacspfrLU?t=1765342808", "type": "card_error" } } - recorded_at: Tue, 04 Nov 2025 15:34:45 GMT + recorded_at: Wed, 10 Dec 2025 05:00:39 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml index a61fb0de33..875bcb1dfb 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_wUnhRW5SZ5xP4M","request_duration_ms":293}}' + - '{"last_request_metrics":{"request_id":"req_G4sqbl8vGpBcCN","request_duration_ms":311}}' Idempotency-Key: - - cb04080c-cda1-4c3a-9998-785b7eda1276 + - c20fbe0a-0fa3-4aa9-8554-b355454394ab Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:15 GMT + - Wed, 10 Dec 2025 04:59:42 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - cb04080c-cda1-4c3a-9998-785b7eda1276 + - c20fbe0a-0fa3-4aa9-8554-b355454394ab Original-Request: - - req_MGjQ2k0jXx8qUn + - req_vM557wo8bW4QkZ Request-Id: - - req_MGjQ2k0jXx8qUn + - req_vM557wo8bW4QkZ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFPKuuB1fWySn0DwEhyq5", + "id": "pi_3ScfV4KuuB1fWySn2KURdcVT", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270455, + "created": 1765342782, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFPKuuB1fWySnMbOIUQoc", + "payment_method": "pm_1ScfV4KuuB1fWySn5wtnkdWD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:15 GMT + recorded_at: Wed, 10 Dec 2025 05:00:13 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFPKuuB1fWySn0DwEhyq5/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV4KuuB1fWySn2KURdcVT/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MGjQ2k0jXx8qUn","request_duration_ms":539}}' + - '{"last_request_metrics":{"request_id":"req_vM557wo8bW4QkZ","request_duration_ms":421}}' Idempotency-Key: - - d3f60423-2711-40a6-b8bd-683b27957857 + - d46b97ed-ca1c-45f5-971d-6869c9b3f243 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:16 GMT + - Wed, 10 Dec 2025 04:59:43 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d3f60423-2711-40a6-b8bd-683b27957857 + - d46b97ed-ca1c-45f5-971d-6869c9b3f243 Original-Request: - - req_YbZOn8LFIcHDGT + - req_cYoOwMmd6ZwBnT Request-Id: - - req_YbZOn8LFIcHDGT + - req_cYoOwMmd6ZwBnT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFPKuuB1fWySn0DwEhyq5", + "id": "pi_3ScfV4KuuB1fWySn2KURdcVT", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270455, + "created": 1765342782, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFPKuuB1fWySn0fV5mz4B", + "latest_charge": "ch_3ScfV4KuuB1fWySn2Tm2XMrz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFPKuuB1fWySnMbOIUQoc", + "payment_method": "pm_1ScfV4KuuB1fWySn5wtnkdWD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:16 GMT + recorded_at: Wed, 10 Dec 2025 05:00:14 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFPKuuB1fWySn0DwEhyq5 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV4KuuB1fWySn2KURdcVT body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_YbZOn8LFIcHDGT","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_cYoOwMmd6ZwBnT","request_duration_ms":856}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:16 GMT + - Wed, 10 Dec 2025 04:59:43 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ZlREoOyt0Id0Rw + - req_wjHmf8MlRV1dRg Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFPKuuB1fWySn0DwEhyq5", + "id": "pi_3ScfV4KuuB1fWySn2KURdcVT", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270455, + "created": 1765342782, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFPKuuB1fWySn0fV5mz4B", + "latest_charge": "ch_3ScfV4KuuB1fWySn2Tm2XMrz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFPKuuB1fWySnMbOIUQoc", + "payment_method": "pm_1ScfV4KuuB1fWySn5wtnkdWD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:16 GMT + recorded_at: Wed, 10 Dec 2025 05:00:14 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFPKuuB1fWySn0DwEhyq5/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV4KuuB1fWySn2KURdcVT/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ZlREoOyt0Id0Rw","request_duration_ms":302}}' + - '{"last_request_metrics":{"request_id":"req_wjHmf8MlRV1dRg","request_duration_ms":314}}' Idempotency-Key: - - 41233711-6680-4f97-b333-f0f4382c1e10 + - 7bccdc73-d2c6-4ef9-a68d-2792b957d33d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:17 GMT + - Wed, 10 Dec 2025 04:59:44 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 41233711-6680-4f97-b333-f0f4382c1e10 + - 7bccdc73-d2c6-4ef9-a68d-2792b957d33d Original-Request: - - req_KFtEJ9cWLzsAbl + - req_3haFlry2GbKGTb Request-Id: - - req_KFtEJ9cWLzsAbl + - req_3haFlry2GbKGTb Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFPKuuB1fWySn0DwEhyq5", + "id": "pi_3ScfV4KuuB1fWySn2KURdcVT", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270455, + "created": 1765342782, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFPKuuB1fWySn0fV5mz4B", + "latest_charge": "ch_3ScfV4KuuB1fWySn2Tm2XMrz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFPKuuB1fWySnMbOIUQoc", + "payment_method": "pm_1ScfV4KuuB1fWySn5wtnkdWD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:17 GMT + recorded_at: Wed, 10 Dec 2025 05:00:15 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFPKuuB1fWySn0DwEhyq5 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV4KuuB1fWySn2KURdcVT body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_KFtEJ9cWLzsAbl","request_duration_ms":1020}}' + - '{"last_request_metrics":{"request_id":"req_3haFlry2GbKGTb","request_duration_ms":972}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:18 GMT + - Wed, 10 Dec 2025 04:59:45 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_GGjbqSMHNlZlhf + - req_KbtJACqnESjQok Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFPKuuB1fWySn0DwEhyq5", + "id": "pi_3ScfV4KuuB1fWySn2KURdcVT", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270455, + "created": 1765342782, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFPKuuB1fWySn0fV5mz4B", + "latest_charge": "ch_3ScfV4KuuB1fWySn2Tm2XMrz", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFPKuuB1fWySnMbOIUQoc", + "payment_method": "pm_1ScfV4KuuB1fWySn5wtnkdWD", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:18 GMT + recorded_at: Wed, 10 Dec 2025 05:00:15 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml index 3db6fd9cbf..6b2f6f30ef 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_American_Express/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_amex&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_hChFaFK92TH2pX","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_eClvV0tfeGLyuD","request_duration_ms":309}}' Idempotency-Key: - - 4715e5fb-9c83-446f-bb46-6ec7be8c66d4 + - 0cd6eb61-4706-4379-a4ce-8956d3ea54fd Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:13 GMT + - Wed, 10 Dec 2025 04:59:40 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4715e5fb-9c83-446f-bb46-6ec7be8c66d4 + - 0cd6eb61-4706-4379-a4ce-8956d3ea54fd Original-Request: - - req_9UoEZHcHiIrw1E + - req_virvXbRRwKvzuZ Request-Id: - - req_9UoEZHcHiIrw1E + - req_virvXbRRwKvzuZ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFNKuuB1fWySn0s4fTX1n", + "id": "pi_3ScfV2KuuB1fWySn1Z5RjTI7", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270453, + "created": 1765342780, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFMKuuB1fWySn6gw8YPY9", + "payment_method": "pm_1ScfV2KuuB1fWySntkyF67CH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:13 GMT + recorded_at: Wed, 10 Dec 2025 05:00:11 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFNKuuB1fWySn0s4fTX1n/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV2KuuB1fWySn1Z5RjTI7/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9UoEZHcHiIrw1E","request_duration_ms":539}}' + - '{"last_request_metrics":{"request_id":"req_virvXbRRwKvzuZ","request_duration_ms":416}}' Idempotency-Key: - - 96168356-622f-4992-aa82-a454b1b31e7c + - 79f84aaa-eb37-4703-9cdf-d35d82bf771d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:14 GMT + - Wed, 10 Dec 2025 04:59:41 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 96168356-622f-4992-aa82-a454b1b31e7c + - 79f84aaa-eb37-4703-9cdf-d35d82bf771d Original-Request: - - req_7vzFVFFSMfdzxs + - req_ocMAnJ8p1xra3q Request-Id: - - req_7vzFVFFSMfdzxs + - req_ocMAnJ8p1xra3q Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFNKuuB1fWySn0s4fTX1n", + "id": "pi_3ScfV2KuuB1fWySn1Z5RjTI7", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270453, + "created": 1765342780, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFNKuuB1fWySn0N0zoMx0", + "latest_charge": "ch_3ScfV2KuuB1fWySn1CTxSDHZ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFMKuuB1fWySn6gw8YPY9", + "payment_method": "pm_1ScfV2KuuB1fWySntkyF67CH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:14 GMT + recorded_at: Wed, 10 Dec 2025 05:00:12 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFNKuuB1fWySn0s4fTX1n + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV2KuuB1fWySn1Z5RjTI7 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_7vzFVFFSMfdzxs","request_duration_ms":816}}' + - '{"last_request_metrics":{"request_id":"req_ocMAnJ8p1xra3q","request_duration_ms":790}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:14 GMT + - Wed, 10 Dec 2025 04:59:42 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_wUnhRW5SZ5xP4M + - req_G4sqbl8vGpBcCN Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFNKuuB1fWySn0s4fTX1n", + "id": "pi_3ScfV2KuuB1fWySn1Z5RjTI7", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270453, + "created": 1765342780, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFNKuuB1fWySn0N0zoMx0", + "latest_charge": "ch_3ScfV2KuuB1fWySn1CTxSDHZ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFMKuuB1fWySn6gw8YPY9", + "payment_method": "pm_1ScfV2KuuB1fWySntkyF67CH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:14 GMT + recorded_at: Wed, 10 Dec 2025 05:00:12 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml index 40a34cb0fb..2bdfd7bdf0 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_TJsyDQ6Ricr8kM","request_duration_ms":326}}' + - '{"last_request_metrics":{"request_id":"req_U3VoeqQBoVinJ9","request_duration_ms":308}}' Idempotency-Key: - - 3f5ce3d0-1971-489c-a383-3b06bc31e54d + - 92298306-adcd-453d-a62b-a2ee947b2a60 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:25 GMT + - Wed, 10 Dec 2025 04:59:52 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 3f5ce3d0-1971-489c-a383-3b06bc31e54d + - 92298306-adcd-453d-a62b-a2ee947b2a60 Original-Request: - - req_aB7E7pAexnHEiu + - req_9jPKwMeJyxF6wp Request-Id: - - req_aB7E7pAexnHEiu + - req_9jPKwMeJyxF6wp Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFZKuuB1fWySn22KE7RHh", + "id": "pi_3ScfVDKuuB1fWySn0T7l3XWP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270465, + "created": 1765342791, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFZKuuB1fWySnkqGzk5cM", + "payment_method": "pm_1ScfVDKuuB1fWySn2AKZ4Qsf", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:25 GMT + recorded_at: Wed, 10 Dec 2025 05:00:22 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFZKuuB1fWySn22KE7RHh/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVDKuuB1fWySn0T7l3XWP/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aB7E7pAexnHEiu","request_duration_ms":458}}' + - '{"last_request_metrics":{"request_id":"req_9jPKwMeJyxF6wp","request_duration_ms":538}}' Idempotency-Key: - - c6f62a0d-9ad7-4aa9-8394-ff5a7e56eaa3 + - c9c6c6ba-16ed-4b7f-90cc-4057504d419e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:26 GMT + - Wed, 10 Dec 2025 04:59:52 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c6f62a0d-9ad7-4aa9-8394-ff5a7e56eaa3 + - c9c6c6ba-16ed-4b7f-90cc-4057504d419e Original-Request: - - req_OsiyunmCxwRYB7 + - req_in7mPeoiI4iofu Request-Id: - - req_OsiyunmCxwRYB7 + - req_in7mPeoiI4iofu Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFZKuuB1fWySn22KE7RHh", + "id": "pi_3ScfVDKuuB1fWySn0T7l3XWP", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270465, + "created": 1765342791, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFZKuuB1fWySn2Vnigck2", + "latest_charge": "ch_3ScfVDKuuB1fWySn0Pk30gzb", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFZKuuB1fWySnkqGzk5cM", + "payment_method": "pm_1ScfVDKuuB1fWySn2AKZ4Qsf", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:26 GMT + recorded_at: Wed, 10 Dec 2025 05:00:23 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFZKuuB1fWySn22KE7RHh + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVDKuuB1fWySn0T7l3XWP body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OsiyunmCxwRYB7","request_duration_ms":918}}' + - '{"last_request_metrics":{"request_id":"req_in7mPeoiI4iofu","request_duration_ms":792}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:27 GMT + - Wed, 10 Dec 2025 04:59:53 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_ReM9daXBXoIgkR + - req_tZXCiuGjO3Qfk5 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFZKuuB1fWySn22KE7RHh", + "id": "pi_3ScfVDKuuB1fWySn0T7l3XWP", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270465, + "created": 1765342791, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFZKuuB1fWySn2Vnigck2", + "latest_charge": "ch_3ScfVDKuuB1fWySn0Pk30gzb", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFZKuuB1fWySnkqGzk5cM", + "payment_method": "pm_1ScfVDKuuB1fWySn2AKZ4Qsf", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:27 GMT + recorded_at: Wed, 10 Dec 2025 05:00:23 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFZKuuB1fWySn22KE7RHh/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVDKuuB1fWySn0T7l3XWP/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ReM9daXBXoIgkR","request_duration_ms":307}}' + - '{"last_request_metrics":{"request_id":"req_tZXCiuGjO3Qfk5","request_duration_ms":304}}' Idempotency-Key: - - a51977d3-a7e1-4a1c-a8bd-deed2ff66681 + - b698af71-64fc-473a-ae1d-048a373fdf50 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:28 GMT + - Wed, 10 Dec 2025 04:59:54 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a51977d3-a7e1-4a1c-a8bd-deed2ff66681 + - b698af71-64fc-473a-ae1d-048a373fdf50 Original-Request: - - req_y6L2628EPqJp2h + - req_HoZIY87Vf95H8s Request-Id: - - req_y6L2628EPqJp2h + - req_HoZIY87Vf95H8s Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFZKuuB1fWySn22KE7RHh", + "id": "pi_3ScfVDKuuB1fWySn0T7l3XWP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270465, + "created": 1765342791, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFZKuuB1fWySn2Vnigck2", + "latest_charge": "ch_3ScfVDKuuB1fWySn0Pk30gzb", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFZKuuB1fWySnkqGzk5cM", + "payment_method": "pm_1ScfVDKuuB1fWySn2AKZ4Qsf", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:28 GMT + recorded_at: Wed, 10 Dec 2025 05:00:24 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFZKuuB1fWySn22KE7RHh + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVDKuuB1fWySn0T7l3XWP body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_y6L2628EPqJp2h","request_duration_ms":1058}}' + - '{"last_request_metrics":{"request_id":"req_HoZIY87Vf95H8s","request_duration_ms":943}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:28 GMT + - Wed, 10 Dec 2025 04:59:54 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_Eb6i3tixU59sD5 + - req_3iLqyj9QraNySU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFZKuuB1fWySn22KE7RHh", + "id": "pi_3ScfVDKuuB1fWySn0T7l3XWP", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270465, + "created": 1765342791, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFZKuuB1fWySn2Vnigck2", + "latest_charge": "ch_3ScfVDKuuB1fWySn0Pk30gzb", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFZKuuB1fWySnkqGzk5cM", + "payment_method": "pm_1ScfVDKuuB1fWySn2AKZ4Qsf", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:28 GMT + recorded_at: Wed, 10 Dec 2025 05:00:25 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml index 0bf3e50cd5..95ccbb955b 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Diners_Club/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_diners&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_nq061DsjP7UZfV","request_duration_ms":302}}' + - '{"last_request_metrics":{"request_id":"req_oGW00Rf0SQ3QPZ","request_duration_ms":347}}' Idempotency-Key: - - 81a973f5-1b2b-4eae-887d-72e7e6631e4a + - 2fdf5405-594b-42e3-9eca-3fdbf2ee3f20 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:23 GMT + - Wed, 10 Dec 2025 04:59:50 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 81a973f5-1b2b-4eae-887d-72e7e6631e4a + - 2fdf5405-594b-42e3-9eca-3fdbf2ee3f20 Original-Request: - - req_H0hvPVnOaw4jKP + - req_5z6sg8retdKnBY Request-Id: - - req_H0hvPVnOaw4jKP + - req_5z6sg8retdKnBY Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFXKuuB1fWySn1KYGj99c", + "id": "pi_3ScfVBKuuB1fWySn04dUoZ6Y", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270463, + "created": 1765342789, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFXKuuB1fWySnrHWLwhhH", + "payment_method": "pm_1ScfVBKuuB1fWySntEFLhPjQ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:23 GMT + recorded_at: Wed, 10 Dec 2025 05:00:20 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFXKuuB1fWySn1KYGj99c/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVBKuuB1fWySn04dUoZ6Y/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_H0hvPVnOaw4jKP","request_duration_ms":439}}' + - '{"last_request_metrics":{"request_id":"req_5z6sg8retdKnBY","request_duration_ms":409}}' Idempotency-Key: - - f32a0d7f-8ed1-42c8-a724-8ff8f13f3c66 + - 4f3a2095-fbf9-4767-8383-d9689bebf2c1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:24 GMT + - Wed, 10 Dec 2025 04:59:50 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f32a0d7f-8ed1-42c8-a724-8ff8f13f3c66 + - 4f3a2095-fbf9-4767-8383-d9689bebf2c1 Original-Request: - - req_sC6hLkkxrahhGZ + - req_CgJpQhwA0atN33 Request-Id: - - req_sC6hLkkxrahhGZ + - req_CgJpQhwA0atN33 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFXKuuB1fWySn1KYGj99c", + "id": "pi_3ScfVBKuuB1fWySn04dUoZ6Y", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270463, + "created": 1765342789, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFXKuuB1fWySn1X0ULyCx", + "latest_charge": "ch_3ScfVBKuuB1fWySn0nQM9V1C", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFXKuuB1fWySnrHWLwhhH", + "payment_method": "pm_1ScfVBKuuB1fWySntEFLhPjQ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:24 GMT + recorded_at: Wed, 10 Dec 2025 05:00:21 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFXKuuB1fWySn1KYGj99c + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVBKuuB1fWySn04dUoZ6Y body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_sC6hLkkxrahhGZ","request_duration_ms":815}}' + - '{"last_request_metrics":{"request_id":"req_CgJpQhwA0atN33","request_duration_ms":814}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:25 GMT + - Wed, 10 Dec 2025 04:59:51 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_TJsyDQ6Ricr8kM + - req_U3VoeqQBoVinJ9 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFXKuuB1fWySn1KYGj99c", + "id": "pi_3ScfVBKuuB1fWySn04dUoZ6Y", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270463, + "created": 1765342789, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFXKuuB1fWySn1X0ULyCx", + "latest_charge": "ch_3ScfVBKuuB1fWySn0nQM9V1C", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFXKuuB1fWySnrHWLwhhH", + "payment_method": "pm_1ScfVBKuuB1fWySntEFLhPjQ", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:25 GMT + recorded_at: Wed, 10 Dec 2025 05:00:22 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml index bb55c8e2fb..2cadbc8e29 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9vn53jo3fVKBVg","request_duration_ms":323}}' + - '{"last_request_metrics":{"request_id":"req_VsNtIjgx6PMjAF","request_duration_ms":333}}' Idempotency-Key: - - 5115b2ab-7e63-4fd1-b642-9e4978209d45 + - 2b40b11b-946b-4b7b-9419-58b44cddeffe Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:20 GMT + - Wed, 10 Dec 2025 04:59:47 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5115b2ab-7e63-4fd1-b642-9e4978209d45 + - 2b40b11b-946b-4b7b-9419-58b44cddeffe Original-Request: - - req_ByhUERvwCifr3m + - req_JsxN0wdwKDcrZ6 Request-Id: - - req_ByhUERvwCifr3m + - req_JsxN0wdwKDcrZ6 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFUKuuB1fWySn2Lpjo5sC", + "id": "pi_3ScfV9KuuB1fWySn0a4Ii8N6", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270460, + "created": 1765342787, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFUKuuB1fWySnMYFJ4Uzg", + "payment_method": "pm_1ScfV8KuuB1fWySnnwdKUrIo", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:20 GMT + recorded_at: Wed, 10 Dec 2025 05:00:17 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFUKuuB1fWySn2Lpjo5sC/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV9KuuB1fWySn0a4Ii8N6/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ByhUERvwCifr3m","request_duration_ms":454}}' + - '{"last_request_metrics":{"request_id":"req_JsxN0wdwKDcrZ6","request_duration_ms":409}}' Idempotency-Key: - - b36716cb-7e51-4654-b3df-75a6a77071a3 + - f2261bc2-9840-44aa-8067-b960cd378cd2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:21 GMT + - Wed, 10 Dec 2025 04:59:47 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b36716cb-7e51-4654-b3df-75a6a77071a3 + - f2261bc2-9840-44aa-8067-b960cd378cd2 Original-Request: - - req_XbJtk7OHx7dnEa + - req_uv5FNKDqrJQyW0 Request-Id: - - req_XbJtk7OHx7dnEa + - req_uv5FNKDqrJQyW0 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFUKuuB1fWySn2Lpjo5sC", + "id": "pi_3ScfV9KuuB1fWySn0a4Ii8N6", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270460, + "created": 1765342787, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFUKuuB1fWySn2yDxp3zW", + "latest_charge": "ch_3ScfV9KuuB1fWySn0a3woIQ0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFUKuuB1fWySnMYFJ4Uzg", + "payment_method": "pm_1ScfV8KuuB1fWySnnwdKUrIo", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:21 GMT + recorded_at: Wed, 10 Dec 2025 05:00:18 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFUKuuB1fWySn2Lpjo5sC + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV9KuuB1fWySn0a4Ii8N6 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XbJtk7OHx7dnEa","request_duration_ms":777}}' + - '{"last_request_metrics":{"request_id":"req_uv5FNKDqrJQyW0","request_duration_ms":756}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:21 GMT + - Wed, 10 Dec 2025 04:59:48 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_lOvK1gl8jobOqs + - req_4r9cgzO9wMWVst Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFUKuuB1fWySn2Lpjo5sC", + "id": "pi_3ScfV9KuuB1fWySn0a4Ii8N6", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270460, + "created": 1765342787, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFUKuuB1fWySn2yDxp3zW", + "latest_charge": "ch_3ScfV9KuuB1fWySn0a3woIQ0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFUKuuB1fWySnMYFJ4Uzg", + "payment_method": "pm_1ScfV8KuuB1fWySnnwdKUrIo", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:21 GMT + recorded_at: Wed, 10 Dec 2025 05:00:18 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFUKuuB1fWySn2Lpjo5sC/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV9KuuB1fWySn0a4Ii8N6/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_lOvK1gl8jobOqs","request_duration_ms":338}}' + - '{"last_request_metrics":{"request_id":"req_4r9cgzO9wMWVst","request_duration_ms":301}}' Idempotency-Key: - - 4d24f69f-3dc1-490d-bd11-3368b917aa64 + - 9d6e63b4-54ca-4cce-b43a-8d53061399c4 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:22 GMT + - Wed, 10 Dec 2025 04:59:49 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4d24f69f-3dc1-490d-bd11-3368b917aa64 + - 9d6e63b4-54ca-4cce-b43a-8d53061399c4 Original-Request: - - req_DbxGDRUADM622w + - req_ZviD6zykos8uor Request-Id: - - req_DbxGDRUADM622w + - req_ZviD6zykos8uor Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFUKuuB1fWySn2Lpjo5sC", + "id": "pi_3ScfV9KuuB1fWySn0a4Ii8N6", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270460, + "created": 1765342787, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFUKuuB1fWySn2yDxp3zW", + "latest_charge": "ch_3ScfV9KuuB1fWySn0a3woIQ0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFUKuuB1fWySnMYFJ4Uzg", + "payment_method": "pm_1ScfV8KuuB1fWySnnwdKUrIo", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:22 GMT + recorded_at: Wed, 10 Dec 2025 05:00:19 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFUKuuB1fWySn2Lpjo5sC + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV9KuuB1fWySn0a4Ii8N6 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_DbxGDRUADM622w","request_duration_ms":1018}}' + - '{"last_request_metrics":{"request_id":"req_ZviD6zykos8uor","request_duration_ms":955}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:23 GMT + - Wed, 10 Dec 2025 04:59:49 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_nq061DsjP7UZfV + - req_oGW00Rf0SQ3QPZ Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFUKuuB1fWySn2Lpjo5sC", + "id": "pi_3ScfV9KuuB1fWySn0a4Ii8N6", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270460, + "created": 1765342787, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFUKuuB1fWySn2yDxp3zW", + "latest_charge": "ch_3ScfV9KuuB1fWySn0a3woIQ0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFUKuuB1fWySnMYFJ4Uzg", + "payment_method": "pm_1ScfV8KuuB1fWySnnwdKUrIo", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:23 GMT + recorded_at: Wed, 10 Dec 2025 05:00:20 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml index d4cc48498a..71b01004fe 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Discover/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_discover&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_GGjbqSMHNlZlhf","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_KbtJACqnESjQok","request_duration_ms":309}}' Idempotency-Key: - - 5dfd1030-86d3-40b6-9973-6eb1eef99086 + - 1856fa71-2d8e-4006-8b2a-64b9457a5824 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:18 GMT + - Wed, 10 Dec 2025 04:59:45 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 5dfd1030-86d3-40b6-9973-6eb1eef99086 + - 1856fa71-2d8e-4006-8b2a-64b9457a5824 Original-Request: - - req_VXCBNbIvOMumT8 + - req_rBa4hK2dsbZMYN Request-Id: - - req_VXCBNbIvOMumT8 + - req_rBa4hK2dsbZMYN Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFSKuuB1fWySn2pNXKknq", + "id": "pi_3ScfV7KuuB1fWySn270lOS1O", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270458, + "created": 1765342785, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFSKuuB1fWySntXnZDGpK", + "payment_method": "pm_1ScfV7KuuB1fWySnkaFPNCD3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:18 GMT + recorded_at: Wed, 10 Dec 2025 05:00:16 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFSKuuB1fWySn2pNXKknq/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV7KuuB1fWySn270lOS1O/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VXCBNbIvOMumT8","request_duration_ms":409}}' + - '{"last_request_metrics":{"request_id":"req_rBa4hK2dsbZMYN","request_duration_ms":477}}' Idempotency-Key: - - 6d1cdd62-343d-4b74-9de6-d5bf2bc32be4 + - 354298f2-9624-4c0d-95c9-a0a727ec1612 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:19 GMT + - Wed, 10 Dec 2025 04:59:46 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6d1cdd62-343d-4b74-9de6-d5bf2bc32be4 + - 354298f2-9624-4c0d-95c9-a0a727ec1612 Original-Request: - - req_Y82cwb0q58u9Cq + - req_yALjkC9trAaI8K Request-Id: - - req_Y82cwb0q58u9Cq + - req_yALjkC9trAaI8K Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFSKuuB1fWySn2pNXKknq", + "id": "pi_3ScfV7KuuB1fWySn270lOS1O", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270458, + "created": 1765342785, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFSKuuB1fWySn2F7LQ7F5", + "latest_charge": "ch_3ScfV7KuuB1fWySn2psZD5PP", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFSKuuB1fWySntXnZDGpK", + "payment_method": "pm_1ScfV7KuuB1fWySnkaFPNCD3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:19 GMT + recorded_at: Wed, 10 Dec 2025 05:00:16 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFSKuuB1fWySn2pNXKknq + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfV7KuuB1fWySn270lOS1O body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Y82cwb0q58u9Cq","request_duration_ms":843}}' + - '{"last_request_metrics":{"request_id":"req_yALjkC9trAaI8K","request_duration_ms":805}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:20 GMT + - Wed, 10 Dec 2025 04:59:46 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_9vn53jo3fVKBVg + - req_VsNtIjgx6PMjAF Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFSKuuB1fWySn2pNXKknq", + "id": "pi_3ScfV7KuuB1fWySn270lOS1O", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270458, + "created": 1765342785, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFSKuuB1fWySn2F7LQ7F5", + "latest_charge": "ch_3ScfV7KuuB1fWySn2psZD5PP", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFSKuuB1fWySntXnZDGpK", + "payment_method": "pm_1ScfV7KuuB1fWySnkaFPNCD3", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:20 GMT + recorded_at: Wed, 10 Dec 2025 05:00:17 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml index 235eabbed8..08879bd599 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_tBkQ7MrlnpS37Y","request_duration_ms":426}}' + - '{"last_request_metrics":{"request_id":"req_vDcTCfqhonIKLL","request_duration_ms":319}}' Idempotency-Key: - - 075df7c7-26c0-4ad5-94fd-8231e276b0d7 + - 7d4511ef-505c-453e-beff-8f978530959b Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:31 GMT + - Wed, 10 Dec 2025 04:59:56 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 075df7c7-26c0-4ad5-94fd-8231e276b0d7 + - 7d4511ef-505c-453e-beff-8f978530959b Original-Request: - - req_XAP6e6PzXHDC6Y + - req_Q8PbHSVWhmFiY1 Request-Id: - - req_XAP6e6PzXHDC6Y + - req_Q8PbHSVWhmFiY1 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFfKuuB1fWySn1XNOKgIP", + "id": "pi_3ScfVIKuuB1fWySn1Eky8aRy", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270471, + "created": 1765342796, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFeKuuB1fWySnJjEwIbiP", + "payment_method": "pm_1ScfVIKuuB1fWySnwr1VMiAN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:31 GMT + recorded_at: Wed, 10 Dec 2025 05:00:27 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFfKuuB1fWySn1XNOKgIP/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVIKuuB1fWySn1Eky8aRy/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_XAP6e6PzXHDC6Y","request_duration_ms":373}}' + - '{"last_request_metrics":{"request_id":"req_Q8PbHSVWhmFiY1","request_duration_ms":415}}' Idempotency-Key: - - afca61a7-b55d-41d4-b314-786806773340 + - d5b96a6b-2fb9-453b-8d37-c5cfc647fa69 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:31 GMT + - Wed, 10 Dec 2025 04:59:57 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - afca61a7-b55d-41d4-b314-786806773340 + - d5b96a6b-2fb9-453b-8d37-c5cfc647fa69 Original-Request: - - req_klhdq7lgNdaSA5 + - req_QMPeNGxP3rJk7R Request-Id: - - req_klhdq7lgNdaSA5 + - req_QMPeNGxP3rJk7R Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFfKuuB1fWySn1XNOKgIP", + "id": "pi_3ScfVIKuuB1fWySn1Eky8aRy", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270471, + "created": 1765342796, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFfKuuB1fWySn1yxZb4q4", + "latest_charge": "ch_3ScfVIKuuB1fWySn1wD0TC4P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFeKuuB1fWySnJjEwIbiP", + "payment_method": "pm_1ScfVIKuuB1fWySnwr1VMiAN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:31 GMT + recorded_at: Wed, 10 Dec 2025 05:00:27 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFfKuuB1fWySn1XNOKgIP + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVIKuuB1fWySn1Eky8aRy body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_klhdq7lgNdaSA5","request_duration_ms":787}}' + - '{"last_request_metrics":{"request_id":"req_QMPeNGxP3rJk7R","request_duration_ms":824}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:32 GMT + - Wed, 10 Dec 2025 04:59:57 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_PCKVuTg249LY6B + - req_qLGu6OM2Yz2GJV Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFfKuuB1fWySn1XNOKgIP", + "id": "pi_3ScfVIKuuB1fWySn1Eky8aRy", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270471, + "created": 1765342796, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFfKuuB1fWySn1yxZb4q4", + "latest_charge": "ch_3ScfVIKuuB1fWySn1wD0TC4P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFeKuuB1fWySnJjEwIbiP", + "payment_method": "pm_1ScfVIKuuB1fWySnwr1VMiAN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:32 GMT + recorded_at: Wed, 10 Dec 2025 05:00:28 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFfKuuB1fWySn1XNOKgIP/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVIKuuB1fWySn1Eky8aRy/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_PCKVuTg249LY6B","request_duration_ms":406}}' + - '{"last_request_metrics":{"request_id":"req_qLGu6OM2Yz2GJV","request_duration_ms":326}}' Idempotency-Key: - - 31d8f07f-bfaa-460c-a534-6d5312ea16ae + - 611c5f2b-5b2e-4459-9be4-8a29afae954a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:33 GMT + - Wed, 10 Dec 2025 04:59:58 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 31d8f07f-bfaa-460c-a534-6d5312ea16ae + - 611c5f2b-5b2e-4459-9be4-8a29afae954a Original-Request: - - req_WEFGnR5bfb6Z1z + - req_bSQ8ZdWsGmlevt Request-Id: - - req_WEFGnR5bfb6Z1z + - req_bSQ8ZdWsGmlevt Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFfKuuB1fWySn1XNOKgIP", + "id": "pi_3ScfVIKuuB1fWySn1Eky8aRy", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270471, + "created": 1765342796, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFfKuuB1fWySn1yxZb4q4", + "latest_charge": "ch_3ScfVIKuuB1fWySn1wD0TC4P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFeKuuB1fWySnJjEwIbiP", + "payment_method": "pm_1ScfVIKuuB1fWySnwr1VMiAN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:33 GMT + recorded_at: Wed, 10 Dec 2025 05:00:29 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFfKuuB1fWySn1XNOKgIP + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVIKuuB1fWySn1Eky8aRy body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_WEFGnR5bfb6Z1z","request_duration_ms":979}}' + - '{"last_request_metrics":{"request_id":"req_bSQ8ZdWsGmlevt","request_duration_ms":950}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:33 GMT + - Wed, 10 Dec 2025 04:59:58 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_z0Sv8LCeRvd8Lm + - req_6c0FkWNld0SEoD Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFfKuuB1fWySn1XNOKgIP", + "id": "pi_3ScfVIKuuB1fWySn1Eky8aRy", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270471, + "created": 1765342796, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFfKuuB1fWySn1yxZb4q4", + "latest_charge": "ch_3ScfVIKuuB1fWySn1wD0TC4P", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFeKuuB1fWySnJjEwIbiP", + "payment_method": "pm_1ScfVIKuuB1fWySnwr1VMiAN", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:33 GMT + recorded_at: Wed, 10 Dec 2025 05:00:29 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml index fe9eaa22a5..460c011d53 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_JCB/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_jcb&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Eb6i3tixU59sD5","request_duration_ms":246}}' + - '{"last_request_metrics":{"request_id":"req_3iLqyj9QraNySU","request_duration_ms":304}}' Idempotency-Key: - - 2ec962b6-e1f8-43cb-97b7-bcd7cef943c9 + - 8733b200-7001-4b90-bbd7-1b5a896f27f6 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:28 GMT + - Wed, 10 Dec 2025 04:59:54 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 2ec962b6-e1f8-43cb-97b7-bcd7cef943c9 + - 8733b200-7001-4b90-bbd7-1b5a896f27f6 Original-Request: - - req_mK1svsCSbgk8OT + - req_FowJILPTSJ3Ab1 Request-Id: - - req_mK1svsCSbgk8OT + - req_FowJILPTSJ3Ab1 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFcKuuB1fWySn2FwPqleD", + "id": "pi_3ScfVGKuuB1fWySn0VucGfWN", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270468, + "created": 1765342794, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFcKuuB1fWySnY4dxz4la", + "payment_method": "pm_1ScfVGKuuB1fWySnIs6gfnjH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:29 GMT + recorded_at: Wed, 10 Dec 2025 05:00:25 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFcKuuB1fWySn2FwPqleD/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVGKuuB1fWySn0VucGfWN/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mK1svsCSbgk8OT","request_duration_ms":460}}' + - '{"last_request_metrics":{"request_id":"req_FowJILPTSJ3Ab1","request_duration_ms":419}}' Idempotency-Key: - - 69bb720a-beb7-48c8-aef7-1bc445dab016 + - cf2a81bd-aa9b-42b3-9457-dd8637445c68 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:29 GMT + - Wed, 10 Dec 2025 04:59:55 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 69bb720a-beb7-48c8-aef7-1bc445dab016 + - cf2a81bd-aa9b-42b3-9457-dd8637445c68 Original-Request: - - req_z4RrsAsfvN3Atd + - req_TN4NuwKoxzGt8R Request-Id: - - req_z4RrsAsfvN3Atd + - req_TN4NuwKoxzGt8R Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFcKuuB1fWySn2FwPqleD", + "id": "pi_3ScfVGKuuB1fWySn0VucGfWN", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270468, + "created": 1765342794, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFcKuuB1fWySn205Ptmou", + "latest_charge": "ch_3ScfVGKuuB1fWySn09ahJW9a", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFcKuuB1fWySnY4dxz4la", + "payment_method": "pm_1ScfVGKuuB1fWySnIs6gfnjH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:29 GMT + recorded_at: Wed, 10 Dec 2025 05:00:26 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFcKuuB1fWySn2FwPqleD + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVGKuuB1fWySn0VucGfWN body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_z4RrsAsfvN3Atd","request_duration_ms":816}}' + - '{"last_request_metrics":{"request_id":"req_TN4NuwKoxzGt8R","request_duration_ms":764}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:30 GMT + - Wed, 10 Dec 2025 04:59:56 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_tBkQ7MrlnpS37Y + - req_vDcTCfqhonIKLL Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFcKuuB1fWySn2FwPqleD", + "id": "pi_3ScfVGKuuB1fWySn0VucGfWN", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270468, + "created": 1765342794, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFcKuuB1fWySn205Ptmou", + "latest_charge": "ch_3ScfVGKuuB1fWySn09ahJW9a", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFcKuuB1fWySnY4dxz4la", + "payment_method": "pm_1ScfVGKuuB1fWySnIs6gfnjH", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:30 GMT + recorded_at: Wed, 10 Dec 2025 05:00:26 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml index 15df9e64b1..4781961609 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_h2P8KUsS7ejd1I","request_duration_ms":341}}' + - '{"last_request_metrics":{"request_id":"req_YOt4ZPkt8n0CtT","request_duration_ms":319}}' Idempotency-Key: - - b1d25eae-01f1-41e0-9f93-a21fe45149cf + - b4ae25b3-f88b-4152-bd5f-f0a14167534e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:59 GMT + - Wed, 10 Dec 2025 04:59:28 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b1d25eae-01f1-41e0-9f93-a21fe45149cf + - b4ae25b3-f88b-4152-bd5f-f0a14167534e Original-Request: - - req_JwJvQyy4pLGPhP + - req_QGRFdYT6rYijR6 Request-Id: - - req_JwJvQyy4pLGPhP + - req_QGRFdYT6rYijR6 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF9KuuB1fWySn0PAHlhBm", + "id": "pi_3ScfUpKuuB1fWySn0SzREmQw", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270439, + "created": 1765342767, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF9KuuB1fWySnHSIpeaFf", + "payment_method": "pm_1ScfUpKuuB1fWySnhi6md5zW", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:00 GMT + recorded_at: Wed, 10 Dec 2025 04:59:58 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF9KuuB1fWySn0PAHlhBm/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUpKuuB1fWySn0SzREmQw/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_JwJvQyy4pLGPhP","request_duration_ms":546}}' + - '{"last_request_metrics":{"request_id":"req_QGRFdYT6rYijR6","request_duration_ms":408}}' Idempotency-Key: - - 4220ca92-932f-4ae4-940f-d068c446b2af + - e0199cb3-d891-46c6-9fc8-b125638bcb2f Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:00 GMT + - Wed, 10 Dec 2025 04:59:28 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4220ca92-932f-4ae4-940f-d068c446b2af + - e0199cb3-d891-46c6-9fc8-b125638bcb2f Original-Request: - - req_seDr0dioKivUDv + - req_kJoJp679voZqEg Request-Id: - - req_seDr0dioKivUDv + - req_kJoJp679voZqEg Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF9KuuB1fWySn0PAHlhBm", + "id": "pi_3ScfUpKuuB1fWySn0SzREmQw", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270439, + "created": 1765342767, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF9KuuB1fWySn0J8GVaU1", + "latest_charge": "ch_3ScfUpKuuB1fWySn0Oczg8zk", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF9KuuB1fWySnHSIpeaFf", + "payment_method": "pm_1ScfUpKuuB1fWySnhi6md5zW", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:00 GMT + recorded_at: Wed, 10 Dec 2025 04:59:59 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF9KuuB1fWySn0PAHlhBm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUpKuuB1fWySn0SzREmQw body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_seDr0dioKivUDv","request_duration_ms":815}}' + - '{"last_request_metrics":{"request_id":"req_kJoJp679voZqEg","request_duration_ms":764}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:01 GMT + - Wed, 10 Dec 2025 04:59:29 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_1Um56xnYGp9qxr + - req_FWkU18g1iOWYCU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF9KuuB1fWySn0PAHlhBm", + "id": "pi_3ScfUpKuuB1fWySn0SzREmQw", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270439, + "created": 1765342767, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF9KuuB1fWySn0J8GVaU1", + "latest_charge": "ch_3ScfUpKuuB1fWySn0Oczg8zk", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF9KuuB1fWySnHSIpeaFf", + "payment_method": "pm_1ScfUpKuuB1fWySnhi6md5zW", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:01 GMT + recorded_at: Wed, 10 Dec 2025 04:59:59 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF9KuuB1fWySn0PAHlhBm/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUpKuuB1fWySn0SzREmQw/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1Um56xnYGp9qxr","request_duration_ms":250}}' + - '{"last_request_metrics":{"request_id":"req_FWkU18g1iOWYCU","request_duration_ms":317}}' Idempotency-Key: - - 818dde07-cd52-4297-ac01-8ed5aff73173 + - 64413d43-1851-40ef-bdce-4e1925f92781 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:02 GMT + - Wed, 10 Dec 2025 04:59:30 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 818dde07-cd52-4297-ac01-8ed5aff73173 + - 64413d43-1851-40ef-bdce-4e1925f92781 Original-Request: - - req_3b61xI68MF4rSs + - req_ZqBjZSSjeJ6vVz Request-Id: - - req_3b61xI68MF4rSs + - req_ZqBjZSSjeJ6vVz Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF9KuuB1fWySn0PAHlhBm", + "id": "pi_3ScfUpKuuB1fWySn0SzREmQw", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270439, + "created": 1765342767, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF9KuuB1fWySn0J8GVaU1", + "latest_charge": "ch_3ScfUpKuuB1fWySn0Oczg8zk", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF9KuuB1fWySnHSIpeaFf", + "payment_method": "pm_1ScfUpKuuB1fWySnhi6md5zW", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:02 GMT + recorded_at: Wed, 10 Dec 2025 05:00:01 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF9KuuB1fWySn0PAHlhBm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUpKuuB1fWySn0SzREmQw body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_3b61xI68MF4rSs","request_duration_ms":1072}}' + - '{"last_request_metrics":{"request_id":"req_ZqBjZSSjeJ6vVz","request_duration_ms":1280}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:02 GMT + - Wed, 10 Dec 2025 04:59:30 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_kTV56fJuTXRuel + - req_sWAhPIVbpZyqjC Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF9KuuB1fWySn0PAHlhBm", + "id": "pi_3ScfUpKuuB1fWySn0SzREmQw", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270439, + "created": 1765342767, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF9KuuB1fWySn0J8GVaU1", + "latest_charge": "ch_3ScfUpKuuB1fWySn0Oczg8zk", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF9KuuB1fWySnHSIpeaFf", + "payment_method": "pm_1ScfUpKuuB1fWySnhi6md5zW", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:02 GMT + recorded_at: Wed, 10 Dec 2025 05:00:01 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml index 69eb688086..65cf4a0cc1 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MRXzkNo93zg27F","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_eLrgM6ewOzKoU0","request_duration_ms":325}}' Idempotency-Key: - - 6fa52a7a-a6e9-4bc6-93f8-1ea6cee88609 + - bd083d90-62f2-4fbe-ad85-8f6d843deeba Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:58 GMT + - Wed, 10 Dec 2025 04:59:26 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 6fa52a7a-a6e9-4bc6-93f8-1ea6cee88609 + - bd083d90-62f2-4fbe-ad85-8f6d843deeba Original-Request: - - req_1fiYo71VJd6NGr + - req_ZJR0m55ZrFN76Z Request-Id: - - req_1fiYo71VJd6NGr + - req_ZJR0m55ZrFN76Z Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF7KuuB1fWySn2EkHPaqD", + "id": "pi_3ScfUoKuuB1fWySn0kjT7GgE", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270437, + "created": 1765342766, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF7KuuB1fWySnEBuJu9uC", + "payment_method": "pm_1ScfUoKuuB1fWySn2nPRYs7j", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:58 GMT + recorded_at: Wed, 10 Dec 2025 04:59:57 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF7KuuB1fWySn2EkHPaqD/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUoKuuB1fWySn0kjT7GgE/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1fiYo71VJd6NGr","request_duration_ms":439}}' + - '{"last_request_metrics":{"request_id":"req_ZJR0m55ZrFN76Z","request_duration_ms":410}}' Idempotency-Key: - - 156cae12-8412-4153-a0eb-a0040f791683 + - 22e24b50-8837-4707-a14a-a8847d7f5eba Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:58 GMT + - Wed, 10 Dec 2025 04:59:27 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 156cae12-8412-4153-a0eb-a0040f791683 + - 22e24b50-8837-4707-a14a-a8847d7f5eba Original-Request: - - req_kZf0oYAzFVac6V + - req_MpFsrcmOaqWewy Request-Id: - - req_kZf0oYAzFVac6V + - req_MpFsrcmOaqWewy Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF7KuuB1fWySn2EkHPaqD", + "id": "pi_3ScfUoKuuB1fWySn0kjT7GgE", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270437, + "created": 1765342766, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF7KuuB1fWySn2yC10ieP", + "latest_charge": "ch_3ScfUoKuuB1fWySn0J5nJyra", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF7KuuB1fWySnEBuJu9uC", + "payment_method": "pm_1ScfUoKuuB1fWySn2nPRYs7j", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:58 GMT + recorded_at: Wed, 10 Dec 2025 04:59:57 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF7KuuB1fWySn2EkHPaqD + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUoKuuB1fWySn0kjT7GgE body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_kZf0oYAzFVac6V","request_duration_ms":713}}' + - '{"last_request_metrics":{"request_id":"req_MpFsrcmOaqWewy","request_duration_ms":747}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:59 GMT + - Wed, 10 Dec 2025 04:59:27 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_h2P8KUsS7ejd1I + - req_YOt4ZPkt8n0CtT Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF7KuuB1fWySn2EkHPaqD", + "id": "pi_3ScfUoKuuB1fWySn0kjT7GgE", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270437, + "created": 1765342766, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF7KuuB1fWySn2yC10ieP", + "latest_charge": "ch_3ScfUoKuuB1fWySn0J5nJyra", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF7KuuB1fWySnEBuJu9uC", + "payment_method": "pm_1ScfUoKuuB1fWySn2nPRYs7j", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:59 GMT + recorded_at: Wed, 10 Dec 2025 04:59:58 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml index 2ef5ac6367..1b1515c035 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_V6I3S5VVAxQFBW","request_duration_ms":329}}' + - '{"last_request_metrics":{"request_id":"req_e4tOCG4Osjrrpk","request_duration_ms":311}}' Idempotency-Key: - - 95c520c0-dac5-4916-b3ce-cda8f04f9a2c + - d84da9fa-bf80-4719-8330-63931d1f13f9 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:05 GMT + - Wed, 10 Dec 2025 04:59:32 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 95c520c0-dac5-4916-b3ce-cda8f04f9a2c + - d84da9fa-bf80-4719-8330-63931d1f13f9 Original-Request: - - req_zc2QpUz3oh12zw + - req_31V89a9Lxoif48 Request-Id: - - req_zc2QpUz3oh12zw + - req_31V89a9Lxoif48 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFFKuuB1fWySn2jjIZH0V", + "id": "pi_3ScfUuKuuB1fWySn24EDImzn", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270445, + "created": 1765342772, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFEKuuB1fWySnpeE0Nvh0", + "payment_method": "pm_1ScfUuKuuB1fWySnl91DBqZa", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:05 GMT + recorded_at: Wed, 10 Dec 2025 05:00:03 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFFKuuB1fWySn2jjIZH0V/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUuKuuB1fWySn24EDImzn/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_zc2QpUz3oh12zw","request_duration_ms":440}}' + - '{"last_request_metrics":{"request_id":"req_31V89a9Lxoif48","request_duration_ms":419}}' Idempotency-Key: - - 40e4b954-3843-4556-a6e5-6a0f297299b6 + - 10375a08-11c0-441c-8f49-97909206ee31 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:05 GMT + - Wed, 10 Dec 2025 04:59:33 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 40e4b954-3843-4556-a6e5-6a0f297299b6 + - 10375a08-11c0-441c-8f49-97909206ee31 Original-Request: - - req_EpUqpDc4TUdXwd + - req_SzrvPVCAThic2m Request-Id: - - req_EpUqpDc4TUdXwd + - req_SzrvPVCAThic2m Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFFKuuB1fWySn2jjIZH0V", + "id": "pi_3ScfUuKuuB1fWySn24EDImzn", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270445, + "created": 1765342772, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFFKuuB1fWySn29p6u4VN", + "latest_charge": "ch_3ScfUuKuuB1fWySn2FRAsK2H", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFEKuuB1fWySnpeE0Nvh0", + "payment_method": "pm_1ScfUuKuuB1fWySnl91DBqZa", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:06 GMT + recorded_at: Wed, 10 Dec 2025 05:00:04 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFFKuuB1fWySn2jjIZH0V + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUuKuuB1fWySn24EDImzn body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_EpUqpDc4TUdXwd","request_duration_ms":917}}' + - '{"last_request_metrics":{"request_id":"req_SzrvPVCAThic2m","request_duration_ms":765}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:06 GMT + - Wed, 10 Dec 2025 04:59:34 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_OUGjLaer1pqObS + - req_ZMAY1gIbsHQRHE Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFFKuuB1fWySn2jjIZH0V", + "id": "pi_3ScfUuKuuB1fWySn24EDImzn", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270445, + "created": 1765342772, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFFKuuB1fWySn29p6u4VN", + "latest_charge": "ch_3ScfUuKuuB1fWySn2FRAsK2H", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFEKuuB1fWySnpeE0Nvh0", + "payment_method": "pm_1ScfUuKuuB1fWySnl91DBqZa", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:06 GMT + recorded_at: Wed, 10 Dec 2025 05:00:04 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFFKuuB1fWySn2jjIZH0V/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUuKuuB1fWySn24EDImzn/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_OUGjLaer1pqObS","request_duration_ms":255}}' + - '{"last_request_metrics":{"request_id":"req_ZMAY1gIbsHQRHE","request_duration_ms":310}}' Idempotency-Key: - - 1b34cb40-5d93-4466-bc24-99d26449d830 + - f14bfb96-6d22-4929-983d-ec231d73a91d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:07 GMT + - Wed, 10 Dec 2025 04:59:35 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 1b34cb40-5d93-4466-bc24-99d26449d830 + - f14bfb96-6d22-4929-983d-ec231d73a91d Original-Request: - - req_q9uOkxluY8pekT + - req_LedqlKHwfsrb2s Request-Id: - - req_q9uOkxluY8pekT + - req_LedqlKHwfsrb2s Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFFKuuB1fWySn2jjIZH0V", + "id": "pi_3ScfUuKuuB1fWySn24EDImzn", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270445, + "created": 1765342772, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFFKuuB1fWySn29p6u4VN", + "latest_charge": "ch_3ScfUuKuuB1fWySn2FRAsK2H", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFEKuuB1fWySnpeE0Nvh0", + "payment_method": "pm_1ScfUuKuuB1fWySnl91DBqZa", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:07 GMT + recorded_at: Wed, 10 Dec 2025 05:00:05 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFFKuuB1fWySn2jjIZH0V + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUuKuuB1fWySn24EDImzn body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_q9uOkxluY8pekT","request_duration_ms":964}}' + - '{"last_request_metrics":{"request_id":"req_LedqlKHwfsrb2s","request_duration_ms":1071}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:07 GMT + - Wed, 10 Dec 2025 04:59:35 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_qEsolpKoUOl73Z + - req_SG19HIFuFG1doN Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFFKuuB1fWySn2jjIZH0V", + "id": "pi_3ScfUuKuuB1fWySn24EDImzn", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270445, + "created": 1765342772, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFFKuuB1fWySn29p6u4VN", + "latest_charge": "ch_3ScfUuKuuB1fWySn2FRAsK2H", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFEKuuB1fWySnpeE0Nvh0", + "payment_method": "pm_1ScfUuKuuB1fWySnl91DBqZa", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:07 GMT + recorded_at: Wed, 10 Dec 2025 05:00:06 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml index 23680b8dca..790da7b4bd 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_debit_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard_debit&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_kTV56fJuTXRuel","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_sWAhPIVbpZyqjC","request_duration_ms":323}}' Idempotency-Key: - - d0a4af69-3df1-4a64-83f9-e883d2f5c0a8 + - a90b8021-ef6f-4170-b687-f8a8a2d63a89 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:03 GMT + - Wed, 10 Dec 2025 04:59:31 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d0a4af69-3df1-4a64-83f9-e883d2f5c0a8 + - a90b8021-ef6f-4170-b687-f8a8a2d63a89 Original-Request: - - req_VmSO5Q2r0gYaNI + - req_jE5hW2TwwtiaqV Request-Id: - - req_VmSO5Q2r0gYaNI + - req_jE5hW2TwwtiaqV Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFCKuuB1fWySn2lj2q7Ql", + "id": "pi_3ScfUtKuuB1fWySn0c4rRkOv", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270442, + "created": 1765342771, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFCKuuB1fWySnu0ynSmjU", + "payment_method": "pm_1ScfUtKuuB1fWySnS5Rj31ms", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:03 GMT + recorded_at: Wed, 10 Dec 2025 05:00:01 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFCKuuB1fWySn2lj2q7Ql/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUtKuuB1fWySn0c4rRkOv/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VmSO5Q2r0gYaNI","request_duration_ms":552}}' + - '{"last_request_metrics":{"request_id":"req_jE5hW2TwwtiaqV","request_duration_ms":495}}' Idempotency-Key: - - 560bfb46-5ac9-4f35-9b2d-42520006215c + - ee3a06f7-2d84-4f33-936f-797050cc4a26 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:03 GMT + - Wed, 10 Dec 2025 04:59:32 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 560bfb46-5ac9-4f35-9b2d-42520006215c + - ee3a06f7-2d84-4f33-936f-797050cc4a26 Original-Request: - - req_gCX75nRz6MVjaC + - req_Epe7QdCiiw4N5t Request-Id: - - req_gCX75nRz6MVjaC + - req_Epe7QdCiiw4N5t Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFCKuuB1fWySn2lj2q7Ql", + "id": "pi_3ScfUtKuuB1fWySn0c4rRkOv", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270442, + "created": 1765342771, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFCKuuB1fWySn2RMYr9IQ", + "latest_charge": "ch_3ScfUtKuuB1fWySn0vi0QZhE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFCKuuB1fWySnu0ynSmjU", + "payment_method": "pm_1ScfUtKuuB1fWySnS5Rj31ms", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:03 GMT + recorded_at: Wed, 10 Dec 2025 05:00:02 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFCKuuB1fWySn2lj2q7Ql + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUtKuuB1fWySn0c4rRkOv body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_gCX75nRz6MVjaC","request_duration_ms":707}}' + - '{"last_request_metrics":{"request_id":"req_Epe7QdCiiw4N5t","request_duration_ms":779}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:04 GMT + - Wed, 10 Dec 2025 04:59:32 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_V6I3S5VVAxQFBW + - req_e4tOCG4Osjrrpk Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFCKuuB1fWySn2lj2q7Ql", + "id": "pi_3ScfUtKuuB1fWySn0c4rRkOv", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270442, + "created": 1765342771, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFCKuuB1fWySn2RMYr9IQ", + "latest_charge": "ch_3ScfUtKuuB1fWySn0vi0QZhE", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFCKuuB1fWySnu0ynSmjU", + "payment_method": "pm_1ScfUtKuuB1fWySnS5Rj31ms", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:04 GMT + recorded_at: Wed, 10 Dec 2025 05:00:03 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml index 0acec643a6..0628e5d3e6 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_RLjBrgKwgtbe2Q","request_duration_ms":371}}' + - '{"last_request_metrics":{"request_id":"req_z2ehwVL3d4NjrW","request_duration_ms":310}}' Idempotency-Key: - - 94dc99c9-e76d-45e5-8d4b-0c9802385390 + - b70120a7-3a46-4929-bf76-26e7285c9078 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:10 GMT + - Wed, 10 Dec 2025 04:59:37 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 94dc99c9-e76d-45e5-8d4b-0c9802385390 + - b70120a7-3a46-4929-bf76-26e7285c9078 Original-Request: - - req_QMTAUJalLE0i83 + - req_epBGOB2cEHHLGP Request-Id: - - req_QMTAUJalLE0i83 + - req_epBGOB2cEHHLGP Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFKKuuB1fWySn0s5TrCwP", + "id": "pi_3ScfUzKuuB1fWySn0pSuUETH", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270450, + "created": 1765342777, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFKKuuB1fWySns8PyLmlY", + "payment_method": "pm_1ScfUzKuuB1fWySnfT9xjAHB", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:10 GMT + recorded_at: Wed, 10 Dec 2025 05:00:08 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFKKuuB1fWySn0s5TrCwP/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUzKuuB1fWySn0pSuUETH/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_QMTAUJalLE0i83","request_duration_ms":436}}' + - '{"last_request_metrics":{"request_id":"req_epBGOB2cEHHLGP","request_duration_ms":420}}' Idempotency-Key: - - b71e9571-a262-4ef1-9c7c-b53619410348 + - c6242f50-bf9a-4d33-97e1-c2162e105c40 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:11 GMT + - Wed, 10 Dec 2025 04:59:38 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b71e9571-a262-4ef1-9c7c-b53619410348 + - c6242f50-bf9a-4d33-97e1-c2162e105c40 Original-Request: - - req_EAM66pajZzkr5Y + - req_qrnHA4DFXZ0f4h Request-Id: - - req_EAM66pajZzkr5Y + - req_qrnHA4DFXZ0f4h Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFKKuuB1fWySn0s5TrCwP", + "id": "pi_3ScfUzKuuB1fWySn0pSuUETH", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270450, + "created": 1765342777, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFKKuuB1fWySn0pNnz4kz", + "latest_charge": "ch_3ScfUzKuuB1fWySn0k8nS41c", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFKKuuB1fWySns8PyLmlY", + "payment_method": "pm_1ScfUzKuuB1fWySnfT9xjAHB", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:11 GMT + recorded_at: Wed, 10 Dec 2025 05:00:09 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFKKuuB1fWySn0s5TrCwP + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUzKuuB1fWySn0pSuUETH body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_EAM66pajZzkr5Y","request_duration_ms":813}}' + - '{"last_request_metrics":{"request_id":"req_qrnHA4DFXZ0f4h","request_duration_ms":1073}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:11 GMT + - Wed, 10 Dec 2025 04:59:39 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_7wejeNMawxZ20p + - req_ky6VfrrkdaS4XC Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFKKuuB1fWySn0s5TrCwP", + "id": "pi_3ScfUzKuuB1fWySn0pSuUETH", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270450, + "created": 1765342777, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFKKuuB1fWySn0pNnz4kz", + "latest_charge": "ch_3ScfUzKuuB1fWySn0k8nS41c", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFKKuuB1fWySns8PyLmlY", + "payment_method": "pm_1ScfUzKuuB1fWySnfT9xjAHB", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:11 GMT + recorded_at: Wed, 10 Dec 2025 05:00:09 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFKKuuB1fWySn0s5TrCwP/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUzKuuB1fWySn0pSuUETH/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_7wejeNMawxZ20p","request_duration_ms":252}}' + - '{"last_request_metrics":{"request_id":"req_ky6VfrrkdaS4XC","request_duration_ms":306}}' Idempotency-Key: - - 89286468-e025-4ff4-b978-f2fd95f4181d + - 1e60a892-9a28-4256-8fde-15dca7716417 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:12 GMT + - Wed, 10 Dec 2025 04:59:40 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 89286468-e025-4ff4-b978-f2fd95f4181d + - 1e60a892-9a28-4256-8fde-15dca7716417 Original-Request: - - req_L9nbXEFf2cLsHx + - req_NydCRJh6OcGjGF Request-Id: - - req_L9nbXEFf2cLsHx + - req_NydCRJh6OcGjGF Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFKKuuB1fWySn0s5TrCwP", + "id": "pi_3ScfUzKuuB1fWySn0pSuUETH", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270450, + "created": 1765342777, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFKKuuB1fWySn0pNnz4kz", + "latest_charge": "ch_3ScfUzKuuB1fWySn0k8nS41c", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFKKuuB1fWySns8PyLmlY", + "payment_method": "pm_1ScfUzKuuB1fWySnfT9xjAHB", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:12 GMT + recorded_at: Wed, 10 Dec 2025 05:00:10 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFKKuuB1fWySn0s5TrCwP + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUzKuuB1fWySn0pSuUETH body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_L9nbXEFf2cLsHx","request_duration_ms":971}}' + - '{"last_request_metrics":{"request_id":"req_NydCRJh6OcGjGF","request_duration_ms":1047}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:12 GMT + - Wed, 10 Dec 2025 04:59:40 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_hChFaFK92TH2pX + - req_eClvV0tfeGLyuD Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFKKuuB1fWySn0s5TrCwP", + "id": "pi_3ScfUzKuuB1fWySn0pSuUETH", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270450, + "created": 1765342777, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFKKuuB1fWySn0pNnz4kz", + "latest_charge": "ch_3ScfUzKuuB1fWySn0k8nS41c", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFKKuuB1fWySns8PyLmlY", + "payment_method": "pm_1ScfUzKuuB1fWySnfT9xjAHB", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:12 GMT + recorded_at: Wed, 10 Dec 2025 05:00:11 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml index e816b30b12..b66d4a21aa 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Mastercard_prepaid_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_mastercard_prepaid&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_qEsolpKoUOl73Z","request_duration_ms":305}}' + - '{"last_request_metrics":{"request_id":"req_SG19HIFuFG1doN","request_duration_ms":637}}' Idempotency-Key: - - d5a1279e-5a5d-48fe-9d7e-4b1934d8b93c + - 1d8a2796-76ab-4de6-9caa-ca4f556f0e85 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:08 GMT + - Wed, 10 Dec 2025 04:59:36 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d5a1279e-5a5d-48fe-9d7e-4b1934d8b93c + - 1d8a2796-76ab-4de6-9caa-ca4f556f0e85 Original-Request: - - req_AStFGKOF4KKL8V + - req_5dsOIda8cOitnn Request-Id: - - req_AStFGKOF4KKL8V + - req_5dsOIda8cOitnn Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFIKuuB1fWySn0KfkTHi7", + "id": "pi_3ScfUyKuuB1fWySn1nQEakHn", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270448, + "created": 1765342776, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFHKuuB1fWySnJAb8YuiA", + "payment_method": "pm_1ScfUxKuuB1fWySn3wIHkWUT", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:08 GMT + recorded_at: Wed, 10 Dec 2025 05:00:06 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFIKuuB1fWySn0KfkTHi7/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUyKuuB1fWySn1nQEakHn/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_AStFGKOF4KKL8V","request_duration_ms":440}}' + - '{"last_request_metrics":{"request_id":"req_5dsOIda8cOitnn","request_duration_ms":442}}' Idempotency-Key: - - 8a81ea83-96b4-49b9-8435-0ba4ba54db32 + - f9f20524-5037-4634-af21-1b998c35c6ee Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:08 GMT + - Wed, 10 Dec 2025 04:59:36 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 8a81ea83-96b4-49b9-8435-0ba4ba54db32 + - f9f20524-5037-4634-af21-1b998c35c6ee Original-Request: - - req_Sxz8xmGYyDMHhz + - req_F2XKyU303iBZXT Request-Id: - - req_Sxz8xmGYyDMHhz + - req_F2XKyU303iBZXT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFIKuuB1fWySn0KfkTHi7", + "id": "pi_3ScfUyKuuB1fWySn1nQEakHn", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270448, + "created": 1765342776, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFIKuuB1fWySn0ShjfVvB", + "latest_charge": "ch_3ScfUyKuuB1fWySn1BlYkz75", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFHKuuB1fWySnJAb8YuiA", + "payment_method": "pm_1ScfUxKuuB1fWySn3wIHkWUT", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:09 GMT + recorded_at: Wed, 10 Dec 2025 05:00:07 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFIKuuB1fWySn0KfkTHi7 + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUyKuuB1fWySn1nQEakHn body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Sxz8xmGYyDMHhz","request_duration_ms":816}}' + - '{"last_request_metrics":{"request_id":"req_F2XKyU303iBZXT","request_duration_ms":746}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:09 GMT + - Wed, 10 Dec 2025 04:59:37 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_RLjBrgKwgtbe2Q + - req_z2ehwVL3d4NjrW Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFIKuuB1fWySn0KfkTHi7", + "id": "pi_3ScfUyKuuB1fWySn1nQEakHn", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270448, + "created": 1765342776, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFIKuuB1fWySn0ShjfVvB", + "latest_charge": "ch_3ScfUyKuuB1fWySn1BlYkz75", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFHKuuB1fWySnJAb8YuiA", + "payment_method": "pm_1ScfUxKuuB1fWySn3wIHkWUT", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:09 GMT + recorded_at: Wed, 10 Dec 2025 05:00:07 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml index b7ff62f6a3..3b4a18eaa8 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_d8C0blZV1zDV3Q","request_duration_ms":425}}' + - '{"last_request_metrics":{"request_id":"req_lGSYKjXDIjdYuY","request_duration_ms":332}}' Idempotency-Key: - - 4a0d711a-ab86-452a-934f-975c054760b6 + - 17919908-41b7-40b9-b9e3-ef70043527b2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:36 GMT + - Wed, 10 Dec 2025 05:00:01 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 4a0d711a-ab86-452a-934f-975c054760b6 + - 17919908-41b7-40b9-b9e3-ef70043527b2 Original-Request: - - req_62ef97uoi80XUz + - req_9yVsWtSu9WoXmG Request-Id: - - req_62ef97uoi80XUz + - req_9yVsWtSu9WoXmG Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFkKuuB1fWySn2gWanAIW", + "id": "pi_3ScfVMKuuB1fWySn155Te08d", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270476, + "created": 1765342800, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFkKuuB1fWySnnQahB1c5", + "payment_method": "pm_1ScfVMKuuB1fWySnYrIs3xNd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:36 GMT + recorded_at: Wed, 10 Dec 2025 05:00:31 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFkKuuB1fWySn2gWanAIW/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVMKuuB1fWySn155Te08d/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_62ef97uoi80XUz","request_duration_ms":449}}' + - '{"last_request_metrics":{"request_id":"req_9yVsWtSu9WoXmG","request_duration_ms":463}}' Idempotency-Key: - - 9c5ca0be-e46a-4edc-ad0c-955774a5a73d + - 6fe27a95-f980-4d02-bbb9-a35c5795d789 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:37 GMT + - Wed, 10 Dec 2025 05:00:02 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9c5ca0be-e46a-4edc-ad0c-955774a5a73d + - 6fe27a95-f980-4d02-bbb9-a35c5795d789 Original-Request: - - req_F8EgOCXUERh4yf + - req_sr1d5C2TA2nCDT Request-Id: - - req_F8EgOCXUERh4yf + - req_sr1d5C2TA2nCDT Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFkKuuB1fWySn2gWanAIW", + "id": "pi_3ScfVMKuuB1fWySn155Te08d", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270476, + "created": 1765342800, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFkKuuB1fWySn2iRhmC3N", + "latest_charge": "ch_3ScfVMKuuB1fWySn1c9ntRHD", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFkKuuB1fWySnnQahB1c5", + "payment_method": "pm_1ScfVMKuuB1fWySnYrIs3xNd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:37 GMT + recorded_at: Wed, 10 Dec 2025 05:00:32 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFkKuuB1fWySn2gWanAIW + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVMKuuB1fWySn155Te08d body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_F8EgOCXUERh4yf","request_duration_ms":917}}' + - '{"last_request_metrics":{"request_id":"req_sr1d5C2TA2nCDT","request_duration_ms":943}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:37 GMT + - Wed, 10 Dec 2025 05:00:02 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_tYaTqKF3zoMQvF + - req_omT4EKofhbAUgx Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFkKuuB1fWySn2gWanAIW", + "id": "pi_3ScfVMKuuB1fWySn155Te08d", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270476, + "created": 1765342800, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFkKuuB1fWySn2iRhmC3N", + "latest_charge": "ch_3ScfVMKuuB1fWySn1c9ntRHD", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFkKuuB1fWySnnQahB1c5", + "payment_method": "pm_1ScfVMKuuB1fWySnYrIs3xNd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:38 GMT + recorded_at: Wed, 10 Dec 2025 05:00:32 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFkKuuB1fWySn2gWanAIW/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVMKuuB1fWySn155Te08d/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_tYaTqKF3zoMQvF","request_duration_ms":406}}' + - '{"last_request_metrics":{"request_id":"req_omT4EKofhbAUgx","request_duration_ms":315}}' Idempotency-Key: - - 1713e13c-0bb2-4dd8-9b88-e27fba00d31e + - b366e60b-d52f-45dc-9be4-6434218e6fc1 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:39 GMT + - Wed, 10 Dec 2025 05:00:03 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 1713e13c-0bb2-4dd8-9b88-e27fba00d31e + - b366e60b-d52f-45dc-9be4-6434218e6fc1 Original-Request: - - req_3plb0YM1UVX72t + - req_aZf2f0lIjMjmh1 Request-Id: - - req_3plb0YM1UVX72t + - req_aZf2f0lIjMjmh1 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFkKuuB1fWySn2gWanAIW", + "id": "pi_3ScfVMKuuB1fWySn155Te08d", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270476, + "created": 1765342800, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFkKuuB1fWySn2iRhmC3N", + "latest_charge": "ch_3ScfVMKuuB1fWySn1c9ntRHD", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFkKuuB1fWySnnQahB1c5", + "payment_method": "pm_1ScfVMKuuB1fWySnYrIs3xNd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:39 GMT + recorded_at: Wed, 10 Dec 2025 05:00:33 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFkKuuB1fWySn2gWanAIW + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVMKuuB1fWySn155Te08d body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_3plb0YM1UVX72t","request_duration_ms":1128}}' + - '{"last_request_metrics":{"request_id":"req_aZf2f0lIjMjmh1","request_duration_ms":983}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:39 GMT + - Wed, 10 Dec 2025 05:00:03 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_hjDjyr8Uk8EC2o + - req_YFZzrNQpbV6UVG Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFkKuuB1fWySn2gWanAIW", + "id": "pi_3ScfVMKuuB1fWySn155Te08d", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270476, + "created": 1765342800, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFkKuuB1fWySn2iRhmC3N", + "latest_charge": "ch_3ScfVMKuuB1fWySn1c9ntRHD", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFkKuuB1fWySnnQahB1c5", + "payment_method": "pm_1ScfVMKuuB1fWySnYrIs3xNd", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:39 GMT + recorded_at: Wed, 10 Dec 2025 05:00:34 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml index 010311202b..c8d8bcc532 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_UnionPay/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_unionpay&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_z0Sv8LCeRvd8Lm","request_duration_ms":447}}' + - '{"last_request_metrics":{"request_id":"req_6c0FkWNld0SEoD","request_duration_ms":306}}' Idempotency-Key: - - b03535cd-fd81-4c54-baba-053a79eeb85d + - 94bfbd37-dfa6-4d81-b305-9ecca5f6907a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:34 GMT + - Wed, 10 Dec 2025 04:59:59 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b03535cd-fd81-4c54-baba-053a79eeb85d + - 94bfbd37-dfa6-4d81-b305-9ecca5f6907a Original-Request: - - req_sRg1mD4wSZtzBB + - req_jIW5QC6y9r6FlQ Request-Id: - - req_sRg1mD4wSZtzBB + - req_jIW5QC6y9r6FlQ Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFiKuuB1fWySn1eqoriIH", + "id": "pi_3ScfVLKuuB1fWySn1xLg6Lg7", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270474, + "created": 1765342799, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFiKuuB1fWySn76ksoMLM", + "payment_method": "pm_1ScfVLKuuB1fWySnBGtaDOP9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:34 GMT + recorded_at: Wed, 10 Dec 2025 05:00:29 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFiKuuB1fWySn1eqoriIH/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVLKuuB1fWySn1xLg6Lg7/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_sRg1mD4wSZtzBB","request_duration_ms":543}}' + - '{"last_request_metrics":{"request_id":"req_jIW5QC6y9r6FlQ","request_duration_ms":445}}' Idempotency-Key: - - 156baf10-1d34-48ac-a2d4-8648b46cdc53 + - af39865e-f702-491a-a218-a41ae5694333 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:35 GMT + - Wed, 10 Dec 2025 05:00:00 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 156baf10-1d34-48ac-a2d4-8648b46cdc53 + - af39865e-f702-491a-a218-a41ae5694333 Original-Request: - - req_UcU00HBeQpsjtJ + - req_UlO0Or187sEzc5 Request-Id: - - req_UcU00HBeQpsjtJ + - req_UlO0Or187sEzc5 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFiKuuB1fWySn1eqoriIH", + "id": "pi_3ScfVLKuuB1fWySn1xLg6Lg7", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270474, + "created": 1765342799, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFiKuuB1fWySn1ldQlGUG", + "latest_charge": "ch_3ScfVLKuuB1fWySn1P88zHvO", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFiKuuB1fWySn76ksoMLM", + "payment_method": "pm_1ScfVLKuuB1fWySnBGtaDOP9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:35 GMT + recorded_at: Wed, 10 Dec 2025 05:00:30 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmFiKuuB1fWySn1eqoriIH + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfVLKuuB1fWySn1xLg6Lg7 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_UcU00HBeQpsjtJ","request_duration_ms":917}}' + - '{"last_request_metrics":{"request_id":"req_UlO0Or187sEzc5","request_duration_ms":807}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:34:36 GMT + - Wed, 10 Dec 2025 05:00:00 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_d8C0blZV1zDV3Q + - req_lGSYKjXDIjdYuY Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmFiKuuB1fWySn1eqoriIH", + "id": "pi_3ScfVLKuuB1fWySn1xLg6Lg7", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270474, + "created": 1765342799, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmFiKuuB1fWySn1ldQlGUG", + "latest_charge": "ch_3ScfVLKuuB1fWySn1P88zHvO", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmFiKuuB1fWySn76ksoMLM", + "payment_method": "pm_1ScfVLKuuB1fWySnBGtaDOP9", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:34:36 GMT + recorded_at: Wed, 10 Dec 2025 05:00:31 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml index be86560896..2e6023a5cf 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_awEUN4jySU4CrJ","request_duration_ms":294}}' + - '{"last_request_metrics":{"request_id":"req_XSCIoGCdeInUq0","request_duration_ms":308}}' Idempotency-Key: - - '049381a6-f01d-49aa-af13-6b39380f6aa4' + - 985ba928-64ee-4e7c-bb4f-8b069ea0f4c8 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:49 GMT + - Wed, 10 Dec 2025 04:59:17 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - '049381a6-f01d-49aa-af13-6b39380f6aa4' + - 985ba928-64ee-4e7c-bb4f-8b069ea0f4c8 Original-Request: - - req_xqFhAuoXCzaNKO + - req_lzy6UGWpeRvobc Request-Id: - - req_xqFhAuoXCzaNKO + - req_lzy6UGWpeRvobc Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmEzKuuB1fWySn0TXgMI0G", + "id": "pi_3ScfUfKuuB1fWySn2Ndemq2G", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270429, + "created": 1765342757, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmEzKuuB1fWySnezd8Ddz1", + "payment_method": "pm_1ScfUfKuuB1fWySnSYxWoelM", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:49 GMT + recorded_at: Wed, 10 Dec 2025 04:59:48 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmEzKuuB1fWySn0TXgMI0G/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUfKuuB1fWySn2Ndemq2G/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_xqFhAuoXCzaNKO","request_duration_ms":461}}' + - '{"last_request_metrics":{"request_id":"req_lzy6UGWpeRvobc","request_duration_ms":421}}' Idempotency-Key: - - 9aa8eb85-e4e4-40fa-ad18-f92564961c4d + - 55ef6336-b4a6-4e5e-82dc-4186a0be350d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:50 GMT + - Wed, 10 Dec 2025 04:59:18 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 9aa8eb85-e4e4-40fa-ad18-f92564961c4d + - 55ef6336-b4a6-4e5e-82dc-4186a0be350d Original-Request: - - req_Chjmh18guDhtSr + - req_8KWVlXZOZ2lCcN Request-Id: - - req_Chjmh18guDhtSr + - req_8KWVlXZOZ2lCcN Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmEzKuuB1fWySn0TXgMI0G", + "id": "pi_3ScfUfKuuB1fWySn2Ndemq2G", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270429, + "created": 1765342757, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmEzKuuB1fWySn0tNEPSMI", + "latest_charge": "ch_3ScfUfKuuB1fWySn2JfabUvU", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmEzKuuB1fWySnezd8Ddz1", + "payment_method": "pm_1ScfUfKuuB1fWySnSYxWoelM", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:50 GMT + recorded_at: Wed, 10 Dec 2025 04:59:49 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmEzKuuB1fWySn0TXgMI0G + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUfKuuB1fWySn2Ndemq2G body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Chjmh18guDhtSr","request_duration_ms":816}}' + - '{"last_request_metrics":{"request_id":"req_8KWVlXZOZ2lCcN","request_duration_ms":813}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:50 GMT + - Wed, 10 Dec 2025 04:59:18 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_xxQ8MzTOV7T0f1 + - req_1T4whhn0QBZhyv Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmEzKuuB1fWySn0TXgMI0G", + "id": "pi_3ScfUfKuuB1fWySn2Ndemq2G", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270429, + "created": 1765342757, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmEzKuuB1fWySn0tNEPSMI", + "latest_charge": "ch_3ScfUfKuuB1fWySn2JfabUvU", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmEzKuuB1fWySnezd8Ddz1", + "payment_method": "pm_1ScfUfKuuB1fWySnSYxWoelM", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:51 GMT + recorded_at: Wed, 10 Dec 2025 04:59:49 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmEzKuuB1fWySn0TXgMI0G/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUfKuuB1fWySn2Ndemq2G/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_xxQ8MzTOV7T0f1","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_1T4whhn0QBZhyv","request_duration_ms":305}}' Idempotency-Key: - - 2a1a50d5-a26a-423c-b92f-d457d1b5f6e9 + - 302abb9c-300a-4661-87e9-df4f4ac4c77d Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:51 GMT + - Wed, 10 Dec 2025 04:59:20 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 2a1a50d5-a26a-423c-b92f-d457d1b5f6e9 + - 302abb9c-300a-4661-87e9-df4f4ac4c77d Original-Request: - - req_dag7grvAYMTqgQ + - req_HAL10JDXZNU5ol Request-Id: - - req_dag7grvAYMTqgQ + - req_HAL10JDXZNU5ol Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmEzKuuB1fWySn0TXgMI0G", + "id": "pi_3ScfUfKuuB1fWySn2Ndemq2G", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270429, + "created": 1765342757, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmEzKuuB1fWySn0tNEPSMI", + "latest_charge": "ch_3ScfUfKuuB1fWySn2JfabUvU", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmEzKuuB1fWySnezd8Ddz1", + "payment_method": "pm_1ScfUfKuuB1fWySnSYxWoelM", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:52 GMT + recorded_at: Wed, 10 Dec 2025 04:59:50 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmEzKuuB1fWySn0TXgMI0G + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUfKuuB1fWySn2Ndemq2G body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_dag7grvAYMTqgQ","request_duration_ms":1123}}' + - '{"last_request_metrics":{"request_id":"req_HAL10JDXZNU5ol","request_duration_ms":1382}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:52 GMT + - Wed, 10 Dec 2025 04:59:20 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_aDAkErQgFZmzX1 + - req_jgJP3WA8cGMcRa Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmEzKuuB1fWySn0TXgMI0G", + "id": "pi_3ScfUfKuuB1fWySn2Ndemq2G", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270429, + "created": 1765342757, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmEzKuuB1fWySn0tNEPSMI", + "latest_charge": "ch_3ScfUfKuuB1fWySn2JfabUvU", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmEzKuuB1fWySnezd8Ddz1", + "payment_method": "pm_1ScfUfKuuB1fWySnSYxWoelM", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:52 GMT + recorded_at: Wed, 10 Dec 2025 04:59:51 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml index d76fd7d690..1eaec88cda 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Q6XVUoPlIlD7vK","request_duration_ms":1}}' + - '{"last_request_metrics":{"request_id":"req_dGVftadBzts2Su","request_duration_ms":3179}}' Idempotency-Key: - - 8aba7dd6-3789-431c-a33f-6a7c0ca1bd44 + - 04bc4ae8-0ef5-4fb2-b74d-32788b98c78a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:47 GMT + - Wed, 10 Dec 2025 04:59:15 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 8aba7dd6-3789-431c-a33f-6a7c0ca1bd44 + - 04bc4ae8-0ef5-4fb2-b74d-32788b98c78a Original-Request: - - req_yyjn1PTYsxv8ZN + - req_TEz9gAIN5X2V0e Request-Id: - - req_yyjn1PTYsxv8ZN + - req_TEz9gAIN5X2V0e Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmExKuuB1fWySn2EZbmzIT", + "id": "pi_3ScfUdKuuB1fWySn0aq7D8ZR", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270427, + "created": 1765342755, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmExKuuB1fWySnnSovHGx7", + "payment_method": "pm_1ScfUdKuuB1fWySnw6EBrpmc", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:47 GMT + recorded_at: Wed, 10 Dec 2025 04:59:46 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmExKuuB1fWySn2EZbmzIT/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUdKuuB1fWySn0aq7D8ZR/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_yyjn1PTYsxv8ZN","request_duration_ms":660}}' + - '{"last_request_metrics":{"request_id":"req_TEz9gAIN5X2V0e","request_duration_ms":428}}' Idempotency-Key: - - 41c7d754-4298-42d5-acef-c51a465d2e38 + - 731ef5dd-5ddc-4937-a150-29845fa904fb Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:48 GMT + - Wed, 10 Dec 2025 04:59:16 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 41c7d754-4298-42d5-acef-c51a465d2e38 + - 731ef5dd-5ddc-4937-a150-29845fa904fb Original-Request: - - req_1nLEV8jYH0UFaj + - req_9sdZHyiINLRKiE Request-Id: - - req_1nLEV8jYH0UFaj + - req_9sdZHyiINLRKiE Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmExKuuB1fWySn2EZbmzIT", + "id": "pi_3ScfUdKuuB1fWySn0aq7D8ZR", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270427, + "created": 1765342755, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmExKuuB1fWySn29NLZEob", + "latest_charge": "ch_3ScfUdKuuB1fWySn0BpedjYJ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmExKuuB1fWySnnSovHGx7", + "payment_method": "pm_1ScfUdKuuB1fWySnw6EBrpmc", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:48 GMT + recorded_at: Wed, 10 Dec 2025 04:59:47 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmExKuuB1fWySn2EZbmzIT + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUdKuuB1fWySn0aq7D8ZR body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1nLEV8jYH0UFaj","request_duration_ms":815}}' + - '{"last_request_metrics":{"request_id":"req_9sdZHyiINLRKiE","request_duration_ms":806}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:49 GMT + - Wed, 10 Dec 2025 04:59:17 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_awEUN4jySU4CrJ + - req_XSCIoGCdeInUq0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmExKuuB1fWySn2EZbmzIT", + "id": "pi_3ScfUdKuuB1fWySn0aq7D8ZR", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270427, + "created": 1765342755, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmExKuuB1fWySn29NLZEob", + "latest_charge": "ch_3ScfUdKuuB1fWySn0BpedjYJ", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmExKuuB1fWySnnSovHGx7", + "payment_method": "pm_1ScfUdKuuB1fWySnw6EBrpmc", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:49 GMT + recorded_at: Wed, 10 Dec 2025 04:59:47 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml index 59ffbac652..76793cb196 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/captures_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_IiinVDZsoB6CIR","request_duration_ms":252}}' + - '{"last_request_metrics":{"request_id":"req_Lal5TXYzM19hCa","request_duration_ms":311}}' Idempotency-Key: - - b2735538-ae24-4f70-90e1-9270c924f1cb + - 6bb6e13f-6f56-4e48-9ab0-f6a99dc5799e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:55 GMT + - Wed, 10 Dec 2025 04:59:23 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - b2735538-ae24-4f70-90e1-9270c924f1cb + - 6bb6e13f-6f56-4e48-9ab0-f6a99dc5799e Original-Request: - - req_HhappGmwaKPro5 + - req_scVwPxGp35bfUm Request-Id: - - req_HhappGmwaKPro5 + - req_scVwPxGp35bfUm Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF4KuuB1fWySn1Au5H6yL", + "id": "pi_3ScfUlKuuB1fWySn0t4OzpX0", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270434, + "created": 1765342763, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF4KuuB1fWySn79pSnUzL", + "payment_method": "pm_1ScfUlKuuB1fWySndrDA2VGY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:55 GMT + recorded_at: Wed, 10 Dec 2025 04:59:54 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF4KuuB1fWySn1Au5H6yL/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUlKuuB1fWySn0t4OzpX0/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_HhappGmwaKPro5","request_duration_ms":524}}' + - '{"last_request_metrics":{"request_id":"req_scVwPxGp35bfUm","request_duration_ms":431}}' Idempotency-Key: - - aa31c722-91de-4eb6-8281-889578f83f24 + - 627c8ff7-1c52-44df-b583-03bbbe56db5a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:55 GMT + - Wed, 10 Dec 2025 04:59:24 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - aa31c722-91de-4eb6-8281-889578f83f24 + - 627c8ff7-1c52-44df-b583-03bbbe56db5a Original-Request: - - req_mU2FA1Dns7wAxT + - req_Uec3ZGFOut87mq Request-Id: - - req_mU2FA1Dns7wAxT + - req_Uec3ZGFOut87mq Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF4KuuB1fWySn1Au5H6yL", + "id": "pi_3ScfUlKuuB1fWySn0t4OzpX0", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270434, + "created": 1765342763, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF4KuuB1fWySn1WFQglTA", + "latest_charge": "ch_3ScfUlKuuB1fWySn0JFtQvI0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF4KuuB1fWySn79pSnUzL", + "payment_method": "pm_1ScfUlKuuB1fWySndrDA2VGY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:56 GMT + recorded_at: Wed, 10 Dec 2025 04:59:55 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF4KuuB1fWySn1Au5H6yL + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUlKuuB1fWySn0t4OzpX0 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mU2FA1Dns7wAxT","request_duration_ms":811}}' + - '{"last_request_metrics":{"request_id":"req_Uec3ZGFOut87mq","request_duration_ms":826}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:56 GMT + - Wed, 10 Dec 2025 04:59:24 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_dvGVZ1IOzcdgz4 + - req_RSgnAHqAIBl4ub Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF4KuuB1fWySn1Au5H6yL", + "id": "pi_3ScfUlKuuB1fWySn0t4OzpX0", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270434, + "created": 1765342763, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF4KuuB1fWySn1WFQglTA", + "latest_charge": "ch_3ScfUlKuuB1fWySn0JFtQvI0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF4KuuB1fWySn79pSnUzL", + "payment_method": "pm_1ScfUlKuuB1fWySndrDA2VGY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,24 +394,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:56 GMT + recorded_at: Wed, 10 Dec 2025 04:59:55 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF4KuuB1fWySn1Au5H6yL/capture + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUlKuuB1fWySn0t4OzpX0/capture body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_dvGVZ1IOzcdgz4","request_duration_ms":303}}' + - '{"last_request_metrics":{"request_id":"req_RSgnAHqAIBl4ub","request_duration_ms":302}}' Idempotency-Key: - - f4035518-2a4b-4927-8a8d-148c3b037947 + - d2e37fe3-839e-4912-a4f3-343dd96cc5a3 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -428,11 +428,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:57 GMT + - Wed, 10 Dec 2025 04:59:25 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -451,17 +451,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - f4035518-2a4b-4927-8a8d-148c3b037947 + - d2e37fe3-839e-4912-a4f3-343dd96cc5a3 Original-Request: - - req_MvUVxme3MEXBkR + - req_W1jkWOfCluRmDi Request-Id: - - req_MvUVxme3MEXBkR + - req_W1jkWOfCluRmDi Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -476,7 +476,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF4KuuB1fWySn1Au5H6yL", + "id": "pi_3ScfUlKuuB1fWySn0t4OzpX0", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -492,19 +492,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270434, + "created": 1765342763, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF4KuuB1fWySn1WFQglTA", + "latest_charge": "ch_3ScfUlKuuB1fWySn0JFtQvI0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF4KuuB1fWySn79pSnUzL", + "payment_method": "pm_1ScfUlKuuB1fWySndrDA2VGY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -529,22 +529,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:57 GMT + recorded_at: Wed, 10 Dec 2025 04:59:56 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF4KuuB1fWySn1Au5H6yL + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUlKuuB1fWySn0t4OzpX0 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_MvUVxme3MEXBkR","request_duration_ms":1019}}' + - '{"last_request_metrics":{"request_id":"req_W1jkWOfCluRmDi","request_duration_ms":1054}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -559,11 +559,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:57 GMT + - Wed, 10 Dec 2025 04:59:26 GMT Content-Type: - application/json Content-Length: - - '1399' + - '1408' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -582,11 +582,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_MRXzkNo93zg27F + - req_eLrgM6ewOzKoU0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -601,7 +601,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF4KuuB1fWySn1Au5H6yL", + "id": "pi_3ScfUlKuuB1fWySn0t4OzpX0", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -617,19 +617,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270434, + "created": 1765342763, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF4KuuB1fWySn1WFQglTA", + "latest_charge": "ch_3ScfUlKuuB1fWySn0JFtQvI0", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF4KuuB1fWySn79pSnUzL", + "payment_method": "pm_1ScfUlKuuB1fWySndrDA2VGY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -654,5 +654,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:57 GMT + recorded_at: Wed, 10 Dec 2025 04:59:56 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml index 108073635f..888a09fdc0 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_PaymentIntentValidator/_call/as_a_guest/when_payment_intent_is_valid/from_Visa_debit_/returns_payment_intent_id.yml @@ -8,15 +8,15 @@ http_interactions: string: amount=100¤cy=eur&payment_method=pm_card_visa_debit&payment_method_types[0]=card&capture_method=manual headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_aDAkErQgFZmzX1","request_duration_ms":304}}' + - '{"last_request_metrics":{"request_id":"req_jgJP3WA8cGMcRa","request_duration_ms":312}}' Idempotency-Key: - - 778f3990-d6e5-46f8-9d0f-f9c4bb531b3d + - 69c195e3-8657-4d01-83d8-630713d2f3c0 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:52 GMT + - Wed, 10 Dec 2025 04:59:20 GMT Content-Type: - application/json Content-Length: - - '1384' + - '1393' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 778f3990-d6e5-46f8-9d0f-f9c4bb531b3d + - 69c195e3-8657-4d01-83d8-630713d2f3c0 Original-Request: - - req_J6rGRvUKx3xQSU + - req_0IPad0n78uQK5S Request-Id: - - req_J6rGRvUKx3xQSU + - req_0IPad0n78uQK5S Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF2KuuB1fWySn0lk7JUtN", + "id": "pi_3ScfUiKuuB1fWySn1NZyesyg", "object": "payment_intent", "amount": 100, "amount_capturable": 0, @@ -97,19 +97,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270432, + "created": 1765342760, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF2KuuB1fWySnhdxmOaAN", + "payment_method": "pm_1ScfUiKuuB1fWySnS0Kj2RMY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -134,24 +134,24 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:52 GMT + recorded_at: Wed, 10 Dec 2025 04:59:51 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF2KuuB1fWySn0lk7JUtN/confirm + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUiKuuB1fWySn1NZyesyg/confirm body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_J6rGRvUKx3xQSU","request_duration_ms":445}}' + - '{"last_request_metrics":{"request_id":"req_0IPad0n78uQK5S","request_duration_ms":410}}' Idempotency-Key: - - c6c0df54-5061-4422-a5e1-6816b7fab7bb + - 668436fe-4f83-4606-84cd-db0bb0e89a41 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -168,11 +168,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:53 GMT + - Wed, 10 Dec 2025 04:59:22 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -191,17 +191,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - c6c0df54-5061-4422-a5e1-6816b7fab7bb + - 668436fe-4f83-4606-84cd-db0bb0e89a41 Original-Request: - - req_HBqY0a7iw0WQAg + - req_wtmUFz6w3ntOD6 Request-Id: - - req_HBqY0a7iw0WQAg + - req_wtmUFz6w3ntOD6 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -216,7 +216,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF2KuuB1fWySn0lk7JUtN", + "id": "pi_3ScfUiKuuB1fWySn1NZyesyg", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -232,19 +232,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270432, + "created": 1765342760, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF2KuuB1fWySn0EhzSlhw", + "latest_charge": "ch_3ScfUiKuuB1fWySn16wZ5Iiv", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF2KuuB1fWySnhdxmOaAN", + "payment_method": "pm_1ScfUiKuuB1fWySnS0Kj2RMY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -269,22 +269,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:53 GMT + recorded_at: Wed, 10 Dec 2025 04:59:53 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SPmF2KuuB1fWySn0lk7JUtN + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfUiKuuB1fWySn1NZyesyg body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_HBqY0a7iw0WQAg","request_duration_ms":919}}' + - '{"last_request_metrics":{"request_id":"req_wtmUFz6w3ntOD6","request_duration_ms":1741}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -299,11 +299,11 @@ http_interactions: Server: - nginx Date: - - Tue, 04 Nov 2025 15:33:54 GMT + - Wed, 10 Dec 2025 04:59:23 GMT Content-Type: - application/json Content-Length: - - '1406' + - '1415' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -322,11 +322,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=PipMrzRrvrSRrNDfiOV0m2AtWY4Xu21mxN7JK1oUGCIORFYtUb4u8aLv3S_orn3P3e7yWHdWanefB4Y2 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_IiinVDZsoB6CIR + - req_Lal5TXYzM19hCa Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -341,7 +341,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SPmF2KuuB1fWySn0lk7JUtN", + "id": "pi_3ScfUiKuuB1fWySn1NZyesyg", "object": "payment_intent", "amount": 100, "amount_capturable": 100, @@ -357,19 +357,19 @@ http_interactions: "capture_method": "manual", "client_secret": "", "confirmation_method": "automatic", - "created": 1762270432, + "created": 1765342760, "currency": "eur", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SPmF2KuuB1fWySn0EhzSlhw", + "latest_charge": "ch_3ScfUiKuuB1fWySn16wZ5Iiv", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SPmF2KuuB1fWySnhdxmOaAN", + "payment_method": "pm_1ScfUiKuuB1fWySnS0Kj2RMY", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -394,5 +394,5 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 04 Nov 2025 15:33:54 GMT + recorded_at: Wed, 10 Dec 2025 04:59:53 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml index 4bb02bc659..8ccbd2a60a 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_called_from_Stripe_SCA/fetches_the_customer_id_and_the_card_id_from_the_correct_response_fields.yml @@ -8,13 +8,13 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Idempotency-Key: - - 01533b83-1cb0-4e7f-a033-86685d54c24b + - 4594d6ad-3d54-44bf-a9a1-f6d2fa7627d2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -31,11 +31,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:46 GMT + - Wed, 10 Dec 2025 05:01:33 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -54,17 +54,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 01533b83-1cb0-4e7f-a033-86685d54c24b + - 4594d6ad-3d54-44bf-a9a1-f6d2fa7627d2 Original-Request: - - req_lmPTPI9M4nvFXN + - req_9rArwgRw0I9Sp9 Request-Id: - - req_lmPTPI9M4nvFXN + - req_9rArwgRw0I9Sp9 Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -79,7 +79,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycQKuuB1fWySnr5rXOVQZ", + "id": "pm_1ScfWrKuuB1fWySnObwK6JOg", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -123,26 +123,27 @@ http_interactions: }, "wallet": null }, - "created": 1760411386, + "created": 1765342893, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:46 GMT + recorded_at: Wed, 10 Dec 2025 05:02:04 GMT - request: method: post uri: https://api.stripe.com/v1/customers body: encoding: UTF-8 - string: expand[0]=sources&email=shirlene.gleichner%40lehner.info + string: expand[0]=sources&email=ethyl%40herman.info headers: Content-Type: - application/x-www-form-urlencoded Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -163,11 +164,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:47 GMT + - Wed, 10 Dec 2025 05:01:34 GMT Content-Type: - application/json Content-Length: - - '827' + - '842' Connection: - close Access-Control-Allow-Credentials: @@ -186,13 +187,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=1U-05ptFGa2yaWR63BMSuvX4Csn-Q9dqk25EwuCfbepTL8Va2Ii4SwFgtl-YxVPWPcyc_c9xbcDvRQml + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=cafZiEO-8PBaTVWZ_9sJy2lkiKKIf25BhmvNEkyAk8yLoFT3mpA_hOzZwfPk9NcszzgS2luWREx4sZEa Idempotency-Key: - - 33568bdb-7470-40c1-845a-802bcdea10c8 + - e19dd3a2-ea55-45b4-ab1c-d8306f1745dc Original-Request: - - req_nnJ2cQsfBO4LFi + - req_9SjPjZYfR6wlch Request-Id: - - req_nnJ2cQsfBO4LFi + - req_9SjPjZYfR6wlch Stripe-Should-Retry: - 'false' Stripe-Version: @@ -211,19 +212,20 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERVdbHchh5Jm5", + "id": "cus_TZpBJe64asYE1d", "object": "customer", "address": null, "balance": 0, - "created": 1760411386, + "created": 1765342894, "currency": null, + "customer_account": null, "default_currency": null, "default_source": null, "delinquent": false, "description": null, "discount": null, - "email": "shirlene.gleichner@lehner.info", - "invoice_prefix": "9XBIVPXB", + "email": "ethyl@herman.info", + "invoice_prefix": "95QT6RK4", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -242,25 +244,25 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/customers/cus_TERVdbHchh5Jm5/sources" + "url": "/v1/customers/cus_TZpBJe64asYE1d/sources" }, "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:09:46 GMT + recorded_at: Wed, 10 Dec 2025 05:02:05 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHycQKuuB1fWySnr5rXOVQZ/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfWrKuuB1fWySnObwK6JOg/attach body: encoding: UTF-8 - string: customer=cus_TERVdbHchh5Jm5 + string: customer=cus_TZpBJe64asYE1d headers: Content-Type: - application/x-www-form-urlencoded Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -281,11 +283,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:47 GMT + - Wed, 10 Dec 2025 05:01:35 GMT Content-Type: - application/json Content-Length: - - '1066' + - '1094' Connection: - close Access-Control-Allow-Credentials: @@ -304,13 +306,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=wUjFEE7ApzH5YNfBC4D5QQ3TwwFHuZNdwxniGp3PLXLBI-JVktOqPznYTKf2wRCi8mxwVG7-kFp20KOD + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=sbULgA64Ex5NnUNCtMM_x0PWz9hOFxxhuBScTAfLd3tChV3xeuUzfKOwR6NS8KziLjB1ZwSdJs6INXbm Idempotency-Key: - - 3325283e-cf6e-4d00-91d8-c55eb000bc0d + - 9b180f37-7111-4ad4-9e7e-01f532bb7c9e Original-Request: - - req_aZjTKgyKXfQhKQ + - req_VP8qRqpxbepEkz Request-Id: - - req_aZjTKgyKXfQhKQ + - req_VP8qRqpxbepEkz Stripe-Should-Retry: - 'false' Stripe-Version: @@ -329,7 +331,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycQKuuB1fWySnr5rXOVQZ", + "id": "pm_1ScfWrKuuB1fWySnObwK6JOg", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -373,11 +375,12 @@ http_interactions: }, "wallet": null }, - "created": 1760411386, - "customer": "cus_TERVdbHchh5Jm5", + "created": 1765342893, + "customer": "cus_TZpBJe64asYE1d", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:47 GMT + recorded_at: Wed, 10 Dec 2025 05:02:05 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml similarity index 81% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml index 3dab6641d3..3ef3ac2c88 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/Stripe_ProfileStorer/create_customer_from_token/when_request_fails/raises_an_error.yml @@ -8,15 +8,15 @@ http_interactions: string: type=card&card[number]=4242424242424242&card[exp_month]=12&card[exp_year]=2026&card[cvc]=314 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_lmPTPI9M4nvFXN","request_duration_ms":375}}' + - '{"last_request_metrics":{"request_id":"req_9rArwgRw0I9Sp9","request_duration_ms":385}}' Idempotency-Key: - - 71640edc-eae7-4198-9235-f6787df1dc50 + - 5a116c9c-85ba-4e95-ad7a-75dabad12fff Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:48 GMT + - Wed, 10 Dec 2025 05:01:35 GMT Content-Type: - application/json Content-Length: - - '1055' + - '1083' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 71640edc-eae7-4198-9235-f6787df1dc50 + - 5a116c9c-85ba-4e95-ad7a-75dabad12fff Original-Request: - - req_6aocEyTcUi1tDs + - req_zHb6Oc66rtcy2l Request-Id: - - req_6aocEyTcUi1tDs + - req_zHb6Oc66rtcy2l Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycRKuuB1fWySnGyzJ9lzE", + "id": "pm_1ScfWtKuuB1fWySnZzXpBxwO", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -125,13 +125,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411387, + "created": 1765342895, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:47 GMT + recorded_at: Wed, 10 Dec 2025 05:02:06 GMT - request: method: post uri: https://api.stripe.com/v1/customers @@ -140,15 +141,15 @@ http_interactions: string: name=Apple+Customer&email=applecustomer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_6aocEyTcUi1tDs","request_duration_ms":360}}' + - '{"last_request_metrics":{"request_id":"req_zHb6Oc66rtcy2l","request_duration_ms":383}}' Idempotency-Key: - - a5bd03a7-ce89-4aad-9538-6211fc8f4e27 + - cc03c7b3-3a9d-4eda-b951-e92043da2d7e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -165,11 +166,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:48 GMT + - Wed, 10 Dec 2025 05:01:35 GMT Content-Type: - application/json Content-Length: - - '649' + - '677' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -188,17 +189,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - a5bd03a7-ce89-4aad-9538-6211fc8f4e27 + - cc03c7b3-3a9d-4eda-b951-e92043da2d7e Original-Request: - - req_JsZXL1nC53W4bE + - req_p7r8WgV8JKIfPN Request-Id: - - req_JsZXL1nC53W4bE + - req_p7r8WgV8JKIfPN Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -213,18 +214,19 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERVPAxatKYQBe", + "id": "cus_TZpBxI8xWPUR65", "object": "customer", "address": null, "balance": 0, - "created": 1760411388, + "created": 1765342895, "currency": null, + "customer_account": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "applecustomer@example.com", - "invoice_prefix": "7U7ZMZH9", + "invoice_prefix": "BMD34MZA", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -241,24 +243,24 @@ http_interactions: "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:09:48 GMT + recorded_at: Wed, 10 Dec 2025 05:02:06 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHycRKuuB1fWySnGyzJ9lzE/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfWtKuuB1fWySnZzXpBxwO/attach body: encoding: UTF-8 - string: customer=cus_TERVPAxatKYQBe + string: customer=cus_TZpBxI8xWPUR65 headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_JsZXL1nC53W4bE","request_duration_ms":428}}' + - '{"last_request_metrics":{"request_id":"req_p7r8WgV8JKIfPN","request_duration_ms":422}}' Idempotency-Key: - - 98df616a-2be1-413b-838e-6dbaef2535b6 + - 4118653b-2b2d-42bd-8449-bd0cfab3aa1a Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -275,11 +277,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:49 GMT + - Wed, 10 Dec 2025 05:01:36 GMT Content-Type: - application/json Content-Length: - - '1066' + - '1094' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -298,17 +300,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 98df616a-2be1-413b-838e-6dbaef2535b6 + - 4118653b-2b2d-42bd-8449-bd0cfab3aa1a Original-Request: - - req_SQ4f3FcbFiBaPJ + - req_CIRtVxWWmRPgAk Request-Id: - - req_SQ4f3FcbFiBaPJ + - req_CIRtVxWWmRPgAk Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -323,7 +325,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHycRKuuB1fWySnGyzJ9lzE", + "id": "pm_1ScfWtKuuB1fWySnZzXpBxwO", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -367,26 +369,27 @@ http_interactions: }, "wallet": null }, - "created": 1760411387, - "customer": "cus_TERVPAxatKYQBe", + "created": 1765342895, + "customer": "cus_TZpBxI8xWPUR65", + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:09:48 GMT + recorded_at: Wed, 10 Dec 2025 05:02:07 GMT - request: method: post uri: https://api.stripe.com/v1/customers body: encoding: UTF-8 - string: expand[0]=sources&email=mirtha_daugherty%40heathcote.us + string: expand[0]=sources&email=armida%40murray.name headers: Content-Type: - application/x-www-form-urlencoded Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -407,11 +410,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:49 GMT + - Wed, 10 Dec 2025 05:01:37 GMT Content-Type: - application/json Content-Length: - - '826' + - '843' Connection: - close Access-Control-Allow-Credentials: @@ -430,13 +433,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=xqUwulEfemKMHgaZFUjpwj1wYPS59tOOTqy2R-AXOSLmGtiTyyzE_2uMHsfpQ11VOlbxhNzWsc_zZZhu + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=sbULgA64Ex5NnUNCtMM_x0PWz9hOFxxhuBScTAfLd3tChV3xeuUzfKOwR6NS8KziLjB1ZwSdJs6INXbm Idempotency-Key: - - 9462c123-23cc-40b8-a5a1-47a69b355f62 + - bf99b3bb-80af-47cd-a434-7198c7b995cf Original-Request: - - req_urq6wjGFuyUxfB + - req_ciFjIJfHh8bDux Request-Id: - - req_urq6wjGFuyUxfB + - req_ciFjIJfHh8bDux Stripe-Should-Retry: - 'false' Stripe-Version: @@ -455,19 +458,20 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "cus_TERVKTDgmvjurg", + "id": "cus_TZpBSafVSPHEcA", "object": "customer", "address": null, "balance": 0, - "created": 1760411389, + "created": 1765342896, "currency": null, + "customer_account": null, "default_currency": null, "default_source": null, "delinquent": false, "description": null, "discount": null, - "email": "mirtha_daugherty@heathcote.us", - "invoice_prefix": "ETWCA3IX", + "email": "armida@murray.name", + "invoice_prefix": "VSWMZQVI", "invoice_settings": { "custom_fields": null, "default_payment_method": null, @@ -486,25 +490,25 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/customers/cus_TERVKTDgmvjurg/sources" + "url": "/v1/customers/cus_TZpBSafVSPHEcA/sources" }, "tax_exempt": "none", "test_clock": null } - recorded_at: Tue, 14 Oct 2025 03:09:49 GMT + recorded_at: Wed, 10 Dec 2025 05:02:07 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1SHycRKuuB1fWySnGyzJ9lzE/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1ScfWtKuuB1fWySnZzXpBxwO/attach body: encoding: UTF-8 - string: customer=cus_TERVKTDgmvjurg + string: customer=cus_TZpBSafVSPHEcA headers: Content-Type: - application/x-www-form-urlencoded Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -525,7 +529,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:09:50 GMT + - Wed, 10 Dec 2025 05:01:37 GMT Content-Type: - application/json Content-Length: @@ -548,13 +552,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=2IQ5CsE46wixpONgk183_oZaMGTonZaO6V6PRXVrJtHm3wtj5r0IytAfD5XoHCxPJScgPiXUIcm0WklZ + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=cafZiEO-8PBaTVWZ_9sJy2lkiKKIf25BhmvNEkyAk8yLoFT3mpA_hOzZwfPk9NcszzgS2luWREx4sZEa Idempotency-Key: - - 4d43e887-f3d7-44ac-971d-2c7efaa71bd5 + - fce2d4da-8249-41e2-b52c-7c284cbdbcd2 Original-Request: - - req_cXDYEflwBeMyiJ + - req_FC4Y593nyPwVXB Request-Id: - - req_cXDYEflwBeMyiJ + - req_FC4Y593nyPwVXB Stripe-Should-Retry: - 'false' Stripe-Version: @@ -575,9 +579,9 @@ http_interactions: { "error": { "message": "The payment method you provided has already been attached to a customer.", - "request_log_url": "https://dashboard.stripe.com/test/logs/req_cXDYEflwBeMyiJ?t=1760411389", + "request_log_url": "https://dashboard.stripe.com/test/logs/req_FC4Y593nyPwVXB?t=1765342897", "type": "invalid_request_error" } } - recorded_at: Tue, 14 Oct 2025 03:09:50 GMT + recorded_at: Wed, 10 Dec 2025 05:02:08 GMT recorded_with: VCR 6.2.0 diff --git a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml similarity index 83% rename from spec/fixtures/vcr_cassettes/Stripe-v13.5.1/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml rename to spec/fixtures/vcr_cassettes/Stripe-v15.5.0/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml index 6ad12e88aa..b7987e75d4 100644 --- a/spec/fixtures/vcr_cassettes/Stripe-v13.5.1/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml +++ b/spec/fixtures/vcr_cassettes/Stripe-v15.5.0/_As_an_hub_manager_I_want_to_make_Stripe_payments_/with_a_payment_using_a_StripeSCA_payment_method/that_is_completed/allows_to_refund_the_payment.yml @@ -8,15 +8,15 @@ http_interactions: string: type=standard&country=AU&email=lettuce.producer%40example.com headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_VGdnL9HTac89Zz","request_duration_ms":325}}' + - '{"last_request_metrics":{"request_id":"req_KFpKlknDqR3CHY","request_duration_ms":322}}' Idempotency-Key: - - d6c688c4-592b-49b1-9f36-da19a71734f3 + - 9afc9bde-addc-4610-8896-a44ebb1a901c Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Content-Type: @@ -33,11 +33,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:13 GMT + - Wed, 10 Dec 2025 05:02:53 GMT Content-Type: - application/json Content-Length: - - '3447' + - '3529' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -56,17 +56,17 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - d6c688c4-592b-49b1-9f36-da19a71734f3 + - 9afc9bde-addc-4610-8896-a44ebb1a901c Original-Request: - - req_Pd688QDMfgVLje + - req_eA6TqgSdHzGMKI Request-Id: - - req_Pd688QDMfgVLje + - req_eA6TqgSdHzGMKI Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -81,7 +81,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydn3LxZ4L8SBw", + "id": "acct_1ScfY73jWNG3tByU", "object": "account", "business_profile": { "annual_revenue": null, @@ -90,6 +90,7 @@ http_interactions: "minority_owned_business_designation": null, "name": null, "product_description": null, + "specified_commercial_transactions_act_url": null, "support_address": null, "support_email": null, "support_phone": null, @@ -114,7 +115,7 @@ http_interactions: "type": "application" }, "country": "AU", - "created": 1760411472, + "created": 1765342972, "default_currency": "aud", "details_submitted": false, "email": "lettuce.producer@example.com", @@ -123,7 +124,7 @@ http_interactions: "data": [], "has_more": false, "total_count": 0, - "url": "/v1/accounts/acct_1SHydn3LxZ4L8SBw/external_accounts" + "url": "/v1/accounts/acct_1ScfY73jWNG3tByU/external_accounts" }, "future_requirements": { "alternatives": [], @@ -215,6 +216,7 @@ http_interactions: }, "statement_descriptor": null }, + "paypay_payments": {}, "sepa_debit_payments": {} }, "tos_acceptance": { @@ -224,7 +226,7 @@ http_interactions: }, "type": "standard" } - recorded_at: Tue, 14 Oct 2025 03:11:12 GMT + recorded_at: Wed, 10 Dec 2025 05:03:24 GMT - request: method: get uri: https://api.stripe.com/v1/payment_methods/pm_card_mastercard @@ -233,13 +235,13 @@ http_interactions: string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_Pd688QDMfgVLje","request_duration_ms":2021}}' + - '{"last_request_metrics":{"request_id":"req_eA6TqgSdHzGMKI","request_duration_ms":2545}}' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -254,11 +256,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:13 GMT + - Wed, 10 Dec 2025 05:02:53 GMT Content-Type: - application/json Content-Length: - - '1073' + - '1101' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -277,11 +279,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Request-Id: - - req_R7TKcsNN3xQear + - req_RVoQuWJLJwzTRU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -296,7 +298,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pm_1SHydpKuuB1fWySnC8ycxZeo", + "id": "pm_1ScfY9KuuB1fWySnmxNKTpkR", "object": "payment_method", "allow_redisplay": "unspecified", "billing_details": { @@ -322,7 +324,7 @@ http_interactions: }, "country": "US", "display_brand": "mastercard", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "fingerprint": "BL35fEFVcTTS5wpE", "funding": "credit", @@ -340,13 +342,14 @@ http_interactions: }, "wallet": null }, - "created": 1760411473, + "created": 1765342973, "customer": null, + "customer_account": null, "livemode": false, "metadata": {}, "type": "card" } - recorded_at: Tue, 14 Oct 2025 03:11:13 GMT + recorded_at: Wed, 10 Dec 2025 05:03:24 GMT - request: method: post uri: https://api.stripe.com/v1/payment_intents @@ -355,17 +358,17 @@ http_interactions: string: amount=3600¤cy=aud&payment_method=pm_card_mastercard&payment_method_types[0]=card&capture_method=automatic&confirm=true headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_R7TKcsNN3xQear","request_duration_ms":369}}' + - '{"last_request_metrics":{"request_id":"req_RVoQuWJLJwzTRU","request_duration_ms":361}}' Idempotency-Key: - - 594b8982-940b-4db6-8735-72ad6b4b8e71 + - a4d8d861-14a1-4d11-b2f0-e91d61c6363e Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU X-Stripe-Client-User-Agent: - "" Content-Type: @@ -382,11 +385,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:14 GMT + - Wed, 10 Dec 2025 05:02:55 GMT Content-Type: - application/json Content-Length: - - '1437' + - '1446' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -405,19 +408,19 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - 594b8982-940b-4db6-8735-72ad6b4b8e71 + - a4d8d861-14a1-4d11-b2f0-e91d61c6363e Original-Request: - - req_BFLMdkqVUvyHpr + - req_ma7OqegIdUoInI Request-Id: - - req_BFLMdkqVUvyHpr + - req_ma7OqegIdUoInI Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Stripe-Should-Retry: - 'false' Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -432,7 +435,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", + "id": "pi_3ScfYA3jWNG3tByU0hYKYNl4", "object": "payment_intent", "amount": 3600, "amount_capturable": 0, @@ -448,19 +451,19 @@ http_interactions: "capture_method": "automatic", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411473, + "created": 1765342974, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydp3LxZ4L8SBw1YnTY61W", + "latest_charge": "ch_3ScfYA3jWNG3tByU0CEshSQ9", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydp3LxZ4L8SBwK6AOUSGl", + "payment_method": "pm_1ScfYA3jWNG3tByUwtdZLQcn", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -485,22 +488,22 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:14 GMT + recorded_at: Wed, 10 Dec 2025 05:03:25 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydp3LxZ4L8SBw1Y79S3fO + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfYA3jWNG3tByU0hYKYNl4 body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -515,11 +518,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:19 GMT + - Wed, 10 Dec 2025 05:02:56 GMT Content-Type: - application/json Content-Length: - - '1437' + - '1446' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -538,13 +541,13 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=wUjFEE7ApzH5YNfBC4D5QQ3TwwFHuZNdwxniGp3PLXLBI-JVktOqPznYTKf2wRCi8mxwVG7-kFp20KOD + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=EBEdXvGq7vyH5-HXur0mgbtI571KR9hWqG0PWAUMbAFCjbwUqpD4IZrGD38VgDCDiHYssbcVZ5ZF0Ci4 Request-Id: - - req_2ZxBr19dviIQHh + - req_PDtHgIyA1uFwWj Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -559,7 +562,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", + "id": "pi_3ScfYA3jWNG3tByU0hYKYNl4", "object": "payment_intent", "amount": 3600, "amount_capturable": 0, @@ -575,19 +578,19 @@ http_interactions: "capture_method": "automatic", "client_secret": "", "confirmation_method": "automatic", - "created": 1760411473, + "created": 1765342974, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, - "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydp3LxZ4L8SBw1YnTY61W", + "latest_charge": "ch_3ScfYA3jWNG3tByU0CEshSQ9", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydp3LxZ4L8SBwK6AOUSGl", + "payment_method": "pm_1ScfYA3jWNG3tByUwtdZLQcn", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -612,10 +615,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:19 GMT + recorded_at: Wed, 10 Dec 2025 05:03:27 GMT - request: method: get - uri: https://api.stripe.com/v1/payment_intents/pi_3SHydp3LxZ4L8SBw1Y79S3fO + uri: https://api.stripe.com/v1/payment_intents/pi_3ScfYA3jWNG3tByU0hYKYNl4 body: encoding: US-ASCII string: '' @@ -623,7 +626,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -631,7 +634,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Connection: - close Accept-Encoding: @@ -646,11 +649,11 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:19 GMT + - Wed, 10 Dec 2025 05:02:57 GMT Content-Type: - application/json Content-Length: - - '5484' + - '5512' Connection: - close Access-Control-Allow-Credentials: @@ -669,11 +672,11 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=wUjFEE7ApzH5YNfBC4D5QQ3TwwFHuZNdwxniGp3PLXLBI-JVktOqPznYTKf2wRCi8mxwVG7-kFp20KOD + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=sbULgA64Ex5NnUNCtMM_x0PWz9hOFxxhuBScTAfLd3tChV3xeuUzfKOwR6NS8KziLjB1ZwSdJs6INXbm Request-Id: - - req_trfO2kUrafKpB2 + - req_Fnyel1hp5UyqxU Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Stripe-Version: - '2020-08-27' Vary: @@ -690,7 +693,7 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", + "id": "pi_3ScfYA3jWNG3tByU0hYKYNl4", "object": "payment_intent", "amount": 3600, "amount_capturable": 0, @@ -708,7 +711,7 @@ http_interactions: "object": "list", "data": [ { - "id": "ch_3SHydp3LxZ4L8SBw1YnTY61W", + "id": "ch_3ScfYA3jWNG3tByU0CEshSQ9", "object": "charge", "amount": 3600, "amount_captured": 3600, @@ -716,7 +719,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHydp3LxZ4L8SBw16CdJq0k", + "balance_transaction": "txn_3ScfYA3jWNG3tByU0SBqU9vY", "billing_details": { "address": { "city": null, @@ -733,7 +736,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411473, + "created": 1765342974, "currency": "aud", "customer": null, "description": null, @@ -756,17 +759,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 20, + "risk_score": 54, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", - "payment_method": "pm_1SHydp3LxZ4L8SBwK6AOUSGl", + "payment_intent": "pi_3ScfYA3jWNG3tByU0hYKYNl4", + "payment_method": "pm_1ScfYA3jWNG3tByUwtdZLQcn", "payment_method_details": { "card": { "amount_authorized": 3600, - "authorization_code": "726663", + "authorization_code": "287569", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -774,7 +777,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -794,7 +797,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCDYBMRQ1014", + "network_transaction_id": "MCCPRAXWM1210", "overcapture": { "maximum_amount_capturable": 3600, "status": "unavailable" @@ -808,14 +811,14 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5ZG4zTHhaNEw4U0J3KNf-tscGMgbZLq6tOCU6LBYmOZC2gxWsBTeAtB3C47eRosqDrq-IdsoG-Kglt7-bA0_g1PPCmmNvi-4_", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWTczaldORzN0QnlVKIH-48kGMgb8d8sh0_46LBb0L3PUeE-2IRV-qmg18Isk7XK3baN3_atFptLMY34zbPQ4335OnrUvhWQm", "refunded": false, "refunds": { "object": "list", "data": [], "has_more": false, "total_count": 0, - "url": "/v1/charges/ch_3SHydp3LxZ4L8SBw1YnTY61W/refunds" + "url": "/v1/charges/ch_3ScfYA3jWNG3tByU0CEshSQ9/refunds" }, "review": null, "shipping": null, @@ -830,23 +833,24 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges?payment_intent=pi_3SHydp3LxZ4L8SBw1Y79S3fO" + "url": "/v1/charges?payment_intent=pi_3ScfYA3jWNG3tByU0hYKYNl4" }, "client_secret": "", "confirmation_method": "automatic", - "created": 1760411473, + "created": 1765342974, "currency": "aud", "customer": null, + "customer_account": null, "description": null, "excluded_payment_method_types": null, "invoice": null, "last_payment_error": null, - "latest_charge": "ch_3SHydp3LxZ4L8SBw1YnTY61W", + "latest_charge": "ch_3ScfYA3jWNG3tByU0CEshSQ9", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, - "payment_method": "pm_1SHydp3LxZ4L8SBwK6AOUSGl", + "payment_method": "pm_1ScfYA3jWNG3tByUwtdZLQcn", "payment_method_configuration_details": null, "payment_method_options": { "card": { @@ -871,10 +875,10 @@ http_interactions: "transfer_data": null, "transfer_group": null } - recorded_at: Tue, 14 Oct 2025 03:11:19 GMT + recorded_at: Wed, 10 Dec 2025 05:03:27 GMT - request: method: post - uri: https://api.stripe.com/v1/charges/ch_3SHydp3LxZ4L8SBw1YnTY61W/refunds + uri: https://api.stripe.com/v1/charges/ch_3ScfYA3jWNG3tByU0CEshSQ9/refunds body: encoding: UTF-8 string: amount=3600&expand[0]=charge @@ -884,7 +888,7 @@ http_interactions: Authorization: - "" User-Agent: - - Stripe/v1 ActiveMerchantBindings/1.133.0 + - Stripe/v1 ActiveMerchantBindings/1.137.0 Stripe-Version: - '2020-08-27' X-Stripe-Client-User-Agent: @@ -892,7 +896,7 @@ http_interactions: X-Stripe-Client-User-Metadata: - '{"ip":null}' Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Connection: - close Accept-Encoding: @@ -907,7 +911,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:21 GMT + - Wed, 10 Dec 2025 05:02:58 GMT Content-Type: - application/json Content-Length: @@ -930,15 +934,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=wUjFEE7ApzH5YNfBC4D5QQ3TwwFHuZNdwxniGp3PLXLBI-JVktOqPznYTKf2wRCi8mxwVG7-kFp20KOD + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=x2T6EiV0aVoqi7bptLcBBCRyz6_e_jOpOr8TL2aF1FPiuN1gl_B4E090YPWwRcl4Bf0Zj0kRKYN4666x Idempotency-Key: - - 397a6354-5feb-40c0-ac8d-9d184b56db67 + - afb74b07-b762-44e1-b485-c9014598259e Original-Request: - - req_qAWdOEvYKUek1i + - req_3Qy25ShuVlth78 Request-Id: - - req_qAWdOEvYKUek1i + - req_3Qy25ShuVlth78 Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Stripe-Should-Retry: - 'false' Stripe-Version: @@ -957,12 +961,12 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "re_3SHydp3LxZ4L8SBw1VlvX59r", + "id": "re_3ScfYA3jWNG3tByU0O9wi8Yn", "object": "refund", "amount": 3600, - "balance_transaction": "txn_3SHydp3LxZ4L8SBw1o5MGOEN", + "balance_transaction": "txn_3ScfYA3jWNG3tByU06egdpOD", "charge": { - "id": "ch_3SHydp3LxZ4L8SBw1YnTY61W", + "id": "ch_3ScfYA3jWNG3tByU0CEshSQ9", "object": "charge", "amount": 3600, "amount_captured": 3600, @@ -970,7 +974,7 @@ http_interactions: "application": "", "application_fee": null, "application_fee_amount": null, - "balance_transaction": "txn_3SHydp3LxZ4L8SBw16CdJq0k", + "balance_transaction": "txn_3ScfYA3jWNG3tByU0SBqU9vY", "billing_details": { "address": { "city": null, @@ -987,7 +991,7 @@ http_interactions: }, "calculated_statement_descriptor": "OFNOFNOFN", "captured": true, - "created": 1760411473, + "created": 1765342974, "currency": "aud", "customer": null, "description": null, @@ -1010,17 +1014,17 @@ http_interactions: "network_status": "approved_by_network", "reason": null, "risk_level": "normal", - "risk_score": 20, + "risk_score": 54, "seller_message": "Payment complete.", "type": "authorized" }, "paid": true, - "payment_intent": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", - "payment_method": "pm_1SHydp3LxZ4L8SBwK6AOUSGl", + "payment_intent": "pi_3ScfYA3jWNG3tByU0hYKYNl4", + "payment_method": "pm_1ScfYA3jWNG3tByUwtdZLQcn", "payment_method_details": { "card": { "amount_authorized": 3600, - "authorization_code": "726663", + "authorization_code": "287569", "brand": "mastercard", "checks": { "address_line1_check": null, @@ -1028,7 +1032,7 @@ http_interactions: "cvc_check": "pass" }, "country": "US", - "exp_month": 10, + "exp_month": 12, "exp_year": 2026, "extended_authorization": { "status": "disabled" @@ -1048,7 +1052,7 @@ http_interactions: "network_token": { "used": false }, - "network_transaction_id": "MCCDYBMRQ1014", + "network_transaction_id": "MCCPRAXWM1210", "overcapture": { "maximum_amount_capturable": 3600, "status": "unavailable" @@ -1062,18 +1066,18 @@ http_interactions: "radar_options": {}, "receipt_email": null, "receipt_number": null, - "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU0h5ZG4zTHhaNEw4U0J3KNj-tscGMgZf36HCUg06LBbSTLTN9hjPKHqY5ImN8Y6HaP2dJtZtr2GEEr42nRFehL1oslq2pOwUXYEV", + "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xU2NmWTczaldORzN0QnlVKIL-48kGMgbSoe0_UZw6LBYyxIIqW7vr6H4Z4x51NUZD031LR5Q4yEX6qO1urIWDHeDDv6QwvybZ6EHb", "refunded": true, "refunds": { "object": "list", "data": [ { - "id": "re_3SHydp3LxZ4L8SBw1VlvX59r", + "id": "re_3ScfYA3jWNG3tByU0O9wi8Yn", "object": "refund", "amount": 3600, - "balance_transaction": "txn_3SHydp3LxZ4L8SBw1o5MGOEN", - "charge": "ch_3SHydp3LxZ4L8SBw1YnTY61W", - "created": 1760411480, + "balance_transaction": "txn_3ScfYA3jWNG3tByU06egdpOD", + "charge": "ch_3ScfYA3jWNG3tByU0CEshSQ9", + "created": 1765342977, "currency": "aud", "destination_details": { "card": { @@ -1084,7 +1088,7 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", + "payment_intent": "pi_3ScfYA3jWNG3tByU0hYKYNl4", "reason": null, "receipt_number": null, "source_transfer_reversal": null, @@ -1094,7 +1098,7 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/charges/ch_3SHydp3LxZ4L8SBw1YnTY61W/refunds" + "url": "/v1/charges/ch_3ScfYA3jWNG3tByU0CEshSQ9/refunds" }, "review": null, "shipping": null, @@ -1106,7 +1110,7 @@ http_interactions: "transfer_data": null, "transfer_group": null }, - "created": 1760411480, + "created": 1765342977, "currency": "aud", "destination_details": { "card": { @@ -1117,31 +1121,31 @@ http_interactions: "type": "card" }, "metadata": {}, - "payment_intent": "pi_3SHydp3LxZ4L8SBw1Y79S3fO", + "payment_intent": "pi_3ScfYA3jWNG3tByU0hYKYNl4", "reason": null, "receipt_number": null, "source_transfer_reversal": null, "status": "succeeded", "transfer_reversal": null } - recorded_at: Tue, 14 Oct 2025 03:11:21 GMT + recorded_at: Wed, 10 Dec 2025 05:03:29 GMT - request: method: delete - uri: https://api.stripe.com/v1/accounts/acct_1SHydn3LxZ4L8SBw + uri: https://api.stripe.com/v1/accounts/acct_1ScfY73jWNG3tByU body: encoding: US-ASCII string: '' headers: User-Agent: - - Stripe/v1 RubyBindings/13.5.1 + - Stripe/v1 RubyBindings/15.5.0 Authorization: - "" X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BFLMdkqVUvyHpr","request_duration_ms":1309}}' + - '{"last_request_metrics":{"request_id":"req_ma7OqegIdUoInI","request_duration_ms":1332}}' Idempotency-Key: - - e335c431-2807-40ae-af54-91dd54268e69 + - abf1aba7-ba03-4361-a1eb-bb33b722c5b2 Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil X-Stripe-Client-User-Agent: - "" Accept-Encoding: @@ -1156,7 +1160,7 @@ http_interactions: Server: - nginx Date: - - Tue, 14 Oct 2025 03:11:24 GMT + - Wed, 10 Dec 2025 05:03:01 GMT Content-Type: - application/json Content-Length: @@ -1179,15 +1183,15 @@ http_interactions: Content-Security-Policy: - base-uri 'none'; default-src 'none'; form-action 'none'; frame-ancestors 'none'; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self'; worker-src - 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=jVzrtviNjqYMRgh5ONHGaxUYdglkIUxJedPVvO4_Z4tZfU3NWDNTcN5sI4pIl2TqCbhMGJIPQqggpxt7 + 'none'; upgrade-insecure-requests; report-uri https://q.stripe.com/csp-violation?q=vn-kdYNC1s3hDiXRhhwC1XR0hBLmLcsdIMCRlo13rosJ4C3caLqD_POExMdYc1IhbElyv04kp1IcvLWm Idempotency-Key: - - e335c431-2807-40ae-af54-91dd54268e69 + - abf1aba7-ba03-4361-a1eb-bb33b722c5b2 Request-Id: - - req_9TnjHgPWycXFdi + - req_eWnTSRQ7q166nC Stripe-Account: - - acct_1SHydn3LxZ4L8SBw + - acct_1ScfY73jWNG3tByU Stripe-Version: - - 2025-02-24.acacia + - 2025-08-27.basil Vary: - Origin X-Stripe-Priority-Routing-Enabled: @@ -1202,9 +1206,9 @@ http_interactions: encoding: UTF-8 string: |- { - "id": "acct_1SHydn3LxZ4L8SBw", + "id": "acct_1ScfY73jWNG3tByU", "object": "account", "deleted": true } - recorded_at: Tue, 14 Oct 2025 03:11:24 GMT + recorded_at: Wed, 10 Dec 2025 05:03:31 GMT recorded_with: VCR 6.2.0 From e09853af0ced0eafb0182b1bbd60f07046c73524 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 14 Nov 2025 09:05:23 +1100 Subject: [PATCH 029/270] Replace deprecated Rails secrets Use new credentials interface. --- app/controllers/admin/stripe_accounts_controller.rb | 2 +- config/environments/test.rb | 3 --- config/initializers/secret_token.rb | 4 ++-- lib/stripe/account_connector.rb | 2 +- spec/lib/stripe/account_connector_spec.rb | 2 +- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/app/controllers/admin/stripe_accounts_controller.rb b/app/controllers/admin/stripe_accounts_controller.rb index 3b094adc5e..371d1cdd2f 100644 --- a/app/controllers/admin/stripe_accounts_controller.rb +++ b/app/controllers/admin/stripe_accounts_controller.rb @@ -6,7 +6,7 @@ module Admin class StripeAccountsController < Spree::Admin::BaseController def connect payload = params.permit(:enterprise_id).to_h - key = Openfoodnetwork::Application.config.secret_token + key = Openfoodnetwork::Application.credentials.secret_token url_params = { state: JWT.encode(payload, key, 'HS256'), scope: "read_write" } redirect_to Stripe::OAuth.authorize_url(url_params) end diff --git a/config/environments/test.rb b/config/environments/test.rb index 9fd47d1c3e..2dc933a434 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -74,9 +74,6 @@ Rails.application.configure do allowed_warnings = [ # List strings here to allow matching deprecations. # - # `Rails.application.secrets` is deprecated in favor of `Rails.application.credentials` and will be removed in Rails 7.2 - "Rails.application.secrets", - "Passing the class as positional argument", # Spree::CreditCard model aliases `cc_type` and has a method called `cc_type=` defined. Starting in Rails 7.2 `brand=` will not be calling `cc_type=` anymore. You may want to additionally define `brand=` to preserve the current behavior. diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb index e66b94f4b8..edfdd45ded 100644 --- a/config/initializers/secret_token.rb +++ b/config/initializers/secret_token.rb @@ -6,7 +6,7 @@ # no regular words or you'll be exposed to dictionary attacks. # Rails 4+ key for signing and encrypting cookies. -Openfoodnetwork::Application.config.secret_key_base = ENV["SECRET_TOKEN"] +Openfoodnetwork::Application.credentials.secret_key_base = ENV["SECRET_TOKEN"] # Legacy secret_token variable. This is still used directly for encryption. -Openfoodnetwork::Application.config.secret_token = ENV["SECRET_TOKEN"] +Openfoodnetwork::Application.credentials.secret_token = ENV["SECRET_TOKEN"] diff --git a/lib/stripe/account_connector.rb b/lib/stripe/account_connector.rb index 7eb0fab237..dfb77e7c93 100644 --- a/lib/stripe/account_connector.rb +++ b/lib/stripe/account_connector.rb @@ -41,7 +41,7 @@ module Stripe def state # Returns the original payload - key = Openfoodnetwork::Application.config.secret_token + key = Openfoodnetwork::Application.credentials.secret_token JWT.decode(params["state"], key, true, algorithm: 'HS256')[0] end diff --git a/spec/lib/stripe/account_connector_spec.rb b/spec/lib/stripe/account_connector_spec.rb index c399a620fe..58d28360e7 100644 --- a/spec/lib/stripe/account_connector_spec.rb +++ b/spec/lib/stripe/account_connector_spec.rb @@ -10,7 +10,7 @@ module Stripe let(:user) { create(:user) } let(:enterprise) { create(:enterprise) } let(:payload) { { "junk" => "Ssfs" } } - let(:state) { JWT.encode(payload, Openfoodnetwork::Application.config.secret_token) } + let(:state) { JWT.encode(payload, Openfoodnetwork::Application.credentials.secret_token) } let(:params) { { "state" => state } } let(:connector) { AccountConnector.new(user, params) } From e91fab57021164a5c4405f7ff094f647e99ae03f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 19 Dec 2025 14:22:25 +1100 Subject: [PATCH 030/270] Remove legacy config for secret key --- app/controllers/admin/stripe_accounts_controller.rb | 2 +- config/initializers/secret_token.rb | 3 --- lib/stripe/account_connector.rb | 2 +- spec/lib/stripe/account_connector_spec.rb | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/stripe_accounts_controller.rb b/app/controllers/admin/stripe_accounts_controller.rb index 371d1cdd2f..9ff245bf18 100644 --- a/app/controllers/admin/stripe_accounts_controller.rb +++ b/app/controllers/admin/stripe_accounts_controller.rb @@ -6,7 +6,7 @@ module Admin class StripeAccountsController < Spree::Admin::BaseController def connect payload = params.permit(:enterprise_id).to_h - key = Openfoodnetwork::Application.credentials.secret_token + key = Rails.application.secret_key_base url_params = { state: JWT.encode(payload, key, 'HS256'), scope: "read_write" } redirect_to Stripe::OAuth.authorize_url(url_params) end diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb index edfdd45ded..0f11ab5e6e 100644 --- a/config/initializers/secret_token.rb +++ b/config/initializers/secret_token.rb @@ -7,6 +7,3 @@ # Rails 4+ key for signing and encrypting cookies. Openfoodnetwork::Application.credentials.secret_key_base = ENV["SECRET_TOKEN"] - -# Legacy secret_token variable. This is still used directly for encryption. -Openfoodnetwork::Application.credentials.secret_token = ENV["SECRET_TOKEN"] diff --git a/lib/stripe/account_connector.rb b/lib/stripe/account_connector.rb index dfb77e7c93..ae14e06ebc 100644 --- a/lib/stripe/account_connector.rb +++ b/lib/stripe/account_connector.rb @@ -41,7 +41,7 @@ module Stripe def state # Returns the original payload - key = Openfoodnetwork::Application.credentials.secret_token + key = Rails.application.secret_key_base JWT.decode(params["state"], key, true, algorithm: 'HS256')[0] end diff --git a/spec/lib/stripe/account_connector_spec.rb b/spec/lib/stripe/account_connector_spec.rb index 58d28360e7..0108fbaa72 100644 --- a/spec/lib/stripe/account_connector_spec.rb +++ b/spec/lib/stripe/account_connector_spec.rb @@ -10,7 +10,7 @@ module Stripe let(:user) { create(:user) } let(:enterprise) { create(:enterprise) } let(:payload) { { "junk" => "Ssfs" } } - let(:state) { JWT.encode(payload, Openfoodnetwork::Application.credentials.secret_token) } + let(:state) { JWT.encode(payload, Rails.application.secret_key_base) } let(:params) { { "state" => state } } let(:connector) { AccountConnector.new(user, params) } From 3173c79e8fc92599b7a7c33a34e030ef05525bc2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 09:04:24 +0000 Subject: [PATCH 031/270] Bump haml_lint from 0.67.0 to 0.68.0 Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.67.0 to 0.68.0. - [Release notes](https://github.com/sds/haml-lint/releases) - [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md) - [Commits](https://github.com/sds/haml-lint/compare/v0.67.0...v0.68.0) --- updated-dependencies: - dependency-name: haml_lint dependency-version: 0.68.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6936476a74..23d22a0797 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -379,7 +379,7 @@ GEM temple (>= 0.8.2) thor tilt - haml_lint (0.67.0) + haml_lint (0.68.0) haml (>= 5.0) parallel (~> 1.10) rainbow @@ -576,7 +576,7 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.6.0) + prism (1.7.0) private_address_check (0.5.0) pry (0.15.2) coderay (~> 1.1) @@ -875,7 +875,7 @@ GEM faraday (~> 2.0) faraday-follow_redirects sysexits (1.2.0) - temple (0.8.2) + temple (0.10.4) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) thor (1.4.0) @@ -902,7 +902,7 @@ GEM simplecov_json_formatter unicode-display_width (3.2.0) unicode-emoji (~> 4.1) - unicode-emoji (4.1.0) + unicode-emoji (4.2.0) uniform_notifier (1.17.0) uri (1.1.1) valid_email2 (5.2.3) From ad4ce14486e0eadc6b8cfa7af35324e7fa1dd13b Mon Sep 17 00:00:00 2001 From: piyyu Date: Fri, 26 Dec 2025 00:11:09 +0530 Subject: [PATCH 032/270] Fix import multiple products button route --- app/views/admin/products_v3/_no_products.html.haml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/admin/products_v3/_no_products.html.haml b/app/views/admin/products_v3/_no_products.html.haml index fb81197908..efb86d0b50 100644 --- a/app/views/admin/products_v3/_no_products.html.haml +++ b/app/views/admin/products_v3/_no_products.html.haml @@ -7,5 +7,6 @@ #no-products-actions %a{ href: "/admin/products/new", class: "button icon-plus", icon: "icon-plus" } = t(:new_product) - %a{ href: "/admin/products/import", class: "button icon-upload secondary", icon: "icon-upload" } + %a{ href: admin_product_import_path, class: "button icon-upload secondary", icon: "icon-upload" } = t(".import_products") + From 0f59333cd982e25984178863d53c1417e49c4a13 Mon Sep 17 00:00:00 2001 From: piyyu Date: Fri, 26 Dec 2025 02:10:46 +0530 Subject: [PATCH 033/270] Fix import multiple products button route --- spec/system/admin/products_v3/actions_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/system/admin/products_v3/actions_spec.rb b/spec/system/admin/products_v3/actions_spec.rb index 6ce798332a..8b09bf6b7b 100644 --- a/spec/system/admin/products_v3/actions_spec.rb +++ b/spec/system/admin/products_v3/actions_spec.rb @@ -27,7 +27,7 @@ RSpec.describe 'As an enterprise user, I can manage my products' do # displays buttons to add products with the correct links expect(page).to have_link(class: "button", text: "New Product", href: "/admin/products/new") expect(page).to have_link(class: "button", text: "Import multiple products", - href: "/admin/products/import") + href: admin_product_import_path) end end From a3c08ceb7c45dcb10877493ff45392cd737b9742 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 30 Dec 2025 01:25:25 +0500 Subject: [PATCH 034/270] Add AJAX search functionality for enterprise fees and related entities in reports --- app/controllers/admin/reports_controller.rb | 1 + .../concerns/reports/ajax_search.rb | 105 ++++++++++++++++++ app/helpers/reports_helper.rb | 21 ---- app/models/spree/ability.rb | 4 +- ...se_fees_with_tax_report_by_order.html.haml | 12 +- ...fees_with_tax_report_by_producer.html.haml | 17 +-- .../controllers/select2_ajax_controller.js | 105 ++++++++++++++++++ config/routes/admin.rb | 6 + lib/reporting/frontend_data.rb | 6 +- 9 files changed, 239 insertions(+), 38 deletions(-) create mode 100644 app/controllers/concerns/reports/ajax_search.rb create mode 100644 app/webpacker/controllers/select2_ajax_controller.js diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb index bea2a2adc0..d8efede625 100644 --- a/app/controllers/admin/reports_controller.rb +++ b/app/controllers/admin/reports_controller.rb @@ -4,6 +4,7 @@ module Admin class ReportsController < Spree::Admin::BaseController include ActiveStorage::SetCurrent include ReportsActions + include Reports::AjaxSearch helper ReportsHelper diff --git a/app/controllers/concerns/reports/ajax_search.rb b/app/controllers/concerns/reports/ajax_search.rb new file mode 100644 index 0000000000..dc397c84e4 --- /dev/null +++ b/app/controllers/concerns/reports/ajax_search.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +module Reports + module AjaxSearch + extend ActiveSupport::Concern + + def search_enterprise_fees + report = report_class.new(spree_current_user, params, render: false) + fee_ids = enterprise_fee_ids(report.search.result) + query = EnterpriseFee.where(id: fee_ids) + + render json: build_search_response(query) + end + + def search_enterprise_fee_owners + report = report_class.new(spree_current_user, params, render: false) + owner_ids = enterprise_fee_owner_ids(report.search.result) + query = Enterprise.where(id: owner_ids) + + render json: build_search_response(query) + end + + def search_distributors + query = frontend_data.distributors + + render json: build_search_response(query) + end + + def search_order_cycles + query = frontend_data.order_cycles + + render json: build_search_response(query) + end + + def search_order_customers + query = frontend_data.order_customers + + render json: build_search_response(query) + end + + def search_suppliers + query = frontend_data.orders_suppliers + + render json: build_search_response(query) + end + + private + + def build_search_response(query) + page = (params[:page] || 1).to_i + per_page = 30 + + filtered_query = apply_search_filter(query) + total_count = filtered_query.size + items = paginated_items(filtered_query, page, per_page) + results = format_results(items) + + { results: results, pagination: { more: (page * per_page) < total_count } } + end + + def apply_search_filter(query) + search_term = params[:q] + return query if search_term.blank? + + # Handle different model types + if query.model == OrderCycle + query.where("order_cycles.name ILIKE ?", "%#{search_term}%") + elsif query.model == Customer + query.where("customers.email ILIKE ?", "%#{search_term}%") + else + query.where("name ILIKE ?", "%#{search_term}%") + end + end + + def paginated_items(query, page, per_page) + if query.model == Customer + query.order(:email).offset((page - 1) * per_page).limit(per_page).pluck(:email, :id) + elsif query.model == OrderCycle + query.order('order_cycles.orders_close_at DESC') + .offset((page - 1) * per_page) + .limit(per_page).pluck( + :name, :id + ) + else + query.order(:name).offset((page - 1) * per_page).limit(per_page).pluck(:name, :id) + end + end + + def format_results(items) + items.map { |name, id| { id: id, text: name } } + end + + def frontend_data + @frontend_data ||= Reporting::FrontendData.new(spree_current_user) + end + + def enterprise_fee_owner_ids(orders) + EnterpriseFee.where(id: enterprise_fee_ids(orders)).select(:enterprise_id) + end + + def enterprise_fee_ids(orders) + Spree::Adjustment.enterprise_fee.where(order_id: orders.select(:id)).select(:originator_id) + end + end +end diff --git a/app/helpers/reports_helper.rb b/app/helpers/reports_helper.rb index 1caab98aa9..0fa95863e0 100644 --- a/app/helpers/reports_helper.rb +++ b/app/helpers/reports_helper.rb @@ -34,29 +34,8 @@ module ReportsHelper end end - def fee_name_options(orders) - EnterpriseFee.where(id: enterprise_fee_ids(orders)) - .pluck(:name, :id) - end - - def fee_owner_options(orders) - Enterprise.where(id: enterprise_fee_owner_ids(orders)) - .pluck(:name, :id) - end - delegate :currency_symbol, to: :'Spree::Money' - def enterprise_fee_owner_ids(orders) - EnterpriseFee.where(id: enterprise_fee_ids(orders)) - .pluck(:enterprise_id) - end - - def enterprise_fee_ids(orders) - Spree::Adjustment.enterprise_fee - .where(order_id: orders.map(&:id)) - .pluck(:originator_id) - end - def datepicker_time(datetime) datetime = Time.zone.parse(datetime) if datetime.is_a? String datetime.strftime('%Y-%m-%d %H:%M') diff --git a/app/models/spree/ability.rb b/app/models/spree/ability.rb index 63833e309f..654b76a781 100644 --- a/app/models/spree/ability.rb +++ b/app/models/spree/ability.rb @@ -260,7 +260,9 @@ module Spree can [:admin, :index, :import], ::Admin::DfcProductImportsController # Reports page - can [:admin, :index, :show, :create], ::Admin::ReportsController + can [:admin, :index, :show, :create, :search_enterprise_fees, :search_enterprise_fee_owners, + :search_distributors, :search_suppliers, :search_order_cycles, :search_order_customers], + ::Admin::ReportsController can [:admin, :show, :create, :customers, :orders_and_distributors, :group_buys, :payments, :orders_and_fulfillment, :products_and_inventory, :order_cycle_management, :packing, :enterprise_fee_summary, :bulk_coop, :suppliers], :report diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml index 4a3af1ef5d..6939f28eb7 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml @@ -1,23 +1,25 @@ +- search_url_query = {report_type: :enterprise_fee_summary, report_subtype: :enterprise_fees_with_tax_report_by_order} .row .alpha.two.columns= label_tag nil, t(:report_hubs) - .omega.fourteen.columns= f.collection_select(:distributor_id_in, @data.distributors, :id, :name, {}, {class: "select2 fullwidth", multiple: true}) + .omega.fourteen.columns + = f.select(:distributor_id_in, [], {selected: params.dig(:q, :distributor_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_distributors_reports_url}}) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) .omega.fourteen.columns - = f.select(:order_cycle_id_in, report_order_cycle_options(@data.order_cycles), {selected: params.dig(:q, :order_cycle_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:order_cycle_id_in, [], {selected: params.dig(:q, :order_cycle_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_cycles_reports_url}}) .row .alpha.two.columns= label_tag nil, t(:fee_name) .omega.fourteen.columns - = f.select(:enterprise_fee_id_in, fee_name_options(@report.search.result), {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:enterprise_fee_id_in, [], {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fees_reports_url(search_url_query)}}) .row .alpha.two.columns= label_tag nil, t(:fee_owner) .omega.fourteen.columns - = f.select(:enterprise_fee_owner_id_in, fee_owner_options(@report.search.result), {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:enterprise_fee_owner_id_in, [], {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fee_owners_reports_url(search_url_query)}}) .row .alpha.two.columns= label_tag nil, t(:report_customers) .omega.fourteen.columns - = f.select(:customer_id_in, customer_email_options(@data.order_customers), {selected: params.dig(:q, :customer_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:customer_id_in, [], {selected: params.dig(:q, :customer_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_customers_reports_url}}) diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml index 1c19788df6..ef0b54245c 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml @@ -1,27 +1,28 @@ +- search_url_query = {report_type: :enterprise_fee_summary, report_subtype: :enterprise_fees_with_tax_report_by_producer} .row .alpha.two.columns= label_tag nil, t(:report_hubs) - .omega.fourteen.columns= f.collection_select(:distributor_id_in, @data.distributors, :id, :name, {}, {class: "select2 fullwidth", multiple: true}) - + .omega.fourteen.columns + = f.select(:distributor_id_in, [], {selected: params.dig(:q, :distributor_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_distributors_reports_url}}) .row .alpha.two.columns= label_tag nil, t(:report_producers) - .omega.fourteen.columns= select_tag(:supplier_id_in, options_from_collection_for_select(@data.orders_suppliers, :id, :name, params[:supplier_id_in]), {class: "select2 fullwidth", multiple: true}) + .omega.fourteen.columns + = select_tag(:supplier_id_in, [], {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_suppliers_reports_url}}) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) .omega.fourteen.columns - = f.select(:order_cycle_id_in, report_order_cycle_options(@data.order_cycles), {selected: params.dig(:q, :order_cycle_id_in)}, {class: "select2 fullwidth", multiple: true}) - + = f.select(:order_cycle_id_in, [], {selected: params.dig(:q, :order_cycle_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_cycles_reports_url}}) .row .alpha.two.columns= label_tag nil, t(:fee_name) .omega.fourteen.columns - = f.select(:enterprise_fee_id_in, fee_name_options(@report.search.result), {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:enterprise_fee_id_in, [], {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fees_reports_url(search_url_query)}}) .row .alpha.two.columns= label_tag nil, t(:fee_owner) .omega.fourteen.columns - = f.select(:enterprise_fee_owner_id_in, fee_owner_options(@report.search.result), {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:enterprise_fee_owner_id_in, [], {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fee_owners_reports_url(search_url_query)}}) .row .alpha.two.columns= label_tag nil, t(:report_customers) .omega.fourteen.columns - = f.select(:customer_id_in, customer_email_options(@data.order_customers), {selected: params.dig(:q, :customer_id_in)}, {class: "select2 fullwidth", multiple: true}) + = f.select(:customer_id_in, [], {selected: params.dig(:q, :customer_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_customers_reports_url}}) diff --git a/app/webpacker/controllers/select2_ajax_controller.js b/app/webpacker/controllers/select2_ajax_controller.js new file mode 100644 index 0000000000..24735406e0 --- /dev/null +++ b/app/webpacker/controllers/select2_ajax_controller.js @@ -0,0 +1,105 @@ +import { Controller } from "stimulus"; + +export default class extends Controller { + static values = { + url: String, + }; + + connect() { + if (typeof $ === "undefined" || typeof $.fn.select2 === "undefined") { + console.error("Select2 AJAX Controller: jQuery or Select2 not loaded"); + return; + } + + const ajaxUrl = this.urlValue; + if (!ajaxUrl) return; + + const selectName = this.element.name; + const selectId = this.element.id; + const isMultiple = this.element.multiple; + + const container = document.createElement("div"); + container.dataset.select2HiddenContainer = "true"; + + this.element.replaceWith(container); + + // select2 methods are accessible via jQuery + // Plus, ajax calls with multi-select require a hidden input in select2 + const $select2Input = $(''); + $select2Input.attr("id", selectId); + container.appendChild($select2Input[0]); + + // IN-MEMORY cache to avoid repeated ajax calls for same query/page + const ajaxCache = {}; + + const select2Options = { + ajax: { + url: ajaxUrl, + dataType: "json", + quietMillis: 300, + data: function (term, page) { + return { + q: term || "", + page: page || 1, + }; + }, + transport: function (params) { + const term = params.data.q || ""; + const page = params.data.page || 1; + const cacheKey = `${term}::${page}`; + + if (ajaxCache[cacheKey]) { + params.success(ajaxCache[cacheKey]); + return; + } + + const request = $.ajax(params); + + request.then((data) => { + ajaxCache[cacheKey] = data; + params.success(data); + }); + + return request; + }, + results: function (data, _page) { + return { + results: data.results || [], + more: (data.pagination && data.pagination.more) || false, + }; + }, + }, + allowClear: true, + minimumInputLength: 0, + multiple: isMultiple, + width: "100%", + formatResult: (item) => item.text, + formatSelection: (item) => item.text, + }; + + // Initialize select2 with ajax options on hidden input + $select2Input.select2(select2Options); + + // Rails-style array submission requires multiple hidden inputs with same name + const syncHiddenInputs = (values) => { + // remove old inputs + container.querySelectorAll(`input[name="${selectName}"]`).forEach((e) => e.remove()); + + values.forEach((value) => { + const input = document.createElement("input"); + input.type = "hidden"; + input.name = selectName; + input.value = value; + container.appendChild(input); + }); + }; + + // On change → rebuild hidden inputs to submit filter values + $select2Input.on("change", () => { + const valuesString = $select2Input.val() || ""; + const values = valuesString.split(",") || []; + + syncHiddenInputs(Array.isArray(values) ? values : [values]); + }); + } +} diff --git a/config/routes/admin.rb b/config/routes/admin.rb index b80d340bd4..68c60b29f9 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -137,6 +137,12 @@ Openfoodnetwork::Application.routes.draw do end get '/reports', to: 'reports#index', as: :reports + get '/reports/search_enterprise_fees', to: 'reports#search_enterprise_fees', as: :search_enterprise_fees_reports + get '/reports/search_enterprise_fee_owners', to: 'reports#search_enterprise_fee_owners', as: :search_enterprise_fee_owners_reports + get '/reports/search_distributors', to: 'reports#search_distributors', as: :search_distributors_reports + get '/reports/search_suppliers', to: 'reports#search_suppliers', as: :search_suppliers_reports + get '/reports/search_order_cycles', to: 'reports#search_order_cycles', as: :search_order_cycles_reports + get '/reports/search_order_customers', to: 'reports#search_order_customers', as: :search_order_customers_reports match '/reports/:report_type(/:report_subtype)', to: 'reports#show', via: :get, as: :report match '/reports/:report_type(/:report_subtype)', to: 'reports#create', via: :post end diff --git a/lib/reporting/frontend_data.rb b/lib/reporting/frontend_data.rb index 5a1152d4a2..682e071fb1 100644 --- a/lib/reporting/frontend_data.rb +++ b/lib/reporting/frontend_data.rb @@ -46,7 +46,7 @@ module Reporting end def order_customers - Customer.where(id: visible_order_customer_ids).select("customers.id, customers.email") + Customer.where(id: visible_order_customer_ids_query).select("customers.id, customers.email") end private @@ -57,8 +57,8 @@ module Reporting @permissions ||= OpenFoodNetwork::Permissions.new(current_user) end - def visible_order_customer_ids - Permissions::Order.new(current_user).visible_orders.pluck(:customer_id) + def visible_order_customer_ids_query + Permissions::Order.new(current_user).visible_orders.select(:customer_id) end end end From 03b7c07495b0e8705182714cf13874143820ca80 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 30 Dec 2025 01:25:35 +0500 Subject: [PATCH 035/270] Add tests for Select2AjaxController with AJAX functionality --- .../admin/reports_controller_spec.rb | 149 +++++++++++++++++ .../stimulus/select2_ajax_controller_test.js | 156 ++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 spec/javascripts/stimulus/select2_ajax_controller_test.js diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb index d0b6104d8c..2f6404cba6 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/controllers/admin/reports_controller_spec.rb @@ -370,4 +370,153 @@ RSpec.describe Admin::ReportsController do end end end + + context "AJAX Search" do + let(:enterprise_fee1) { + create(:enterprise_fee, name: "Delivery Fee", enterprise: distributor1) + } + let(:enterprise_fee2) { create(:enterprise_fee, name: "Admin Fee", enterprise: distributor2) } + + before do + controller_login_as_admin + orderA1.adjustments.create!( + originator: enterprise_fee1, + label: "Delivery Fee", + amount: 5.0, + state: "finalized", + order: orderA1 + ) + orderB1.adjustments.create!( + originator: enterprise_fee2, + label: "Admin Fee", + amount: 3.0, + state: "finalized", + order: orderB1 + ) + end + + describe "#search_enterprise_fees" do + it "returns paginated JSON with enterprise fees ordered by name" do + spree_get( + :search_enterprise_fees, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + names = json_response["results"].pluck("text") + expect(names).to eq(['Admin Fee', 'Delivery Fee']) + end + + it "caches and works with different report types" do + spree_get( + :search_enterprise_fees, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + first_response = response.parsed_body + + spree_get( + :search_enterprise_fees, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + second_response = response.parsed_body + + expect(first_response).to eq(second_response) + end + end + + describe "#search_enterprise_fee_owners" do + it "returns paginated JSON with unique enterprise owners ordered by name" do + distributor1.update!(name: "Zebra Farm") + distributor2.update!(name: "Alpha Market") + + spree_get( + :search_enterprise_fee_owners, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + names = json_response["results"].pluck("text") + expect(names).to eq(['Alpha Market', 'Zebra Farm']) + end + + it "caches results" do + spree_get( + :search_enterprise_fee_owners, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + first_response = response.parsed_body + + spree_get( + :search_enterprise_fee_owners, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + ) + second_response = response.parsed_body + + expect(first_response).to eq(second_response) + end + end + + describe "#search_order_customers" do + it "filters customers by email and returns paginated results" do + customer1 = create(:customer, email: "alice@example.com", enterprise: distributor1) + customer2 = create(:customer, email: "bob@example.com", enterprise: distributor1) + orderA1.update!(customer: customer1) + orderA2.update!(customer: customer2) + + spree_get( + :search_order_customers, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "alice" + ) + + json_response = response.parsed_body + expect(json_response["results"].pluck("text")).to eq(["alice@example.com"]) + end + end + + describe "#search_order_cycles" do + it "filters order cycles by name and orders by close date" do + ocA.update!(name: "Winter Market") + ocB.update!(name: "Summer Market") + + spree_get( + :search_order_cycles, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "Winter" + ) + + json_response = response.parsed_body + expect(json_response["results"].pluck("text")).to eq(["Winter Market"]) + end + end + + describe "#search_distributors" do + it "filters distributors by name" do + distributor1.update!(name: "Alpha Farm") + distributor2.update!(name: "Beta Market") + + spree_get( + :search_distributors, + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "Alpha" + ) + + json_response = response.parsed_body + expect(json_response["results"].pluck("text")).to eq(["Alpha Farm"]) + end + end + end end diff --git a/spec/javascripts/stimulus/select2_ajax_controller_test.js b/spec/javascripts/stimulus/select2_ajax_controller_test.js new file mode 100644 index 0000000000..3b1d449a7a --- /dev/null +++ b/spec/javascripts/stimulus/select2_ajax_controller_test.js @@ -0,0 +1,156 @@ +/** + * @jest-environment jsdom + */ + +import { Application } from "stimulus"; +import select2_ajax_controller from "../../../app/webpacker/controllers/select2_ajax_controller.js"; + +describe("Select2AjaxController", () => { + let select2InitOptions = null; + let application; + + beforeAll(() => { + application = Application.start(); + application.register("select2-ajax", select2_ajax_controller); + }); + + beforeEach(() => { + select2InitOptions = null; + + // Mock jQuery and select2 + const mockVal = jest.fn(function (value) { + if (value !== undefined) { + this._value = value; + return this; + } + return this._value || ""; + }); + + const mockOn = jest.fn().mockReturnThis(); + + const mockSelect2 = jest.fn(function (options) { + if (typeof options === "string" && options === "destroy") { + return this; + } + select2InitOptions = options; + return this; + }); + + const jQueryMock = jest.fn((selector) => { + let element; + if (typeof selector === "string" && selector.startsWith(" + + + `; + }); + + afterEach(() => { + document.body.innerHTML = ""; + delete global.$; + }); + + describe("#connect", () => { + it("initializes select2 with correct AJAX URL", () => { + expect(select2InitOptions).not.toBeNull(); + expect(select2InitOptions.ajax.url).toBe("/api/search"); + }); + + it("configures select2 with correct options", () => { + expect(select2InitOptions.ajax.dataType).toBe("json"); + expect(select2InitOptions.ajax.quietMillis).toBe(300); + expect(select2InitOptions.allowClear).toBe(true); + expect(select2InitOptions.minimumInputLength).toBe(0); + expect(select2InitOptions.width).toBe("100%"); + }); + + it("configures AJAX data function", () => { + const dataFunc = select2InitOptions.ajax.data; + const result = dataFunc("search term", 2); + + expect(result).toEqual({ + q: "search term", + page: 2, + }); + }); + + it("handles empty search term", () => { + const dataFunc = select2InitOptions.ajax.data; + const result = dataFunc(null, null); + + expect(result).toEqual({ + q: "", + page: 1, + }); + }); + + it("configures results function with pagination", () => { + const resultsFunc = select2InitOptions.ajax.results; + const mockData = { + results: [{ id: 1, text: "Item 1" }], + pagination: { more: true }, + }; + + const result = resultsFunc(mockData, 1); + + expect(result).toEqual({ + results: mockData.results, + more: true, + }); + }); + + it("handles missing pagination", () => { + const resultsFunc = select2InitOptions.ajax.results; + const mockData = { + results: [{ id: 1, text: "Item 1" }], + }; + + const result = resultsFunc(mockData, 1); + + expect(result).toEqual({ + results: mockData.results, + more: false, + }); + }); + + it("configures format functions", () => { + const item = { id: 1, text: "Test Item" }; + + expect(select2InitOptions.formatResult(item)).toBe("Test Item"); + expect(select2InitOptions.formatSelection(item)).toBe("Test Item"); + }); + }); +}); From 13229cc0c1aadc55c91916c8fa054bdf778069e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Dec 2025 09:01:27 +0000 Subject: [PATCH 036/270] Bump trix from 2.1.15 to 2.1.16 Bumps [trix](https://github.com/basecamp/trix) from 2.1.15 to 2.1.16. - [Release notes](https://github.com/basecamp/trix/releases) - [Commits](https://github.com/basecamp/trix/compare/v2.1.15...v2.1.16) --- updated-dependencies: - dependency-name: trix dependency-version: 2.1.16 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index fafebed5fd..65c43756be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9621,9 +9621,9 @@ tr46@^5.1.0: punycode "^2.3.1" trix@*: - version "2.1.15" - resolved "https://registry.yarnpkg.com/trix/-/trix-2.1.15.tgz#fabad796ea779a8ae96522402fbc214cbfc4015f" - integrity sha512-LoaXWczdTUV8+3Box92B9b1iaDVbxD14dYemZRxi3PwY+AuDm97BUJV2aHLBUFPuDABhxp0wzcbf0CxHCVmXiw== + version "2.1.16" + resolved "https://registry.yarnpkg.com/trix/-/trix-2.1.16.tgz#601be839258b87cc83019915650c50eb7cbc161e" + integrity sha512-XtZgWI+oBvLzX7CWnkIf+ZWC+chL+YG/TkY43iMTV0Zl+CJjn18B1GJUCEWJ8qgfpcyMBuysnNAfPWiv2sV14A== dependencies: dompurify "^3.2.5" From b8de75b1ef2f8a54a2e7a076388b02aa63a66f58 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 6 Jan 2026 02:39:56 +0500 Subject: [PATCH 037/270] Add "None" option to tags filter and update search functionality - Implemented apply_tags_filter method to handle "None" option in tag searches. - Updated tags select field to include "None" option in the filters. - Enhanced search_by_tag method in specs to accept multiple tags and raise an error if none are provided. - Added tests for searching by "None" tag and combinations with other tags. --- .../admin/products_v3_controller.rb | 46 +++++++++++++++++- .../admin/products_v3/_filters.html.haml | 2 +- config/locales/en.yml | 1 + spec/support/products_helper.rb | 8 +++- spec/support/request/tomselect_helper.rb | 2 +- spec/system/admin/products_v3/index_spec.rb | 47 ++++++++++++++++--- 6 files changed, 94 insertions(+), 12 deletions(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index 19243b4278..db600e2c5b 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -179,6 +179,8 @@ module Admin product_query = OpenFoodNetwork::Permissions.new(spree_current_user) .editable_products.merge(product_scope_with_includes).ransack(ransack_query).result + product_query = apply_tags_filter(product_query) + # Postgres requires ORDER BY expressions to appear in the SELECT list when using DISTINCT. # When the current ransack sort uses the computed stock columns, include them in the select # so the generated COUNT/DISTINCT query is valid. @@ -225,12 +227,54 @@ module Admin query.merge!(Spree::Variant::SEARCH_KEY => @search_term) end query.merge!(variants_primary_taxon_id_in: @category_id) if @category_id.present? - query.merge!(variants_tags_name_in: @tags) if @tags.present? query.merge!(@q) if @q query end + # Apply tags filter with OR logic: + # - Products with variants having selected tags + # - OR products with variants having no tags (when "None" is selected) + # + # Note: This cannot be implemented using Ransack because Ransack applies + # AND semantics across associations and cannot express OR logic that combines + # the presence and absence of the same associated records. + def apply_tags_filter(base_query) + return base_query if @tags.blank? + + tags = Array(@tags) + none_key = I18n.t('admin.products_v3.filters.tags.none') + + has_none = tags.include?(none_key) + tag_names = tags.reject { |t| t == none_key } + + queries = [] + + if tag_names.any? + # Products with at least one variant having one of the selected tags + tagged_product_ids = Spree::Variant + .joins(taggings: :tag) + .where(tags: { name: tag_names }) + .select(:product_id) + + queries << base_query.where(id: tagged_product_ids) + end + + if has_none + # Products where no variants have any tags + tagged_product_ids = Spree::Variant + .joins(:taggings) + .select(:product_id) + + queries << base_query.where.not(id: tagged_product_ids) + end + + return base_query if queries.empty? + + # Combine queries using ActiveRecord's or method + queries.reduce { |combined, query| combined.or(query) } + end + # Optimise by pre-loading required columns def product_query_includes [ diff --git a/app/views/admin/products_v3/_filters.html.haml b/app/views/admin/products_v3/_filters.html.haml index fc07b83b46..a3e30e53b1 100644 --- a/app/views/admin/products_v3/_filters.html.haml +++ b/app/views/admin/products_v3/_filters.html.haml @@ -23,7 +23,7 @@ - select_tag_options = { class: "fullwidth", multiple: true , data: { controller: "tom-select", "tom-select-placeholder-value": t(".select_tag"), "tom-select-options-value": '{ "maxItems": 5 , "plugins": { "remove_button": {} , "no_active_items": {}, "checkbox_options": { "checkedClassNames": ["ts-checked"], "uncheckedClassNames": ["ts-unchecked"] } } }' } } - = select_tag :tags_name_in, options_for_select(available_tags, tags), select_tag_options + = select_tag :tags_name_in, options_for_select(available_tags.unshift(t('.tags.none')), tags), select_tag_options .submit .search-button = button_tag t(".search"), class: "secondary icon-search relaxed", name: nil diff --git a/config/locales/en.yml b/config/locales/en.yml index d3fe23123d..c79b9992a7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -977,6 +977,7 @@ en: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/spec/support/products_helper.rb b/spec/support/products_helper.rb index 42de042eb3..dde11158ce 100644 --- a/spec/support/products_helper.rb +++ b/spec/support/products_helper.rb @@ -34,8 +34,12 @@ module ProductsHelper click_button "Search" end - def search_by_tag(tag) - tomselect_multiselect tag, from: "tags_name_in" + def search_by_tag(*tags) + if tags.empty? + raise ArgumentError, "Please provide at least one tag to search for" + end + + tags.each { |tag| tomselect_multiselect tag, from: "tags_name_in" } click_button "Search" end diff --git a/spec/support/request/tomselect_helper.rb b/spec/support/request/tomselect_helper.rb index 9a6196a305..93b0717d8e 100644 --- a/spec/support/request/tomselect_helper.rb +++ b/spec/support/request/tomselect_helper.rb @@ -11,7 +11,7 @@ module TomselectHelper tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', text: value).click # Close the dropdown - tomselect_wrapper.find(".ts-control").click + page.find("body").click end def tomselect_search_and_select(value, options) diff --git a/spec/system/admin/products_v3/index_spec.rb b/spec/system/admin/products_v3/index_spec.rb index ac56ec1cfb..d0f3d92337 100644 --- a/spec/system/admin/products_v3/index_spec.rb +++ b/spec/system/admin/products_v3/index_spec.rb @@ -417,16 +417,49 @@ RSpec.describe 'As an enterprise user, I can manage my products' do context "with variant tag", feature: :variant_tag do before do create(:variant, tag_list: "organic") - create_products 1 + create(:variant) # without tags + create(:variant) end - it "can search by tag" do - visit admin_products_url - search_by_tag "organic" + shared_examples "tag search" do + it description do + visit admin_products_url + search_by_tag(*search_tags) - expect(page).to have_select "tags_name_in", selected: "organic" - expect(page).to have_content "1 product found for your search criteria. Showing 1 to 1." - expect_products_count_to_be 1 + expect(page).to have_select("tags_name_in", selected: selected_tags) + expect(page).to have_content(result_text) + expect_products_count_to_be(expected_count) + end + end + + context "when searching by a single tag" do + let(:description) { "returns variants with that tag" } + let(:search_tags) { ["organic"] } + let(:selected_tags) { "organic" } + let(:expected_count) { 1 } + let(:result_text) { "1 product found for your search criteria. Showing 1 to 1." } + + include_examples "tag search" + end + + context "when searching by None tag" do + let(:description) { "returns variants without tags" } + let(:search_tags) { ["None"] } + let(:selected_tags) { "None" } + let(:expected_count) { 2 } + let(:result_text) { "2 products found for your search criteria. Showing 1 to 2." } + + include_examples "tag search" + end + + context "when searching by None and another tag" do + let(:description) { "returns variants with either no tags or the given tag" } + let(:search_tags) { ["None", "organic"] } + let(:selected_tags) { ["None", "organic"] } + let(:expected_count) { 3 } + let(:result_text) { "3 products found for your search criteria. Showing 1 to 3." } + + include_examples "tag search" end end end From fccde706907c2ee457252b991d0e2de0dca62954 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 15 Dec 2025 15:03:31 +1100 Subject: [PATCH 038/270] Upgrading to webpacker v6.0.0.rc.6 Migration guide : https://github.com/shakacode/shakapacker/blob/main/docs/v6_upgrade.md#how-to-upgrade-to-webpacker-v600rc6-from-v5 Setp 1,2,3,4 --- Gemfile | 2 +- Gemfile.lock | 8 +- bin/webpack | 17 +- bin/webpack-dev-server | 2 +- bin/yarn | 15 +- config/webpack/{environment.js => base.js} | 13 +- config/webpack/development.js | 4 +- config/webpack/production.js | 4 +- config/webpack/test.js | 4 +- config/webpacker.yml | 48 +- package.json | 16 +- yarn.lock | 7737 ++++++-------------- 12 files changed, 2124 insertions(+), 5746 deletions(-) rename config/webpack/{environment.js => base.js} (69%) diff --git a/Gemfile b/Gemfile index e57cc9b443..1e8ea7f348 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'activemerchant' gem 'angular-rails-templates' gem 'ransack', '~> 4.1.0' gem 'responders' -gem 'webpacker', '~> 5' +gem 'webpacker', '6.0.0.rc.6' # Indirect dependency but we access it directly in JS specs. # It turns out to be hard to upgrade but please do if you can. diff --git a/Gemfile.lock b/Gemfile.lock index f3f1c1f32d..3661214820 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -613,7 +613,7 @@ GEM rack-protection (3.2.0) base64 (>= 0.1.0) rack (~> 2.2, >= 2.2.4) - rack-proxy (0.7.6) + rack-proxy (0.7.7) rack rack-rewrite (1.5.1) rack-session (1.0.2) @@ -812,7 +812,7 @@ GEM tilt (>= 1.1, < 3) sd_notify (0.1.1) securerandom (0.4.1) - semantic_range (3.0.0) + semantic_range (3.1.0) shoulda-matchers (7.0.1) activesupport (>= 7.1) sidekiq (7.2.4) @@ -939,7 +939,7 @@ GEM addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (5.4.4) + webpacker (6.0.0.rc.6) activesupport (>= 5.2) rack-proxy (>= 0.6.1) railties (>= 5.2) @@ -1105,7 +1105,7 @@ DEPENDENCIES web! web-console webmock - webpacker (~> 5) + webpacker (= 6.0.0.rc.6) whenever wicked_pdf wkhtmltopdf-binary diff --git a/bin/webpack b/bin/webpack index 685331ed86..78900abfc3 100755 --- a/bin/webpack +++ b/bin/webpack @@ -1,17 +1,14 @@ #!/usr/bin/env ruby +require "pathname" +require "bundler/setup" +require "webpacker" +require "webpacker/webpack_runner" + ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" ENV["NODE_ENV"] ||= "development" -ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" - -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require "bundler/setup" - -require "webpacker" -require "webpacker/webpack_runner" +##ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) APP_ROOT = File.expand_path("..", __dir__) Dir.chdir(APP_ROOT) do diff --git a/bin/webpack-dev-server b/bin/webpack-dev-server index fa0a5865ef..1fbf450891 100755 --- a/bin/webpack-dev-server +++ b/bin/webpack-dev-server @@ -2,7 +2,7 @@ ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" ENV["NODE_ENV"] ||= "development" -ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" +##ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" require "pathname" ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", diff --git a/bin/yarn b/bin/yarn index 460dd565b4..fe7338622b 100755 --- a/bin/yarn +++ b/bin/yarn @@ -1,9 +1,16 @@ #!/usr/bin/env ruby -APP_ROOT = File.expand_path('..', __dir__) + +APP_ROOT = File.expand_path("..", __dir__) Dir.chdir(APP_ROOT) do - begin - exec "yarnpkg", *ARGV - rescue Errno::ENOENT + yarn = ENV["PATH"].split(File::PATH_SEPARATOR). + select { |dir| File.expand_path(dir) != __dir__ }. + product(["yarn", "yarnpkg", "yarn.cmd", "yarn.ps1"]). + map { |dir, file| File.expand_path(file, dir) }. + find { |file| File.executable?(file) } + + if yarn + exec yarn, *ARGV + else $stderr.puts "Yarn executable was not detected in the system." $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install" exit 1 diff --git a/config/webpack/environment.js b/config/webpack/base.js similarity index 69% rename from config/webpack/environment.js rename to config/webpack/base.js index 06cf62249e..6461d6b01f 100644 --- a/config/webpack/environment.js +++ b/config/webpack/base.js @@ -1,14 +1,15 @@ -const { environment } = require('@rails/webpacker') +const { webpackConfig } = require('@rails/webpacker') -module.exports = environment +module.exports = webpackConfig +// TODO see if we can remove function hotfixPostcssLoaderConfig (subloader) { const subloaderName = subloader.loader if (subloaderName === 'postcss-loader') { if (subloader.options.postcssOptions) { console.log( '\x1b[31m%s\x1b[0m', - 'Remove postcssOptions workaround in config/webpack/environment.js' + 'Remove postcssOptions workaround in config/webpack/base.js' ) } else { subloader.options.postcssOptions = subloader.options.config; @@ -17,6 +18,7 @@ function hotfixPostcssLoaderConfig (subloader) { } } +// TODO try removing this function addQuietDepsToSassLoader (subloader) { if (subloader.loader === 'sass-loader') { subloader.options.sassOptions = { @@ -26,10 +28,11 @@ function addQuietDepsToSassLoader (subloader) { } } -environment.loaders.keys().forEach(loaderName => { - const loader = environment.loaders.get(loaderName); +webpackConfig.loaders.keys().forEach(loaderName => { + const loader = webpackConfig.loaders.get(loaderName); if (loaderName === 'sass') { loader.use.forEach(addQuietDepsToSassLoader); } loader.use.forEach(hotfixPostcssLoaderConfig); }); + diff --git a/config/webpack/development.js b/config/webpack/development.js index c5edff94ad..c84a413b59 100644 --- a/config/webpack/development.js +++ b/config/webpack/development.js @@ -1,5 +1,5 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development' -const environment = require('./environment') +const webpackConfig = require('./base') -module.exports = environment.toWebpackConfig() +module.exports = webpackConfig diff --git a/config/webpack/production.js b/config/webpack/production.js index be0f53aacf..c41e043601 100644 --- a/config/webpack/production.js +++ b/config/webpack/production.js @@ -1,5 +1,5 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'production' -const environment = require('./environment') +const webpackConfig = require('./base') -module.exports = environment.toWebpackConfig() +module.exports = webpackConfig diff --git a/config/webpack/test.js b/config/webpack/test.js index c5edff94ad..c84a413b59 100644 --- a/config/webpack/test.js +++ b/config/webpack/test.js @@ -1,5 +1,5 @@ process.env.NODE_ENV = process.env.NODE_ENV || 'development' -const environment = require('./environment') +const webpackConfig = require('./base') -module.exports = environment.toWebpackConfig() +module.exports = webpackConfig diff --git a/config/webpacker.yml b/config/webpacker.yml index 64a7e11855..6242775ead 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -8,7 +8,7 @@ default: &default cache_path: tmp/cache/webpacker webpack_compile_output: true - # Additional paths webpack should lookup modules + # Additional paths webpack should look up modules # ['app/assets', 'engine/foo/app/assets'] additional_paths: [ 'vendor', @@ -67,21 +67,39 @@ development: host: localhost port: 3035 public: localhost:3035 + # Hot Module Replacement updates modules while the application is running without a full reload hmr: false - # Inline should be set to true if using HMR - inline: true - overlay: true + # Defaults to the inverse of hmr. Uncomment to manually set this. + # live_reload: true + client: + # Should we show a full-screen overlay in the browser when there are compiler errors or warnings? + overlay: true + # May also be a string + # webSocketURL: + # hostname: "0.0.0.0" + # pathname: "/ws" + # port: 8080 + # Should we use gzip compression? compress: true - disable_host_check: true - use_local_ip: false - quiet: false - pretty: false + # Note that apps that do not check the host are vulnerable to DNS rebinding attacks + allowed_hosts: "all" + #TODO Old config + #pretty: false + pretty: true headers: 'Access-Control-Allow-Origin': '*' - watch_options: - ignored: - - '**/node_modules/**' - - '**/*.swp' + static: + watch: + ignored: + - '**/node_modules/**' + - '**/*.swp' + +test: + <<: *default + compile: true + + # Compile test packs to a separate directory + public_output_path: packs-test production: &production <<: *default @@ -91,9 +109,3 @@ production: &production # Cache manifest.json for performance cache_manifest: true - -test: - <<: *default - - # Compile test packs to a separate directory - public_output_path: packs-test diff --git a/package.json b/package.json index d6d8b3e3e3..890c16489d 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@floating-ui/dom": "*", "@hotwired/stimulus": "*", "@hotwired/turbo": "*", - "@rails/webpacker": "5.4.4", + "@rails/webpacker": "^6.0.0-rc.6", "@stimulus-components/rails-nested-form": "*", "cable_ready": "5.0.6", "flatpickr": "*", @@ -32,10 +32,20 @@ "tom-select": "*", "trix": "*", "turbo_power": "*", - "webpack": "~4" + "webpack": "^5.53.0", + "webpack-cli": "^4.8.0" }, + "babel": { + "presets": [ + "./node_modules/@rails/webpacker/package/babel/preset.js" + ] + }, + "browserslist": [ + "defaults" + ], "devDependencies": { "@testing-library/dom": "<11.0.0", + "@webpack-cli/serve": "^3.0.1", "jasmine-core": "~5.12.1", "jest": "*", "jest-environment-jsdom": "*", @@ -44,6 +54,6 @@ "karma-coffee-preprocessor": "~1.0.1", "karma-jasmine": "~0.3.8", "prettier": "*", - "webpack-dev-server": "~3" + "webpack-dev-server": "^5.2.2" } } diff --git a/yarn.lock b/yarn.lock index fafebed5fd..5d9c1b0a04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@asamuzakjp/css-color@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" @@ -21,14 +13,7 @@ "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -37,6 +22,13 @@ js-tokens "^4.0.0" picocolors "^1.1.1" +"@babel/code-frame@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/code-frame@^7.22.13": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" @@ -45,52 +37,22 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/compat-data@^7.13.11": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4", "@babel/compat-data@^7.21.5": +"@babel/compat-data@^7.21.5": version "7.21.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== -"@babel/compat-data@^7.27.2": +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.15.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.5.tgz#92f753e8b9f96e15d4b398dbe2f25d1408c9c426" - integrity sha512-9M398B/QH5DlfCOTKDZT1ozXr0x8uBEeFd+dJraGUZGiaNpGCDVGCc14hZexsMblw3XxltJ+6kSvogp9J+5a9g== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.5" - "@babel/helper-compilation-targets" "^7.21.5" - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helpers" "^7.21.5" - "@babel/parser" "^7.21.5" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/core@^7.23.9", "@babel/core@^7.27.4": +"@babel/core@^7.15.5", "@babel/core@^7.23.9", "@babel/core@^7.27.4": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== @@ -111,16 +73,6 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" - integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== - dependencies: - "@babel/types" "^7.21.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/generator@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -149,14 +101,14 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" - integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== +"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/types" "^7.21.5" + "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4", "@babel/helper-compilation-targets@^7.21.5": +"@babel/helper-compilation-targets@^7.13.0": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== @@ -167,7 +119,7 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.27.2": +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== @@ -178,7 +130,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": +"@babel/helper-create-class-features-plugin@^7.18.6": version "7.21.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== @@ -193,7 +145,20 @@ "@babel/helper-split-export-declaration" "^7.18.6" semver "^6.3.0" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": +"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.28.5" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.5" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.21.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== @@ -202,6 +167,15 @@ regexpu-core "^5.3.1" semver "^6.3.0" +"@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.2.2": version "0.2.3" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" @@ -216,19 +190,18 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + resolve "^1.22.10" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": +"@babel/helper-environment-visitor@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== @@ -238,7 +211,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": +"@babel/helper-function-name@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== @@ -259,13 +232,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -280,6 +246,14 @@ dependencies: "@babel/types" "^7.21.5" +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== + dependencies: + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@babel/helper-module-imports@^7.12.13": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" @@ -294,13 +268,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -309,21 +276,7 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" - integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== - dependencies: - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - -"@babel/helper-module-transforms@^7.28.3": +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== @@ -339,32 +292,38 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + "@babel/helper-plugin-utils@^7.13.0": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-plugin-utils@^7.27.1": +"@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": +"@babel/helper-replace-supers@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== @@ -376,12 +335,14 @@ "@babel/traverse" "^7.21.5" "@babel/types" "^7.21.5" -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" - integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== dependencies: - "@babel/types" "^7.21.5" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" @@ -390,6 +351,14 @@ dependencies: "@babel/types" "^7.20.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -414,11 +383,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" @@ -439,11 +403,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" @@ -454,23 +413,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== +"@babel/helper-wrap-function@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" + integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - -"@babel/helpers@^7.21.5": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" - integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== - dependencies: - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.10" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" "@babel/helpers@^7.28.4": version "7.28.4" @@ -498,7 +448,14 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5": +"@babel/parser@^7.1.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + +"@babel/parser@^7.20.7": version "7.21.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== @@ -508,47 +465,46 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== -"@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: - "@babel/types" "^7.28.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/parser@^7.26.9": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" - integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== dependencies: - "@babel/types" "^7.26.10" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-proposal-async-generator-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" + integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.14.5": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -556,116 +512,10 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" - integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -695,28 +545,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/plugin-syntax-import-attributes@^7.24.7": +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== @@ -807,213 +643,343 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-arrow-functions@^7.20.7": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" - integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== - dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - -"@babel/plugin-transform-async-to-generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - -"@babel/plugin-transform-block-scoped-functions@^7.18.6": +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-block-scoping@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" - integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" - integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.20.7": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" - integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/template" "^7.20.7" - -"@babel/plugin-transform-destructuring@^7.14.7", "@babel/plugin-transform-destructuring@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" - integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-for-of@^7.21.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" - integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== +"@babel/plugin-transform-class-static-block@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" + integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-class-features-plugin" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.21.2": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" - integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== +"@babel/plugin-transform-classes@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" + integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== dependencies: - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.4" -"@babel/plugin-transform-modules-systemjs@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" - integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" - integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== +"@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - regenerator-transform "^0.15.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.20.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" - integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - regenerator-transform "^0.15.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== + dependencies: + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" + +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-object-rest-spread@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" + integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.4" + +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regenerator@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" + integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-runtime@^7.15.0": version "7.15.0" @@ -1027,146 +993,155 @@ babel-plugin-polyfill-regenerator "^0.2.2" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" - integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@^7.15.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" - integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" - "@babel/plugin-proposal-async-generator-functions" "^7.20.7" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.21.0" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.21.0" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.20.7" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.20.7" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.21.0" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-modules-systemjs" "^7.20.11" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.21.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.20.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.21.4" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.15.6": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== + dependencies: + "@babel/compat-data" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.5" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.5" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.4" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" @@ -1175,12 +1150,12 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.18.10", "@babel/template@^7.20.7": +"@babel/template@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== @@ -1198,16 +1173,7 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/template@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" - integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" - -"@babel/template@^7.27.2": +"@babel/template@^7.27.1", "@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== @@ -1216,7 +1182,7 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.21.5": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== @@ -1232,7 +1198,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== @@ -1245,7 +1211,15 @@ "@babel/types" "^7.28.5" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.13.12", "@babel/types@^7.14.5", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@babel/types@^7.13.12", "@babel/types@^7.14.5", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.5", "@babel/types@^7.4.4": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== @@ -1263,22 +1237,6 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.26.10", "@babel/types@^7.26.9": - version "7.26.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" - integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.4", "@babel/types@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1294,11 +1252,6 @@ resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== - "@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" @@ -1322,18 +1275,23 @@ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + "@emnapi/core@^1.4.3": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.6.0.tgz#517f65d1c8270d5d5aa1aad660d5acb897430dca" - integrity sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.1.tgz#3a79a02dbc84f45884a1806ebb98e5746bdfaac4" + integrity sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg== dependencies: "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" "@emnapi/runtime@^1.4.3": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.6.0.tgz#8fe297e0090f6e89a57a1f31f1c440bdbc3c01d8" - integrity sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA== + version "1.7.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.1.tgz#a73784e23f5d57287369c808197288b52276b791" + integrity sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA== dependencies: tslib "^2.4.0" @@ -1365,11 +1323,9 @@ integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== "@googlemaps/js-api-loader@^1.16.6": - version "1.16.6" - resolved "https://registry.yarnpkg.com/@googlemaps/js-api-loader/-/js-api-loader-1.16.6.tgz#c89970c94b55796d51746c092f0e52953994a171" - integrity sha512-V8p5W9DbPQx74jWUmyYJOerhiB4C+MHekaO0ZRmc6lrOYrvY7+syLhzOWpp55kqSPeNb+qbC2h8i69aLIX6krQ== - dependencies: - fast-deep-equal "^3.1.3" + version "1.16.10" + resolved "https://registry.yarnpkg.com/@googlemaps/js-api-loader/-/js-api-loader-1.16.10.tgz#b61cf2b4a1b6ed77017b0dab131e6d51e814ec4e" + integrity sha512-c2erv2k7P2ilYzMmtYcMgAR21AULosQuUHJbStnrvRk2dG93k5cqptDrh9A8p+ZNlyhiqEOgHW7N9PAizdUM7Q== "@hotwired/stimulus-webpack-helpers@^1.0.0": version "1.0.1" @@ -1647,14 +1603,6 @@ "@types/yargs" "^17.0.33" chalk "^4.1.2" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" @@ -1690,16 +1638,19 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== - "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/source-map@^0.3.3": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -1731,6 +1682,56 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jsonjoy.com/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" + integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== + +"@jsonjoy.com/codegen@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" + integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== + +"@jsonjoy.com/json-pack@^1.11.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" + integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + dependencies: + "@jsonjoy.com/base64" "^1.1.2" + "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/util" "^1.9.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" + integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== + dependencies: + "@jsonjoy.com/codegen" "^1.0.0" + "@jsonjoy.com/util" "^1.9.0" + +"@jsonjoy.com/util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" + integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== + dependencies: + "@jsonjoy.com/buffers" "^1.0.0" + "@jsonjoy.com/codegen" "^1.0.0" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + "@napi-rs/wasm-runtime@^0.2.11": version "0.2.12" resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" @@ -1740,14 +1741,6 @@ "@emnapi/runtime" "^1.4.3" "@tybys/wasm-util" "^0.10.0" -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - "@orchidjs/sifter@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@orchidjs/sifter/-/sifter-1.1.0.tgz#b36154ad0cda4898305d1ac44f318b41048a0438" @@ -1771,53 +1764,32 @@ integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== "@rails/actioncable@^6 || ^7 || ^8": - version "8.0.200" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.0.200.tgz#1d27d9d55e45266e061190db045925e0b4d53d6b" - integrity sha512-EDqWyxck22BHmv1e+mD8Kl6GmtNkhEPdRfGFT7kvsv1yoXd9iYrqHDVAaR8bKmU/syC5eEZ2I5aWWxtB73ukMw== + version "8.1.100" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.1.100.tgz#b1f85f3482425fb91e5eba1deb55152ee0bb2f85" + integrity sha512-j4vJQqz51CDVYv2UafKRu4jiZi5/gTnm7NkyL+VMIgEw3s8jtVtmzu9uItUaZccUg9NJ6o05yVyBAHxNfTuCRA== -"@rails/webpacker@5.4.4": - version "5.4.4" - resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.4.tgz#971a41b987c096c908ce4088accd57c1a9a7e2f7" - integrity sha512-hp9myb2MChYFPfE5Fd/3gF4q2m4wpxC+WWCkxcg6My3HYCptWuqMVXRwrBZ5EJHYiL/WRyMLvVNWwlFV47xhUw== +"@rails/webpacker@^6.0.0-rc.6": + version "6.0.0-rc.6" + resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-6.0.0-rc.6.tgz#04af15dc33697e09aa492da54d2093cdd15573ff" + integrity sha512-nbDxn3KsSoLeJgVpU3J81wiXLg4vErEahWdi08BJx5EO9aS6+mXWhOXHKyQogCxLkBMvLZqOafUnJMcK9O+9sA== dependencies: - "@babel/core" "^7.15.0" + "@babel/core" "^7.15.5" "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-regenerator" "^7.14.5" "@babel/plugin-transform-runtime" "^7.15.0" - "@babel/preset-env" "^7.15.0" - "@babel/runtime" "^7.15.3" + "@babel/preset-env" "^7.15.6" + "@babel/runtime" "^7.15.4" babel-loader "^8.2.2" - babel-plugin-dynamic-import-node "^2.3.3" - babel-plugin-macros "^2.8.0" - case-sensitive-paths-webpack-plugin "^2.4.0" - compression-webpack-plugin "^4.0.1" - core-js "^3.16.2" - css-loader "^3.6.0" - file-loader "^6.2.0" - flatted "^3.2.2" - glob "^7.1.7" - js-yaml "^3.14.1" - mini-css-extract-plugin "^0.9.0" - optimize-css-assets-webpack-plugin "^5.0.8" + compression-webpack-plugin "^9.0.0" + glob "^7.2.0" + js-yaml "^4.1.0" path-complete-extname "^1.0.0" pnp-webpack-plugin "^1.7.0" - postcss-flexbugs-fixes "^4.2.1" - postcss-import "^12.0.1" - postcss-loader "^3.0.0" - postcss-preset-env "^6.7.0" - postcss-safe-parser "^4.0.2" - regenerator-runtime "^0.13.9" - sass "^1.38.0" - sass-loader "10.1.1" - style-loader "^1.3.0" - terser-webpack-plugin "^4.2.3" - webpack "^4.46.0" - webpack-assets-manifest "^3.1.1" - webpack-cli "^3.3.12" - webpack-sources "^1.4.3" + terser-webpack-plugin "^5.2.4" + webpack "^5.53.0" + webpack-assets-manifest "^5.0.6" + webpack-cli "^4.8.0" + webpack-merge "^5.8.0" + webpack-sources "^3.2.1" "@sinclair/typebox@^0.34.0": version "0.34.41" @@ -1839,9 +1811,9 @@ "@sinonjs/commons" "^3.0.1" "@socket.io/component-emitter@~3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" - integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== "@stimulus-components/rails-nested-form@*": version "5.0.0" @@ -1886,59 +1858,145 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.28.2" -"@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/cors@^2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== +"@types/body-parser@*": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: - "@types/minimatch" "*" + "@types/connect" "*" "@types/node" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" -"@types/istanbul-lib-coverage@^2.0.6": +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.12": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": + version "4.19.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" + integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.6.tgz#2d724b2c990dcb8c8444063f3580a903f6d500cc" + integrity sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "^2" + +"@types/express@^4.17.21": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" + integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "^1" + +"@types/http-errors@*": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== + +"@types/http-proxy@^1.17.8": + version "1.17.17" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.17.tgz#d9e2c4571fe3507343cb210cd41790375e59a533" + integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.1", "@types/istanbul-lib-coverage@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" @@ -1958,30 +2016,100 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json-schema@^7.0.5": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/node@*", "@types/node@>=10.0.0": +"@types/node-forge@^1.3.0": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.14.tgz#006c2616ccd65550560c2757d8472eb6d3ecea0b" + integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw== + dependencies: + "@types/node" "*" + +"@types/node@*": version "16.11.36" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.36.tgz#9ab9f8276987132ed2b225cace2218ba794fc751" integrity sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/node@>=10.0.0": + version "25.0.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.2.tgz#411f9dd6cb2bf5ee46aed7199a9f85ca6b068b4e" + integrity sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA== + dependencies: + undici-types "~7.16.0" -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/qs@*": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== + +"@types/send@*": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" + integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== + dependencies: + "@types/node" "*" + +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== + dependencies: + "@types/express" "*" + +"@types/serve-static@^1", "@types/serve-static@^1.15.5": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + +"@types/serve-static@^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-2.2.0.tgz#d4a447503ead0d1671132d1ab6bd58b805d8de6a" + integrity sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== + dependencies: + "@types/node" "*" "@types/stack-utils@^2.0.3": version "2.0.3" @@ -1998,15 +2126,22 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== +"@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.33": - version "17.0.34" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.34.tgz#1c2f9635b71d5401827373a01ce2e8a7670ea839" - integrity sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A== + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== dependencies: "@types/yargs-parser" "*" @@ -2112,150 +2247,148 @@ resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" + "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@webpack-cli/serve@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00" + integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2267,7 +2400,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -2275,35 +2408,41 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== + +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.4" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" + ajv "^8.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2313,15 +2452,15 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ajv@^8.0.0, ajv@^8.9.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" ansi-escapes@^4.3.2: version "4.3.2" @@ -2330,21 +2469,11 @@ ansi-escapes@^4.3.2: dependencies: type-fest "^0.21.3" -ansi-html-community@0.0.8: +ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -2355,7 +2484,7 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2379,14 +2508,6 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2395,11 +2516,6 @@ anymatch@^3.1.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2407,6 +2523,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + aria-query@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" @@ -2414,113 +2535,11 @@ aria-query@5.3.0: dependencies: dequal "^2.0.3" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.6.1: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - babel-jest@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.2.0.tgz#fd44a1ec9552be35ead881f7381faa7d8f3b95ac" @@ -2544,13 +2563,6 @@ babel-loader@^8.2.2: make-dir "^3.1.0" schema-utils "^2.6.5" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-istanbul@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz#d8b518c8ea199364cf84ccc82de89740236daf92" @@ -2569,15 +2581,6 @@ babel-plugin-jest-hoist@30.2.0: dependencies: "@types/babel__core" "^7.20.5" -babel-plugin-macros@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - babel-plugin-polyfill-corejs2@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" @@ -2587,14 +2590,22 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" babel-plugin-polyfill-corejs3@^0.2.2: version "0.2.3" @@ -2604,14 +2615,6 @@ babel-plugin-polyfill-corejs3@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" - babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" @@ -2619,12 +2622,12 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.6.5" babel-preset-current-node-syntax@^1.2.0: version "1.2.0" @@ -2660,34 +2663,21 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base64id@2.0.0, base64id@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - baseline-browser-mapping@^2.8.19: version "2.8.23" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz#cd43e17eff5cbfb67c92153e7fe856cf6d426421" integrity sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ== +baseline-browser-mapping@^2.9.0: + version "2.9.7" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz#d36ce64f2a2c468f6f743c8db495d319120007db" + integrity sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -2698,77 +2688,36 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== +body-parser@^1.19.0, body-parser@~1.20.3: + version "1.20.4" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.3, body-parser@^1.19.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" + bytes "~3.1.2" content-type "~1.0.5" debug "2.6.9" depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.14.0" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== +bonjour-service@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" brace-expansion@^1.1.7: version "1.1.12" @@ -2785,114 +2734,14 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -braces@^3.0.3: +braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.4" - inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" - safe-buffer "^5.2.1" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.6.4: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== - dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -2913,6 +2762,17 @@ browserslist@^4.24.0: node-releases "^2.0.26" update-browserslist-db "^1.1.4" +browserslist@^4.26.3, browserslist@^4.28.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -2925,36 +2785,14 @@ 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-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" + run-applescript "^7.0.0" -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: +bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -2966,66 +2804,7 @@ cable_ready@5.0.6, cable_ready@^5.0.6: dependencies: morphdom "2.6.1" -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^15.0.5: - version "15.0.6" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" - integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -3033,36 +2812,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- es-errors "^1.3.0" function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.3, call-bound@^1.0.4: +call-bound@^1.0.2, call-bound@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -3070,31 +2820,12 @@ call-bound@^1.0.3, call-bound@^1.0.4: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0, callsites@^3.1.0: +callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -3104,17 +2835,7 @@ camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001449: +caniuse-lite@^1.0.30001449: version "1.0.30001750" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz" integrity sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ== @@ -3124,12 +2845,12 @@ caniuse-lite@^1.0.30001751: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz#419f8fc9bab6f1a1d10d9574d0b3374f823c5b00" integrity sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw== -case-sensitive-paths-webpack-plugin@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== +caniuse-lite@^1.0.30001759: + version "1.0.30001760" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" + integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== -chalk@^2.0, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3151,10 +2872,10 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.5.1, 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" @@ -3166,35 +2887,6 @@ char-regex@^1.0.2: optionalDependencies: fsevents "~2.3.2" -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3207,42 +2899,10 @@ ci-info@^4.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" - integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== - dependencies: - inherits "^2.0.4" - safe-buffer "^5.2.1" - cjs-module-lexer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz#586e87d4341cb2661850ece5190232ccdebcff8b" - integrity sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + version "2.1.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz#bff23b0609cc9afa428bd35f1918f7d03b448562" + integrity sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ== cliui@^7.0.2: version "7.0.4" @@ -3262,19 +2922,19 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== coffee-script@~1: version "1.12.7" @@ -3286,15 +2946,7 @@ collect-v8-coverage@^1.0.2: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -3313,76 +2965,57 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-4.0.1.tgz#33eda97f1170dd38c5556771de10f34245aa0274" - integrity sha512-0mg6PgwTsUe5LEcUrOu3ob32vraDx2VdbMGAT1PARcOV+UJWDYZFdkSo6RbHoGQ061mmmkC7XpRKOlvwm/gzJQ== +compression-webpack-plugin@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - schema-utils "^2.7.0" - serialize-javascript "^4.0.0" - webpack-sources "^1.4.3" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: @@ -3390,20 +3023,10 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== connect@^3.7.0: version "3.7.0" @@ -3415,76 +3038,32 @@ connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.4: +content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -content-type@~1.0.5: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +cookie@~0.7.1, cookie@~0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== core-js-compat@^3.14.0: version "3.25.2" @@ -3493,22 +3072,17 @@ core-js-compat@^3.14.0: dependencies: browserslist "^4.21.4" -core-js-compat@^3.25.1: - version "3.30.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" - integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== +core-js-compat@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" + integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== dependencies: - browserslist "^4.21.5" - -core-js@^3.16.2: - version "3.16.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.2.tgz#3f485822889c7fc48ef463e35be5cc2a4a01a1f4" - integrity sha512-P0KPukO6OjMpjBtHSceAZEWlDD1M2Cpzpg6dBbrjFqFhBHe/BwhxaP820xKOjRn/lZRQirrCusIpLS/n2sgXLQ== + browserslist "^4.28.0" core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@~2.8.5: version "2.8.5" @@ -3518,79 +3092,6 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hash@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" - integrity sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - ripemd160 "^2.0.0" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3609,203 +3110,6 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== - dependencies: - postcss "^7.0.5" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" - -css-loader@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" - -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== - dependencies: - postcss "^7.0.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - cssstyle@^4.2.1: version "4.6.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" @@ -3817,12 +3121,7 @@ cssstyle@^4.2.1: custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== data-urls@^5.0.0: version "5.0.0" @@ -3832,144 +3131,73 @@ data-urls@^5.0.0: whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" -date-format@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.3.tgz#f63de5dc08dc02efd8ef32bf2a6918e486f35873" - integrity sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ== +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.3.1, debug@^4.3.4: +debug@4, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: +debug@^4.1.0, debug@^4.1.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" decimal.js@^10.5.0: version "10.6.0" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - dedent@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.7.0.tgz#c1f9445335f0175a96587be245a282ff451446ca" integrity sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ== -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== +default-browser@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.4.0.tgz#b55cf335bb0b465dd7c961a02cd24246aa434287" + integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" + bundle-name "^4.1.0" + default-browser-id "^5.0.0" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -3984,24 +3212,11 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4015,36 +3230,14 @@ detect-node@^2.0.4: di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== - dependencies: - buffer-indexof "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" dom-accessibility-api@^0.5.9: version "0.5.16" @@ -4054,58 +3247,20 @@ dom-accessibility-api@^0.5.9: dom-serialize@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== dependencies: custom-event "~1.0.0" ent "~2.2.0" extend "^3.0.0" void-elements "^2.0.0" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== - dompurify@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.5.tgz#11b108656a5fb72b24d916df17a1421663d7129c" - integrity sha512-mLPd29uoRe9HpvwP2TxClGQBzGXeEC/we/q+bFlmPPmj2p2Ugl3r6ATu/UU1v77DXNcehiBg9zsr1dREyA/dJQ== + version "3.3.1" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.1.tgz#c7e1ddebfe3301eacd6c0c12a4af284936dbbb86" + integrity sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q== optionalDependencies: "@types/trusted-types" "^2.0.7" -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -4115,16 +3270,6 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -4135,11 +3280,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.17: - version "1.4.47" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.47.tgz#5d5535cdbca2b9264abee4d6ea121995e9554bbe" - integrity sha512-ZHc8i3/cgeCRK/vC7W2htAG6JqUmOUgDNn/f9yY9J8UjfLjwzwOVEt4MWmgJAdvmxyrsR5KIFA/6+kUHGY0eUA== - electron-to-chromium@^1.4.284: version "1.4.380" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz#195dc59d930c6b74efbee6f0e6a267ce4af5ed91" @@ -4150,29 +3290,16 @@ electron-to-chromium@^1.5.238: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820" integrity sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw== -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.6.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" - integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4198,101 +3325,61 @@ encodeurl@~2.0.0: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - engine.io-parser@~5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" - integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== + version "5.2.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== -engine.io@~6.5.2: - version "6.5.4" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" - integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== +engine.io@~6.6.0: + version "6.6.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.4.tgz#0a89a3e6b6c1d4b0c2a2a637495e7c149ec8d8ee" + integrity sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g== dependencies: - "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" "@types/node" ">=10.0.0" accepts "~1.3.4" base64id "2.0.0" - cookie "~0.4.1" + cookie "~0.7.2" cors "~2.8.5" debug "~4.3.1" engine.io-parser "~5.2.1" - ws "~8.11.0" + ws "~8.17.1" -enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== +enhanced-resolve@^5.17.3: + version "5.18.4" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" + integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" + graceful-fs "^4.2.4" + tapable "^2.2.0" ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + version "2.2.2" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.2.tgz#22a5ed2fd7ce0cbcff1d1474cf4909a44bdb6e85" + integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + punycode "^1.4.1" + safe-regex-test "^1.1.0" entities@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" +envinfo@^7.7.3: + version "7.21.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" + integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" @@ -4303,6 +3390,11 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-module-lexer@^1.2.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" @@ -4310,15 +3402,6 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4344,12 +3427,12 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" esprima@^4.0.0: @@ -4357,7 +3440,7 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.1.0: +esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -4389,37 +3472,11 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.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== -eventsource@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" - integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -4440,26 +3497,6 @@ exit-x@^0.2.2: resolved "https://registry.yarnpkg.com/exit-x/-/exit-x-0.2.2.tgz#1f9052de3b8d99a696b10dad5bced9bdd5c3aa64" integrity sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ== -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - expect@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/expect/-/expect-30.2.0.tgz#d4013bed267013c14bc1199cec8aa57cee9b5869" @@ -4472,77 +3509,48 @@ expect@30.2.0: jest-mock "30.2.0" jest-util "30.2.0" -express@^4.17.1: - version "4.21.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" - integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== +express@^4.21.2: + version "4.22.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" + body-parser "~1.20.3" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" + cookie "~0.7.1" + cookie-signature "~1.0.6" debug "2.6.9" depd "2.0.0" encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" + finalhandler "~1.3.1" + fresh "~0.5.2" + http-errors "~2.0.0" merge-descriptors "1.0.3" methods "~1.1.2" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.10" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.13.0" + qs "~6.14.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - 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" @@ -4553,7 +3561,17 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -faye-websocket@^0.11.3, faye-websocket@^0.11.4: +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + +fastest-levenshtein@^1.0.12: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +faye-websocket@^0.11.3: version "0.11.4" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== @@ -4567,41 +3585,6 @@ fb-watchman@^2.0.2: dependencies: bser "2.1.1" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -4622,28 +3605,19 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~2.0.2" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" @@ -4653,13 +3627,6 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4668,55 +3635,25 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" +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== flatpickr@*: version "4.6.13" resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94" integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw== -flatted@^3.2.2, flatted@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== - -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" +flatted@^3.2.7: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.0.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== - -for-each@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" - integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - dependencies: - is-callable "^1.2.7" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== foreground-child@^3.1.0: version "3.3.1" @@ -4736,75 +3673,30 @@ foundation-sites@5.5.3: resolved "https://registry.yarnpkg.com/foundation-sites/-/foundation-sites-5.5.3.tgz#6556eb2b31cde3b226630116bd215d95d056c0a7" integrity sha512-z0NZl6Orkmeu0yhgjl3a8Ecd3frjEichn9IqocQX2jHMv9Ecd6UOPWS85f1YJXdCF6bHqnekGkrcWQ37ciR0Pw== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: +fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + jsonfile "^4.0.0" + universalify "^0.1.0" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.3.3: +fsevents@^2.3.3, fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4815,51 +3707,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4888,31 +3746,11 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -4920,10 +3758,20 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-to-regex.js@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" + integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@^10.3.10: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" @@ -4932,7 +3780,7 @@ glob@^10.3.10: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -4944,76 +3792,22 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: +graceful-fs@^4.1.2: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -graceful-fs@^4.2.11: +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5023,11 +3817,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== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -5038,47 +3827,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.1.0: +has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -5086,96 +3839,20 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - integrity sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw== - dependencies: - inherits "^2.0.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hotkeys-js@*: version "3.13.15" resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.13.15.tgz#2d394bd6bd78857d4b24dc86bdba2fa1cf7012fc" @@ -5191,16 +3868,6 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - html-encoding-sniffer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" @@ -5208,11 +3875,6 @@ html-encoding-sniffer@^4.0.0: dependencies: whatwg-encoding "^3.1.1" -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -5244,10 +3906,21 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + version "0.5.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.10.tgz#b3277bd6d7ed5588e20ea73bf724fcbe44609075" + integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== http-proxy-agent@^7.0.2: version "7.0.2" @@ -5257,17 +3930,18 @@ http-proxy-agent@^7.0.2: agent-base "^7.1.0" debug "^4.3.4" -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-middleware@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0, http-proxy@^1.18.1: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -5276,11 +3950,6 @@ http-proxy@^1.17.0, http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - https-proxy-agent@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" @@ -5294,12 +3963,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -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== - dependencies: - safer-buffer ">= 2.1.2 < 3" +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== iconv-lite@0.6.3: version "0.6.3" @@ -5308,62 +3975,14 @@ iconv-lite@0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== +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== dependencies: - postcss "^7.0.14" + safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.2.0: +import-local@^3.0.2, import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== @@ -5374,22 +3993,7 @@ import-local@^3.2.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" @@ -5399,107 +4003,35 @@ 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.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@^1.3.4, ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== - -ip@^1.1.0, ip@^1.1.5: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -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" +ipaddr.js@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" + integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" @@ -5508,110 +4040,29 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.11.0, is-core-module@^2.2.0: +is-core-module@^2.11.0: version "2.12.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - kind-of "^3.0.2" + hasown "^2.0.2" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -5623,72 +4074,36 @@ is-generator-fn@^2.1.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: - kind-of "^3.0.2" + is-docker "^3.0.0" + +is-network-error@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" + integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.0.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-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -5700,107 +4115,52 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.0.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: - has-symbols "^1.0.1" + is-inside-container "^1.0.0" -is-typed-array@^1.1.14: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isbinaryfile@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" - integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== + version "4.0.10" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: +isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: version "6.0.3" @@ -5814,12 +4174,12 @@ istanbul-lib-instrument@^6.0.0, istanbul-lib-instrument@^6.0.2: semver "^7.5.4" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^5.0.0: @@ -5832,9 +4192,9 @@ istanbul-lib-source-maps@^5.0.0: istanbul-lib-coverage "^3.0.0" istanbul-reports@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6210,14 +4570,14 @@ jest-worker@30.2.0: merge-stream "^2.0.0" supports-color "^8.1.1" -jest-worker@^26.5.0: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" jest@*: version "30.2.0" @@ -6251,7 +4611,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.14.1: +js-yaml@^3.13.1: version "3.14.2" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== @@ -6259,6 +4619,13 @@ js-yaml@^3.13.1, js-yaml@^3.14.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + jsdom@^26.1.0: version "26.1.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-26.1.0.tgz#ab5f1c1cafc04bd878725490974ea5e8bf0c72b3" @@ -6290,7 +4657,7 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@^3.0.2: +jsesc@^3.0.2, jsesc@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== @@ -6300,12 +4667,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: +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" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -6315,24 +4677,20 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: +json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -6346,7 +4704,7 @@ karma-chrome-launcher@~3.2.0: karma-coffee-preprocessor@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/karma-coffee-preprocessor/-/karma-coffee-preprocessor-1.0.1.tgz#3b78872b17b3f42db53fd51591b5e051d7de81bf" - integrity sha1-O3iHKxez9C21P9UVkbXgUdfegb8= + integrity sha512-MDgLEhGlW0r972wUvktkuE5BNiEAcQ3DcApo9y40jYh0vF+6c2kkwqaunfN3VBp3/u9lgeiD07H32DtBR9ud1Q== dependencies: coffee-script "~1" object-assign "^4.1.0" @@ -6354,7 +4712,7 @@ karma-coffee-preprocessor@~1.0.1: karma-jasmine@~0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-0.3.8.tgz#5b6457791ad9b89aa173f079e3ebe1b8c805236c" - integrity sha1-W2RXeRrZuJqhc/B54+vhuMgFI2w= + integrity sha512-EDNIM4f9FV17XXoF+Rzfw+6uPajd7tOAfEFwe7PIyNVQrM3l1V5OJj2167JDY9KmLDIK/MQZX7tKkK1jVYlfmw== karma@~6.4.4: version "6.4.4" @@ -6386,47 +4744,18 @@ karma@~6.4.4: ua-parser-js "^0.7.30" yargs "^16.1.1" -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +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== -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== +launch-editor@^2.6.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" + integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" + picocolors "^1.1.1" + shell-quote "^1.8.3" leaflet-geosearch@4.2.2: version "4.2.2" @@ -6452,23 +4781,14 @@ leven@^3.1.0: integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" +loader-runner@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" + integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== loader-utils@^2.0.0: version "2.0.0" @@ -6479,14 +4799,6 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -6494,51 +4806,43 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.get@^4.0: +lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== -lodash.has@^4.0: +lodash.has@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" - integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g== -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21, lodash@^4.17.5: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log4js@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.1.tgz#9d3a8bf2c31c1e213fe3fc398a6053f7a2bc53e8" - integrity sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg== + version "6.9.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.9.1.tgz#aba5a3ff4e7872ae34f8b4c533706753709e38b6" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== dependencies: - date-format "^4.0.3" - debug "^4.3.3" - flatted "^3.2.4" + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" rfdc "^1.3.0" - streamroller "^3.0.2" - -loglevel@^1.6.8: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== + streamroller "^3.1.5" lru-cache@^10.2.0, lru-cache@^10.4.3: version "10.4.3" @@ -6552,33 +4856,25 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -6586,62 +4882,27 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= +memfs@^4.43.1: + version "4.51.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.51.1.tgz#25945de4a90d1573945105e187daa9385e1bca73" + integrity sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + "@jsonjoy.com/json-pack" "^1.11.0" + "@jsonjoy.com/util" "^1.9.0" + glob-to-regex.js "^1.0.1" + thingies "^2.5.0" + tree-dump "^1.0.3" + tslib "^2.0.0" merge-descriptors@1.0.3: version "1.0.3" @@ -6658,26 +4919,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -6685,32 +4927,36 @@ micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +"mime-db@>= 1.43.0 < 2", mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4, mime@^2.5.2: +mime@^2.5.2: version "2.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== @@ -6720,26 +4966,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -6754,119 +4985,37 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.1: +mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - moment@*: version "2.30.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -morphdom@2.6.1, "morphdom@>=2.6.0 <3.0.0": +morphdom@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.6.1.tgz#e868e24f989fa3183004b159aed643e628b4306e" integrity sha512-Y8YRbAEP3eKykroIBWrjcfMw7mmwJfjhqdpSvoqinu8Y702nAwikpXcNFDiIkyvfCLxLM9Wu95RZqo4a9jFBaA== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" +"morphdom@>=2.6.0 <3.0.0": + version "2.7.7" + resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.7.7.tgz#72559af781357a4eb2169a0a578acb76ff7e8abf" + integrity sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g== mrujs@*: version "1.0.2" @@ -6885,46 +5034,19 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1, ms@^2.1.3: +ms@2.1.3, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - napi-postinstall@^0.3.0: version "0.3.4" resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" @@ -6933,68 +5055,34 @@ napi-postinstall@^0.3.0: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.3.tgz#0ad80f6333b3a0045e827ac20b7f735f93716751" + integrity sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - -node-releases@^2.0.26: +node-releases@^2.0.26, node-releases@^2.0.27: version "2.0.27" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== @@ -7004,45 +5092,11 @@ node-releases@^2.0.8: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.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" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -7050,109 +5104,27 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - nwsapi@^2.2.16: - version "2.2.22" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz#109f9530cda6c156d6a713cdf5939e9f0de98b9d" - integrity sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ== + version "2.2.23" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" + integrity sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -7162,16 +5134,16 @@ on-finished@2.4.1: on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -7185,52 +5157,30 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +open@^10.0.3: + version "10.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== dependencies: - is-wsl "^1.1.0" + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" -optimize-css-assets-webpack-plugin@^5.0.8: - version "5.0.8" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" - integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -7238,24 +5188,14 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +p-retry@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" + integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== dependencies: - aggregate-error "^3.0.0" - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" + retry "^0.13.1" p-try@^2.0.0: version "2.2.0" @@ -7267,47 +5207,7 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -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== @@ -7317,11 +5217,6 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parse5@^7.0.0, parse5@^7.2.1: version "7.3.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" @@ -7334,31 +5229,11 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-complete-extname@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" integrity sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -7369,22 +5244,12 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -7397,87 +5262,31 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.3.tgz#8be674d591d65658113424592a95d1517318dd4b" - integrity sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA== - dependencies: - create-hash "~1.1.3" - create-hmac "^1.1.7" - ripemd160 "=2.0.1" - safe-buffer "^5.2.1" - sha.js "^2.4.11" - to-buffer "^1.2.0" +path-to-regexp@~0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== picocolors@1.1.1, picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pirates@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -7492,676 +5301,10 @@ pnp-webpack-plugin@^1.7.0: dependencies: ts-pnp "^1.1.6" -portfinder@^1.0.26: - version "1.0.32" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -possible-typed-array-names@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" - integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== - dependencies: - postcss "^7.0.26" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== - dependencies: - postcss "^7.0.2" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-import@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" - integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== - dependencies: - postcss "^7.0.1" - postcss-value-parser "^3.2.3" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== - dependencies: - postcss "^7.0.2" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@^6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== - dependencies: - postcss "^7.0.2" - -postcss-safe-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - prettier@*: - version "3.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" - integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + version "3.7.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" + integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== pretty-format@30.2.0: version "30.2.0" @@ -8186,16 +5329,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -8204,57 +5337,10 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: +punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: version "2.1.1" @@ -8271,75 +5357,39 @@ pure-rand@^7.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +qs@~6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" react-is@^17.0.1: version "17.0.2" @@ -8351,17 +5401,10 @@ react-is@^18.3.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8371,7 +5414,7 @@ read-cache@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.2: +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== @@ -8380,24 +5423,6 @@ readable-stream@^3.0.6, readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -8405,6 +5430,13 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -8412,40 +5444,18 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.9: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -8458,6 +5468,30 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.0.tgz#01f8351335cf7898d43686bc74d2dd71c847ecc0" + integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== + dependencies: + jsesc "~3.1.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -8465,42 +5499,20 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^3.0.0: version "3.0.0" @@ -8509,42 +5521,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.7, resolve@^1.12.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - resolve@^1.14.2: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -8554,37 +5535,24 @@ resolve@^1.14.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +resolve@^1.22.10, resolve@^1.9.0: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@^2.5.4, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rimraf@^3.0.2: version "3.0.2" @@ -8593,79 +5561,40 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@=2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" - integrity sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w== - dependencies: - hash-base "^2.0.0" - inherits "^2.0.1" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rrweb-cssom@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" - integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== - dependencies: - klona "^2.0.4" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" - -sass@^1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.38.0.tgz#2f3e60a1efdcdc910586fa79dc89d3399a145b4f" - integrity sha512-WBccZeMigAGKoI+NgD7Adh0ab1HUq+6BmyBUEaGxtErbUtWUevEbdgo5EZiJQofLUGcKtlNaO2IdN73AHEua5g== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -8673,16 +5602,7 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5, schema-utils@^2.7.0: +schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -8691,15 +5611,25 @@ schema-utils@^2.6.5, schema-utils@^2.7.0: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== +schema-utils@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: - "@types/json-schema" "^7.0.6" + "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -8710,31 +5640,20 @@ select2@*: resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d" integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw== -selfsigned@^1.10.8: - version "1.10.14" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" - integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: - node-forge "^0.10.0" - -semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + "@types/node-forge" "^1.3.0" + node-forge "^1" semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2: - 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== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4, semver@^7.7.2: +semver@^7.5.3, semver@^7.5.4, semver@^7.7.2: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== @@ -8758,17 +5677,29 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +send@~0.19.0: + version "0.19.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9" + integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== dependencies: - randombytes "^2.1.0" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -8785,7 +5716,7 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.16.2: +serve-static@~1.16.2: version "1.16.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== @@ -8795,63 +5726,22 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-function-length@^1.2.1, set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: - version "2.4.12" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" - integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - inherits "^2.0.4" - safe-buffer "^5.2.1" - to-buffer "^1.2.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" + kind-of "^6.0.2" shebang-command@^2.0.0: version "2.0.0" @@ -8860,95 +5750,83 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== + shortcut-buttons-flatpickr@*: version "0.4.0" resolved "https://registry.yarnpkg.com/shortcut-buttons-flatpickr/-/shortcut-buttons-flatpickr-0.4.0.tgz#a36e0a88a670ed2637b7b1adb5bee0914c29a7e7" integrity sha512-JKmT4my3Hm1e18OvG4Q6RcFhN4WRqqpTMkHrvZ7fup/dp6aTIWGVCHdRYtASkp/FCzDlJh6iCLQ/VcwwNpAMoQ== -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" -signal-exit@^3.0.0: +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2, signal-exit@^3.0.3: version "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@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - socket.io-adapter@~2.5.2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" - integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== + version "2.5.5" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" + integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== dependencies: debug "~4.3.4" - ws "~8.11.0" + ws "~8.17.1" socket.io-parser@~4.2.4: version "4.2.4" @@ -8959,30 +5837,19 @@ socket.io-parser@~4.2.4: debug "~4.3.1" socket.io@^4.7.2: - version "4.7.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.4.tgz#2401a2d7101e4bdc64da80b140d5d8b6a8c7738b" - integrity sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw== + version "4.8.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.1.tgz#fa0eaff965cc97fdf4245e8d4794618459f7558a" + integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== dependencies: accepts "~1.3.4" base64id "~2.0.0" cors "~2.8.5" debug "~4.3.2" - engine.io "~6.5.2" + engine.io "~6.6.0" socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -sockjs-client@^1.5.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" - integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw== - dependencies: - debug "^3.2.7" - eventsource "^2.0.2" - faye-websocket "^0.11.4" - inherits "^2.0.4" - url-parse "^1.5.10" - -sockjs@^0.3.21: +sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== @@ -8991,29 +5858,6 @@ sockjs@^0.3.21: uuid "^8.3.2" websocket-driver "^0.7.4" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -9022,7 +5866,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12, source-map-support@~0.5.19: +source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -9030,26 +5874,11 @@ source-map-support@~0.5.12, source-map-support@~0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -9073,36 +5902,10 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stack-utils@^2.0.6: version "2.0.6" @@ -9111,14 +5914,6 @@ stack-utils@^2.0.6: dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -9127,7 +5922,12 @@ statuses@2.0.1: "statuses@>= 1.4.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== stimulus-autocomplete@*: version "3.1.0" @@ -9156,51 +5956,14 @@ stimulus_reflex@3.5.5: "@rails/actioncable" "^6 || ^7 || ^8" cable_ready "^5.0.6" -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.1.5.tgz#1263182329a45def1ffaef58d31b15d13d2ee7ff" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -streamroller@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.2.tgz#30418d0eee3d6c93ec897f892ed098e3a81e68b7" - integrity sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA== - dependencies: - date-format "^4.0.3" - debug "^4.1.1" - fs-extra "^10.0.0" - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.0" string-length@^4.0.2: version "4.0.2" @@ -9219,25 +5982,7 @@ string-length@^4.0.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string-width@^4.2.3: +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== @@ -9255,23 +6000,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -9292,20 +6021,6 @@ string_decoder@~1.1.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - 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" @@ -9325,11 +6040,6 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -9340,23 +6050,6 @@ strip-json-comments@^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-loader@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -9364,21 +6057,14 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -9390,25 +6076,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -9421,70 +6088,31 @@ synckit@^0.11.8: dependencies: "@pkgr/core" "^0.2.9" -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" + integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== -tar@^6.0.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== +terser-webpack-plugin@^5.2.4, terser-webpack-plugin@^5.3.11: + version "5.3.16" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" + integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q== dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser-webpack-plugin@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser@^4.1.2: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== +terser@^5.31.1: + version "5.44.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -terser@^5.3.4: - version "5.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" + source-map-support "~0.5.20" test-exclude@^6.0.0: version "6.0.0" @@ -9495,31 +6123,16 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" +thingies@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" + integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - tldts-core@^6.1.86: version "6.1.86" resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" @@ -9533,49 +6146,20 @@ tldts@^6.1.32: tldts-core "^6.1.86" tmp@^0.2.1: - version "0.2.4" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.4.tgz#c6db987a2ccc97f812f17137b36af2b6521b0d13" - integrity sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ== + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-buffer@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" - integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== - dependencies: - isarray "^2.0.5" - safe-buffer "^5.2.1" - typed-array-buffer "^1.0.3" - 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" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -9583,17 +6167,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -9620,6 +6194,11 @@ tr46@^5.1.0: dependencies: punycode "^2.3.1" +tree-dump@^1.0.3, tree-dump@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" + integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== + trix@*: version "2.1.15" resolved "https://registry.yarnpkg.com/trix/-/trix-2.1.15.tgz#fabad796ea779a8ae96522402fbc214cbfc4015f" @@ -9637,16 +6216,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - turbo_power@*: version "0.7.1" resolved "https://registry.yarnpkg.com/turbo_power/-/turbo_power-0.7.1.tgz#591769f37cca9b8149ea07682021081039c9f32c" @@ -9670,34 +6244,15 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" - integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - dependencies: - call-bound "^1.0.3" - es-errors "^1.3.0" - is-typed-array "^1.1.14" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== + version "0.7.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.41.tgz#9f6dee58c389e8afababa62a4a2dc22edb69a452" + integrity sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg== -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -9717,60 +6272,26 @@ unicode-match-property-value-ecmascript@^2.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - unrs-resolver@^1.7.11: version "1.11.1" resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" @@ -9798,19 +6319,6 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - update-browserslist-db@^1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" @@ -9827,6 +6335,14 @@ update-browserslist-db@^1.1.4: escalade "^3.2.0" picocolors "^1.1.1" +update-browserslist-db@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" + integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -9834,81 +6350,21 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse@^1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^9.0.1: version "9.3.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" @@ -9923,20 +6379,10 @@ vary@^1, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== w3c-xmlserializer@^5.0.0: version "5.0.0" @@ -9952,23 +6398,13 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== +watchpack@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -9982,130 +6418,127 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-assets-manifest@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" - integrity sha512-JV9V2QKc5wEWQptdIjvXDUL1ucbPLH2f27toAY3SNdGZp+xSaStAgpoMcvMZmqtFrBc9a5pTS1058vxyMPOzRQ== +webpack-assets-manifest@^5.0.6: + version "5.2.1" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.2.1.tgz#7ebe4c882efdc343029ed2f54a6f7ce990406f08" + integrity sha512-MsEcXVio1GY6R+b4dVfTHIDMB0RB90KajQG8neRbH92vE2S1ClGw9mNa9NPlratYBvZOhExmN0qqMNFTaCTuIg== dependencies: - chalk "^2.0" - lodash.get "^4.0" - lodash.has "^4.0" - mkdirp "^0.5" - schema-utils "^1.0.0" - tapable "^1.0.0" - webpack-sources "^1.0.0" + chalk "^4.1.2" + deepmerge "^4.3.1" + lockfile "^1.0.4" + lodash.get "^4.4.2" + lodash.has "^4.5.2" + schema-utils "^3.3.0" + tapable "^2.2.1" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@^4.8.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== +webpack-dev-middleware@^7.4.2: + version "7.4.5" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" + integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" + colorette "^2.0.10" + memfs "^4.43.1" + mime-types "^3.0.1" + on-finished "^2.4.1" range-parser "^1.2.1" - webpack-log "^2.0.0" + schema-utils "^4.0.0" -webpack-dev-server@~3: - version "3.11.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3" - integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA== +webpack-dev-server@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz#96a143d50c58fef0c79107e61df911728d7ceb39" + integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg== dependencies: - ansi-html-community "0.0.8" - bonjour "^3.5.0" - chokidar "^2.1.8" + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/express-serve-static-core" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" + ansi-html-community "^0.0.8" + bonjour-service "^1.2.1" + chokidar "^3.6.0" + colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + connect-history-api-fallback "^2.0.0" + express "^4.21.2" + graceful-fs "^4.2.6" + http-proxy-middleware "^2.0.9" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" + sockjs "^0.3.24" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== +webpack-merge@^5.7.3, webpack-merge@^5.8.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.0" -webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" +webpack-sources@^3.2.1, webpack-sources@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@^4.46.0, webpack@~4: - version "4.47.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.47.0.tgz#8b8a02152d7076aeb03b61b47dad2eeed9810ebc" - integrity sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ== +webpack@^5.53.0: + version "5.103.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.103.0.tgz#17a7c5a5020d5a3a37c118d002eade5ee2c6f3da" + integrity sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.15.0" + acorn-import-phases "^1.0.3" + browserslist "^4.26.3" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + enhanced-resolve "^5.17.3" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.3.1" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^4.3.3" + tapable "^2.3.0" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.4" + webpack-sources "^3.3.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -10141,36 +6574,7 @@ whatwg-url@^14.0.0, whatwg-url@^14.1.1: tr46 "^5.1.0" webidl-conversions "^7.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" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-typed-array@^1.1.16: - version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" - integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - -which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10184,12 +6588,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" @@ -10200,15 +6602,6 @@ worker-farm@^1.7.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.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" @@ -10240,22 +6633,22 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@^6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" - integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== - dependencies: - async-limiter "~1.0.0" - ws@^8.18.0: version "8.18.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" xml-name-validator@^5.0.0: version "5.0.0" @@ -10267,70 +6660,26 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== - y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + 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== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yargs@^16.1.1: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" From 4d0c710e3b3f457d29469ceaff9857b61e904ae9 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 15 Dec 2025 15:36:00 +1100 Subject: [PATCH 039/270] Add css integration --- package.json | 4 + yarn.lock | 555 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 541 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 890c16489d..0dadfc5d49 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "@rails/webpacker": "^6.0.0-rc.6", "@stimulus-components/rails-nested-form": "*", "cable_ready": "5.0.6", + "css-loader": "^7.1.2", + "css-minimizer-webpack-plugin": "^7.0.4", "flatpickr": "*", "foundation-sites": "5.5.3", "hotkeys-js": "*", @@ -21,6 +23,7 @@ "leaflet": "1.9.4", "leaflet-geosearch": "4.2.2", "leaflet-providers": "3.0.0", + "mini-css-extract-plugin": "^2.9.4", "moment": "*", "mrujs": "*", "select2": "*", @@ -29,6 +32,7 @@ "stimulus-autocomplete": "*", "stimulus-flatpickr": "*", "stimulus_reflex": "3.5.5", + "style-loader": "^4.0.0", "tom-select": "*", "trix": "*", "turbo_power": "*", diff --git a/yarn.lock b/yarn.lock index 5d9c1b0a04..65312d518d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2719,6 +2719,11 @@ bonjour-service@^1.2.1: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + brace-expansion@^1.1.7: version "1.1.12" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" @@ -2741,6 +2746,17 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" +browserslist@^4.0.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4.28.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" @@ -2762,17 +2778,6 @@ browserslist@^4.24.0: node-releases "^2.0.26" update-browserslist-db "^1.1.4" -browserslist@^4.26.3, browserslist@^4.28.0: - version "4.28.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" - integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== - dependencies: - baseline-browser-mapping "^2.9.0" - caniuse-lite "^1.0.30001759" - electron-to-chromium "^1.5.263" - node-releases "^2.0.27" - update-browserslist-db "^1.2.0" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -2835,6 +2840,21 @@ camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: + version "1.0.30001760" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" + integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== + caniuse-lite@^1.0.30001449: version "1.0.30001750" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz" @@ -2845,11 +2865,6 @@ caniuse-lite@^1.0.30001751: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz#419f8fc9bab6f1a1d10d9574d0b3374f823c5b00" integrity sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw== -caniuse-lite@^1.0.30001759: - version "1.0.30001760" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" - integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== - chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2970,11 +2985,21 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colord@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + colorette@^2.0.10, colorette@^2.0.14: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +commander@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3110,6 +3135,130 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" +css-declaration-sorter@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz#edc45c36bcdfea0788b1d4452829f142ef1c4a4a" + integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== + +css-loader@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.2.tgz#64671541c6efe06b0e22e750503106bdd86880f8" + integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-minimizer-webpack-plugin@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.4.tgz#92d2643e3658e3f484a70382a5dba18e51997f2e" + integrity sha512-2iACis+P8qdLj1tHcShtztkGhCNIRUajJj7iX0IM9a5FA0wXGwjV8Nf6+HsBjBfb4LO8TTAVoetBbM54V6f3+Q== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + cssnano "^7.0.4" + jest-worker "^30.0.5" + postcss "^8.4.40" + schema-utils "^4.2.0" + serialize-javascript "^6.0.2" + +css-select@^5.1.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" + integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-3.1.0.tgz#7aabc035f4e66b5c86f54570d55e05b1346eb0fd" + integrity sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w== + dependencies: + mdn-data "2.12.2" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" + +css-what@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-7.0.10.tgz#4fb6ee962c0852a03084e8c7a4b60fb0e2db45e0" + integrity sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA== + dependencies: + browserslist "^4.27.0" + css-declaration-sorter "^7.2.0" + cssnano-utils "^5.0.1" + postcss-calc "^10.1.1" + postcss-colormin "^7.0.5" + postcss-convert-values "^7.0.8" + postcss-discard-comments "^7.0.5" + postcss-discard-duplicates "^7.0.2" + postcss-discard-empty "^7.0.1" + postcss-discard-overridden "^7.0.1" + postcss-merge-longhand "^7.0.5" + postcss-merge-rules "^7.0.7" + postcss-minify-font-values "^7.0.1" + postcss-minify-gradients "^7.0.1" + postcss-minify-params "^7.0.5" + postcss-minify-selectors "^7.0.5" + postcss-normalize-charset "^7.0.1" + postcss-normalize-display-values "^7.0.1" + postcss-normalize-positions "^7.0.1" + postcss-normalize-repeat-style "^7.0.1" + postcss-normalize-string "^7.0.1" + postcss-normalize-timing-functions "^7.0.1" + postcss-normalize-unicode "^7.0.5" + postcss-normalize-url "^7.0.1" + postcss-normalize-whitespace "^7.0.1" + postcss-ordered-values "^7.0.2" + postcss-reduce-initial "^7.0.5" + postcss-reduce-transforms "^7.0.1" + postcss-svgo "^7.1.0" + postcss-unique-selectors "^7.0.4" + +cssnano-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-5.0.1.tgz#f529e9aa0d7930512ca45b9e2ddb8d6b9092eb30" + integrity sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg== + +cssnano@^7.0.4: + version "7.1.2" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-7.1.2.tgz#a8a533a8f509d74b2d22e73d80ec1294f65fdc70" + integrity sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA== + dependencies: + cssnano-preset-default "^7.0.10" + lilconfig "^3.1.3" + +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + cssstyle@^4.2.1: version "4.6.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" @@ -3254,6 +3403,27 @@ dom-serialize@^2.2.1: extend "^3.0.0" void-elements "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + dompurify@^3.2.5: version "3.3.1" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.1.tgz#c7e1ddebfe3301eacd6c0c12a4af284936dbbb86" @@ -3261,6 +3431,15 @@ dompurify@^3.2.5: optionalDependencies: "@types/trusted-types" "^2.0.7" +domutils@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -3363,6 +3542,11 @@ ent@~2.2.0: punycode "^1.4.1" safe-regex-test "^1.1.0" +entities@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + entities@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" @@ -3982,6 +4166,11 @@ iconv-lite@~0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + import-local@^3.0.2, import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" @@ -4559,7 +4748,7 @@ jest-watcher@30.2.0: jest-util "30.2.0" string-length "^4.0.2" -jest-worker@30.2.0: +jest-worker@30.2.0, jest-worker@^30.0.5: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-30.2.0.tgz#fd5c2a36ff6058ec8f74366ec89538cc99539d26" integrity sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g== @@ -4780,6 +4969,11 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -4828,6 +5022,16 @@ lodash.has@^4.5.2: resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g== +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -4887,6 +5091,16 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.12.2: + version "2.12.2" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" + integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -4966,6 +5180,14 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mini-css-extract-plugin@^2.9.4: + version "2.9.4" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz#cafa1a42f8c71357f49cd1566810d74ff1cb0200" + integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== + dependencies: + schema-utils "^4.0.0" + tapable "^2.2.1" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5047,6 +5269,11 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + napi-postinstall@^0.3.0: version "0.3.4" resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" @@ -5104,6 +5331,13 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + nwsapi@^2.2.16: version "2.2.23" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" @@ -5301,6 +5535,255 @@ pnp-webpack-plugin@^1.7.0: dependencies: ts-pnp "^1.1.6" +postcss-calc@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" + integrity sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" + +postcss-colormin@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.5.tgz#0c7526289ab3f0daf96a376fd7430fae7258d5cf" + integrity sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + colord "^2.9.3" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-7.0.8.tgz#0c599dc29891d47d7b4d6db399c402cf3ba8efc3" + integrity sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg== + dependencies: + browserslist "^4.27.0" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz#0a95aa4d229a021bc441861d4773d57145ee15dd" + integrity sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ== + dependencies: + postcss-selector-parser "^7.1.0" + +postcss-discard-duplicates@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz#9cf3e659d4f94b046eef6f93679490c0250a8e4e" + integrity sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w== + +postcss-discard-empty@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz#b6c57e8b5c69023169abea30dceb93f98a2ffd9f" + integrity sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg== + +postcss-discard-overridden@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" + integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== + +postcss-merge-longhand@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" + integrity sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^7.0.5" + +postcss-merge-rules@^7.0.7: + version "7.0.7" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-7.0.7.tgz#f49537e5029ce0e655c2f31fdb205f14575c7334" + integrity sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + cssnano-utils "^5.0.1" + postcss-selector-parser "^7.1.0" + +postcss-minify-font-values@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz#6fb4770131b31fd5a2014bd84e32f386a3406664" + integrity sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz#933cb642dd00df397237c17194f37dcbe4cad739" + integrity sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A== + dependencies: + colord "^2.9.3" + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-7.0.5.tgz#4a0d15e312252e41d0c8504227d43538e3f607a2" + integrity sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ== + dependencies: + browserslist "^4.27.0" + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz#d8c89eeeb208705ab4127a464d1f54a3bc22cae3" + integrity sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug== + dependencies: + cssesc "^3.0.0" + postcss-selector-parser "^7.1.0" + +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" + integrity sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ== + +postcss-normalize-display-values@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz#feb40277d89a7f677b67a84cac999f0306e38235" + integrity sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz#c771c0d33034455205f060b999d8557c2308d22c" + integrity sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz#05fe4d838eedbd996436c5cab78feef9bb1ae57b" + integrity sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz#0f111e7b5dfb6de6ab19f09d9e1c16fabeee232f" + integrity sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz#7b645a36f113fec49d95d56386c9980316c71216" + integrity sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.5.tgz#d47a3cc40529d7eeb18d7f7a8a215c38c54455cd" + integrity sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q== + dependencies: + browserslist "^4.27.0" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz#d6471a22b6747ce93d7038c16eb9f1ba8b307e25" + integrity sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz#ab8e9ff1f3213f3f3851c0a7d0e4ce4716777cea" + integrity sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" + integrity sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw== + dependencies: + cssnano-utils "^5.0.1" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz#cf74bb747dfa003cd3d5372081f6157e6d8e1545" + integrity sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA== + dependencies: + browserslist "^4.27.0" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz#f87111264b0dfa07e1f708d7e6401578707be5d6" + integrity sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-7.1.0.tgz#7eb6764a643ac2699bf56eef6d2676d428ed4542" + integrity sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^4.0.0" + +postcss-unique-selectors@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz#625ad1c808bdf322fab6c027ae8d4f2637140995" + integrity sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ== + dependencies: + postcss-selector-parser "^7.1.0" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "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.33, postcss@^8.4.40: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prettier@*: version "3.7.4" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" @@ -5595,6 +6078,11 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db" + integrity sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ== + saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -5858,6 +6346,11 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +source-map-js@^1.0.1, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -6050,6 +6543,19 @@ strip-json-comments@^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-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" + integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== + +stylehacks@^7.0.5: + version "7.0.7" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.7.tgz#12b0dd1eceee4d564aae6da0632804ef0004a5be" + integrity sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g== + dependencies: + browserslist "^4.27.0" + postcss-selector-parser "^7.1.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6076,6 +6582,19 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svgo@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-4.0.0.tgz#17e0fa2eaccf429e0ec0d2179169abde9ba8ad3d" + integrity sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw== + dependencies: + commander "^11.1.0" + css-select "^5.1.0" + css-tree "^3.0.1" + css-what "^6.1.0" + csso "^5.0.5" + picocolors "^1.1.1" + sax "^1.4.1" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -6350,7 +6869,7 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== From 19550ed4feb679d310273a9bc89df5193756d2fa Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 15 Dec 2025 15:37:31 +1100 Subject: [PATCH 040/270] Add postcss integration --- package.json | 5 + yarn.lock | 769 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 756 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 0dadfc5d49..e97d8806dd 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,11 @@ "mini-css-extract-plugin": "^2.9.4", "moment": "*", "mrujs": "*", + "postcss": "^8.5.6", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-import": "^16.1.1", + "postcss-loader": "^8.2.0", + "postcss-preset-env": "^10.5.0", "select2": "*", "shortcut-buttons-flatpickr": "*", "stimulus": "*", diff --git a/yarn.lock b/yarn.lock index 65312d518d..41a59bf598 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1247,6 +1247,11 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@csstools/cascade-layer-name-parser@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz#43f962bebead0052a9fed1a2deeb11f85efcbc72" + integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== + "@csstools/color-helpers@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" @@ -1257,7 +1262,7 @@ resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== -"@csstools/css-color-parser@^3.0.9": +"@csstools/css-color-parser@^3.0.9", "@csstools/css-color-parser@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== @@ -1265,16 +1270,362 @@ "@csstools/color-helpers" "^5.1.0" "@csstools/css-calc" "^2.1.4" -"@csstools/css-parser-algorithms@^3.0.4": +"@csstools/css-parser-algorithms@^3.0.4", "@csstools/css-parser-algorithms@^3.0.5": version "3.0.5" resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== -"@csstools/css-tokenizer@^3.0.3": +"@csstools/css-tokenizer@^3.0.3", "@csstools/css-tokenizer@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== +"@csstools/media-query-list-parser@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz#7aec77bcb89c2da80ef207e73f474ef9e1b3cdf1" + integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== + +"@csstools/postcss-alpha-function@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz#7989605711de7831bc7cd75b94c9b5bac9c3728e" + integrity sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-cascade-layers@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz#dd2c70db3867b88975f2922da3bfbae7d7a2cae7" + integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-color-function-display-p3-linear@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz#3017ff5e1f65307d6083e58e93d76724fb1ebf9f" + integrity sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz#a7c85a98c77b522a194a1bbb00dd207f40c7a771" + integrity sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-function@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz#2f1ee9f8208077af069545c9bd79bb9733382c2a" + integrity sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz#b4012b62a4eaa24d694172bb7137f9d2319cb8f2" + integrity sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-content-alt-text@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz#1d52da1762893c32999ff76839e48d6ec7c7a4cb" + integrity sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-contrast-color-function@^2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz#ca46986d095c60f208d9e3f24704d199c9172637" + integrity sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-exponential-functions@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz#fc03d1272888cb77e64cc1a7d8a33016e4f05c69" + integrity sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-font-format-keywords@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" + integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gamut-mapping@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz#be0e34c9f0142852cccfc02b917511f0d677db8b" + integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-gradients-interpolation-method@^5.0.12": + version "5.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz#0955cce4d97203b861bf66742bbec611b2f3661c" + integrity sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-hwb-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz#07f7ecb08c50e094673bd20eaf7757db0162beee" + integrity sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-ic-unit@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz#2ee2da0690db7edfbc469279711b9e69495659d2" + integrity sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-initial@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz#c385bd9d8ad31ad159edd7992069e97ceea4d09a" + integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== + +"@csstools/postcss-is-pseudo-class@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz#d34e850bcad4013c2ed7abe948bfa0448aa8eb74" + integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-light-dark-function@^2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz#0df448aab9a33cb9a085264ff1f396fb80c4437d" + integrity sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-logical-float-and-clear@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" + integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== + +"@csstools/postcss-logical-overflow@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" + integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== + +"@csstools/postcss-logical-overscroll-behavior@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" + integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== + +"@csstools/postcss-logical-resize@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" + integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-logical-viewport-units@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz#016d98a8b7b5f969e58eb8413447eb801add16fc" + integrity sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ== + dependencies: + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-media-minmax@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz#184252d5b93155ae526689328af6bdf3fc113987" + integrity sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz#f485c31ec13d6b0fb5c528a3474334a40eff5f11" + integrity sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +"@csstools/postcss-nested-calc@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" + integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" + integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz#416640ef10227eea1375b47b72d141495950971d" + integrity sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-position-area-property@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-position-area-property/-/postcss-position-area-property-1.0.0.tgz#41f0cbc737a81a42890d5ec035fa26a45f4f4ad4" + integrity sha512-fUP6KR8qV2NuUZV3Cw8itx0Ep90aRjAZxAEzC3vrl6yjFv+pFsQbR18UuQctEKmA72K9O27CoYiKEgXxkqjg8Q== + +"@csstools/postcss-progressive-custom-properties@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz#c39780b9ff0d554efb842b6bd75276aa6f1705db" + integrity sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-random-function@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" + integrity sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-relative-color-syntax@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz#ced792450102441f7c160e1d106f33e4b44181f8" + integrity sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-scope-pseudo-class@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" + integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== + dependencies: + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-sign-functions@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz#a9ac56954014ae4c513475b3f1b3e3424a1e0c12" + integrity sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-stepped-value-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz#36036f1a0e5e5ee2308e72f3c9cb433567c387b9" + integrity sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-system-ui-font-family@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz#bd65b79078debf6f67b318dc9b71a8f9fa16f8c8" + integrity sha512-s3xdBvfWYfoPSBsikDXbuorcMG1nN1M6GdU0qBsGfcmNR0A/qhloQZpTxjA3Xsyrk1VJvwb2pOfiOT3at/DuIQ== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-text-decoration-shorthand@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz#fae1b70f07d1b7beb4c841c86d69e41ecc6f743c" + integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz#3f94ed2e319b57f2c59720b64e4d0a8a6fb8c3b2" + integrity sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A== + dependencies: + "@csstools/css-calc" "^2.1.4" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + +"@csstools/postcss-unset-value@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" + integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== + +"@csstools/selector-resolve-nested@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz#848c6f44cb65e3733e478319b9342b7aa436fac7" + integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== + +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== + +"@csstools/utilities@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" + integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== + "@discoveryjs/json-ext@^0.5.0": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" @@ -2540,6 +2891,17 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +autoprefixer@^10.4.22: + version "10.4.23" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6" + integrity sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA== + dependencies: + browserslist "^4.28.1" + caniuse-lite "^1.0.30001760" + fraction.js "^5.3.4" + picocolors "^1.1.1" + postcss-value-parser "^4.2.0" + babel-jest@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-30.2.0.tgz#fd44a1ec9552be35ead881f7381faa7d8f3b95ac" @@ -2746,7 +3108,7 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4.28.0: +browserslist@^4.0.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -2825,7 +3187,7 @@ call-bound@^1.0.2, call-bound@^1.0.3: call-bind-apply-helpers "^1.0.2" get-intrinsic "^1.3.0" -callsites@^3.1.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== @@ -2850,7 +3212,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: version "1.0.30001760" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== @@ -3117,6 +3479,16 @@ cors@~2.8.5: object-assign "^4" vary "^1" +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: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -3135,11 +3507,27 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" +css-blank-pseudo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" + integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== + dependencies: + postcss-selector-parser "^7.0.0" + css-declaration-sorter@^7.2.0: version "7.3.0" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz#edc45c36bcdfea0788b1d4452829f142ef1c4a4a" integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== +css-has-pseudo@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz#a5ee2daf5f70a2032f3cefdf1e36e7f52a243873" + integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" + css-loader@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.2.tgz#64671541c6efe06b0e22e750503106bdd86880f8" @@ -3166,6 +3554,11 @@ css-minimizer-webpack-plugin@^7.0.4: schema-utils "^4.2.0" serialize-javascript "^6.0.2" +css-prefers-color-scheme@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" + integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== + css-select@^5.1.0: version "5.2.2" resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" @@ -3198,6 +3591,11 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== +cssdb@^8.5.2: + version "8.5.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.5.2.tgz#8a8c16c43785e32749453e589f18debcd936c7d1" + integrity sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3552,6 +3950,11 @@ entities@^6.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== +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.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" @@ -3857,6 +4260,11 @@ foundation-sites@5.5.3: resolved "https://registry.yarnpkg.com/foundation-sites/-/foundation-sites-5.5.3.tgz#6556eb2b31cde3b226630116bd215d95d056c0a7" integrity sha512-z0NZl6Orkmeu0yhgjl3a8Ecd3frjEichn9IqocQX2jHMv9Ecd6UOPWS85f1YJXdCF6bHqnekGkrcWQ37ciR0Pw== +fraction.js@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" + integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== + fresh@0.5.2, fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -4171,6 +4579,14 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^3.0.2, import-local@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" @@ -4778,6 +5194,11 @@ jest@*: import-local "^3.2.0" jest-cli "30.2.0" +jiti@^2.5.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + jquery-ui@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.14.1.tgz#ba342ea3ffff662b787595391f607d923313e040" @@ -5441,6 +5862,13 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -5516,6 +5944,11 @@ picomatch@^4.0.2: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + pirates@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" @@ -5535,6 +5968,13 @@ pnp-webpack-plugin@^1.7.0: dependencies: ts-pnp "^1.1.6" +postcss-attribute-case-insensitive@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" + integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-calc@^10.1.1: version "10.1.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-10.1.1.tgz#52b385f2e628239686eb6e3a16207a43f36064ca" @@ -5543,6 +5983,40 @@ postcss-calc@^10.1.1: postcss-selector-parser "^7.0.0" postcss-value-parser "^4.2.0" +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz#9a3df2296889e629fde18b873bb1f50a4ecf4b83" + integrity sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +postcss-color-hex-alpha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" + integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" + integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + postcss-colormin@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-7.0.5.tgz#0c7526289ab3f0daf96a376fd7430fae7258d5cf" @@ -5561,6 +6035,44 @@ postcss-convert-values@^7.0.8: browserslist "^4.27.0" postcss-value-parser "^4.2.0" +postcss-custom-media@^11.0.6: + version "11.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967" + integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/media-query-list-parser" "^4.0.3" + +postcss-custom-properties@^14.0.6: + version "14.0.6" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" + integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8" + integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.5" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + postcss-selector-parser "^7.0.0" + +postcss-dir-pseudo-class@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" + integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-discard-comments@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-7.0.5.tgz#0a95aa4d229a021bc441861d4773d57145ee15dd" @@ -5583,6 +6095,88 @@ postcss-discard-overridden@^7.0.1: resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz#bd9c9bc5e4548d3b6e67e7f8d64f2c9d745ae2a0" integrity sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg== +postcss-double-position-gradients@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz#b482d08b5ced092b393eb297d07976ab482d4cad" + integrity sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" + integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== + +postcss-focus-visible@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" + integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-focus-within@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" + integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" + integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== + +postcss-image-set-function@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" + integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-import@^16.1.1: + version "16.1.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-16.1.1.tgz#cfbe79e6c9232b0dbbe1c18f35308825cfe8ff2a" + integrity sha512-2xVS1NCZAfjtVdvXiyegxzJ447GyqCeEI5V7ApgQVOWnros1p5lGNovJNapwPpMombyFBfqDwt7AD3n2l0KOfQ== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-lab-function@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz#eb555ac542607730eb0a87555074e4a5c6eef6e4" + integrity sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w== + dependencies: + "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/utilities" "^2.0.0" + +postcss-loader@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.0.tgz#9b830af550bc0829d565d4e774738d84df88eab7" + integrity sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA== + dependencies: + cosmiconfig "^9.0.0" + jiti "^2.5.1" + semver "^7.6.2" + +postcss-logical@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228" + integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== + dependencies: + postcss-value-parser "^4.2.0" + postcss-merge-longhand@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz#e1b126e92f583815482e8b1e82c47d2435a20421" @@ -5662,6 +6256,15 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-nesting@^13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" + integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.1.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-normalize-charset@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz#bccc3f7c5f4440883608eea8b444c8f41ce55ff6" @@ -5724,6 +6327,11 @@ postcss-normalize-whitespace@^7.0.1: dependencies: postcss-value-parser "^4.2.0" +postcss-opacity-percentage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" + integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== + postcss-ordered-values@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz#0e803fbb9601e254270481772252de9a8c905f48" @@ -5732,6 +6340,107 @@ postcss-ordered-values@^7.0.2: cssnano-utils "^5.0.1" postcss-value-parser "^4.2.0" +postcss-overflow-shorthand@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" + integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" + integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^10.5.0: + version "10.5.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.5.0.tgz#fa9af5b635c053f6d68f91132eab3a0b5c4e53c8" + integrity sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ== + dependencies: + "@csstools/postcss-alpha-function" "^1.0.1" + "@csstools/postcss-cascade-layers" "^5.0.2" + "@csstools/postcss-color-function" "^4.0.12" + "@csstools/postcss-color-function-display-p3-linear" "^1.0.1" + "@csstools/postcss-color-mix-function" "^3.0.12" + "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.2" + "@csstools/postcss-content-alt-text" "^2.0.8" + "@csstools/postcss-contrast-color-function" "^2.0.12" + "@csstools/postcss-exponential-functions" "^2.0.9" + "@csstools/postcss-font-format-keywords" "^4.0.0" + "@csstools/postcss-gamut-mapping" "^2.0.11" + "@csstools/postcss-gradients-interpolation-method" "^5.0.12" + "@csstools/postcss-hwb-function" "^4.0.12" + "@csstools/postcss-ic-unit" "^4.0.4" + "@csstools/postcss-initial" "^2.0.1" + "@csstools/postcss-is-pseudo-class" "^5.0.3" + "@csstools/postcss-light-dark-function" "^2.0.11" + "@csstools/postcss-logical-float-and-clear" "^3.0.0" + "@csstools/postcss-logical-overflow" "^2.0.0" + "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" + "@csstools/postcss-logical-resize" "^3.0.0" + "@csstools/postcss-logical-viewport-units" "^3.0.4" + "@csstools/postcss-media-minmax" "^2.0.9" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" + "@csstools/postcss-nested-calc" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-oklab-function" "^4.0.12" + "@csstools/postcss-position-area-property" "^1.0.0" + "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-random-function" "^2.0.1" + "@csstools/postcss-relative-color-syntax" "^3.0.12" + "@csstools/postcss-scope-pseudo-class" "^4.0.1" + "@csstools/postcss-sign-functions" "^1.1.4" + "@csstools/postcss-stepped-value-functions" "^4.0.9" + "@csstools/postcss-system-ui-font-family" "^1.0.0" + "@csstools/postcss-text-decoration-shorthand" "^4.0.3" + "@csstools/postcss-trigonometric-functions" "^4.0.9" + "@csstools/postcss-unset-value" "^4.0.0" + autoprefixer "^10.4.22" + browserslist "^4.28.0" + css-blank-pseudo "^7.0.1" + css-has-pseudo "^7.0.3" + css-prefers-color-scheme "^10.0.0" + cssdb "^8.5.2" + postcss-attribute-case-insensitive "^7.0.1" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^7.0.12" + postcss-color-hex-alpha "^10.0.0" + postcss-color-rebeccapurple "^10.0.0" + postcss-custom-media "^11.0.6" + postcss-custom-properties "^14.0.6" + postcss-custom-selectors "^8.0.5" + postcss-dir-pseudo-class "^9.0.1" + postcss-double-position-gradients "^6.0.4" + postcss-focus-visible "^10.0.1" + postcss-focus-within "^9.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^6.0.0" + postcss-image-set-function "^7.0.0" + postcss-lab-function "^7.0.12" + postcss-logical "^8.1.0" + postcss-nesting "^13.0.2" + postcss-opacity-percentage "^3.0.0" + postcss-overflow-shorthand "^6.0.0" + postcss-page-break "^3.0.4" + postcss-place "^10.0.0" + postcss-pseudo-class-any-link "^10.0.1" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^8.0.1" + +postcss-pseudo-class-any-link@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" + integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-reduce-initial@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-7.0.5.tgz#cf74bb747dfa003cd3d5372081f6157e6d8e1545" @@ -5747,6 +6456,18 @@ postcss-reduce-transforms@^7.0.1: dependencies: postcss-value-parser "^4.2.0" +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" + integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-selector-parser@^7.0.0, postcss-selector-parser@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" @@ -5770,12 +6491,12 @@ postcss-unique-selectors@^7.0.4: dependencies: postcss-selector-parser "^7.1.0" -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "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.33, postcss@^8.4.40: +postcss@^8.4.33, postcss@^8.4.40, postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -5884,6 +6605,13 @@ react-is@^18.3.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + readable-stream@^2.0.1: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -6004,11 +6732,25 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-from@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve@^1.1.7, resolve@^1.22.10, resolve@^1.9.0: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.14.2: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -6018,15 +6760,6 @@ resolve@^1.14.2: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.10, resolve@^1.9.0: - version "1.22.11" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" - integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== - dependencies: - is-core-module "^2.16.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -6141,7 +6874,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.5.3, semver@^7.5.4, semver@^7.7.2: +semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.7.2: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== From dbb8e07b9a7f5ae0354e893f2a83ed1cc7d274e5 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 15 Dec 2025 15:50:48 +1100 Subject: [PATCH 041/270] Add Sass integration We are still using the old `ruby-sass` because it's a dependency from `rails-sass` which is a dependcy from `select2`. It looks like the master branch on the ofn fork get rid of the dependency, so we should upgrading. --- Gemfile | 2 ++ package.json | 1 + yarn.lock | 7 +++++++ 3 files changed, 10 insertions(+) diff --git a/Gemfile b/Gemfile index 1e8ea7f348..a0c44ecfe5 100644 --- a/Gemfile +++ b/Gemfile @@ -126,6 +126,8 @@ gem 'angular_rails_csrf' gem 'jquery-rails', '4.4.0' gem 'jquery-ui-rails', '~> 4.2' +# TODO move away from sass-rails, master branch will get rid of dependency, so we can move to +# https://github.com/sass/embedded-host-node gem "select2-rails", github: "openfoodfoundation/select2-rails", branch: "v349_with_thor_v1" gem 'good_migrations' diff --git a/package.json b/package.json index e97d8806dd..47618328a1 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "postcss-import": "^16.1.1", "postcss-loader": "^8.2.0", "postcss-preset-env": "^10.5.0", + "sass-loader": "^16.0.6", "select2": "*", "shortcut-buttons-flatpickr": "*", "stimulus": "*", diff --git a/yarn.lock b/yarn.lock index 41a59bf598..634ad57dc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6811,6 +6811,13 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sass-loader@^16.0.6: + version "16.0.6" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.6.tgz#913b05607d06c386bc37870494e1e3a3e091fd3b" + integrity sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA== + dependencies: + neo-async "^2.6.2" + sax@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db" From b8e62b3d84b3fd002633dc6b23638894e00c3a2e Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 15 Dec 2025 15:56:21 +1100 Subject: [PATCH 042/270] Add coffeeScript dependency --- package.json | 2 ++ yarn.lock | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/package.json b/package.json index 47618328a1..e756b8f644 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "@rails/webpacker": "^6.0.0-rc.6", "@stimulus-components/rails-nested-form": "*", "cable_ready": "5.0.6", + "coffee-loader": "^5.0.0", + "coffeescript": "^2.7.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.4", "flatpickr": "*", diff --git a/yarn.lock b/yarn.lock index 634ad57dc4..21a26d5898 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3313,11 +3313,21 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== +coffee-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/coffee-loader/-/coffee-loader-5.0.0.tgz#376de71ea3dc648a9c4cac5b02fbadb7c19c8e6e" + integrity sha512-gUIfnuyjVEkjuugx6uRHHhnqmjqsL5dlhYgvhAUla25EoQhI57IFBQvsHvJHtBv5BMB2IzTKezDU2SrZkEiPdQ== + coffee-script@~1: version "1.12.7" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== +coffeescript@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.7.0.tgz#a43ec03be6885d6d1454850ea70b9409c391279c" + integrity sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A== + collect-v8-coverage@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" From 577aa55f98caac2f704bcbf45d3bcea227582a54 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 16 Dec 2025 11:26:41 +1100 Subject: [PATCH 043/270] Move browserlist settings to package.json --- .browserslistrc | 2 -- package.json | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 .browserslistrc diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 4ad54fdc91..0000000000 --- a/.browserslistrc +++ /dev/null @@ -1,2 +0,0 @@ -defaults -IE 11 diff --git a/package.json b/package.json index e756b8f644..a0217616e9 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,8 @@ ] }, "browserslist": [ - "defaults" + "defaults", + "IE 11" ], "devDependencies": { "@testing-library/dom": "<11.0.0", From 68e3623861c4c7fc3747811a47cddaaeac0f5fe3 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 16 Dec 2025 11:36:31 +1100 Subject: [PATCH 044/270] Use default babel config, set up on package.json --- babel.config.js | 72 ------------------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 babel.config.js diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 6380fdbab0..0000000000 --- a/babel.config.js +++ /dev/null @@ -1,72 +0,0 @@ -module.exports = function(api) { - var validEnv = ['development', 'test', 'production'] - var currentEnv = api.env() - var isDevelopmentEnv = api.env('development') - var isProductionEnv = api.env('production') - var isTestEnv = api.env('test') - - if (!validEnv.includes(currentEnv)) { - throw new Error( - 'Please specify a valid `NODE_ENV` or ' + - '`BABEL_ENV` environment variables. Valid values are "development", ' + - '"test", and "production". Instead, received: ' + - JSON.stringify(currentEnv) + - '.' - ) - } - - return { - presets: [ - isTestEnv && [ - '@babel/preset-env', - { - targets: { - node: 'current' - } - } - ], - (isProductionEnv || isDevelopmentEnv) && [ - '@babel/preset-env', - { - forceAllTransforms: true, - useBuiltIns: 'entry', - corejs: 3, - modules: false, - exclude: ['transform-typeof-symbol'] - } - ] - ].filter(Boolean), - plugins: [ - 'babel-plugin-macros', - '@babel/plugin-syntax-dynamic-import', - isTestEnv && 'babel-plugin-dynamic-import-node', - '@babel/plugin-transform-destructuring', - [ - '@babel/plugin-proposal-class-properties', - { - loose: true - } - ], - [ - '@babel/plugin-proposal-object-rest-spread', - { - useBuiltIns: true - } - ], - [ - '@babel/plugin-transform-runtime', - { - helpers: false - } - ], - [ - '@babel/plugin-transform-regenerator', - { - async: false - } - ], - ["@babel/plugin-proposal-private-property-in-object", { "loose": true }], - ["@babel/plugin-proposal-private-methods", { "loose": true }] - ].filter(Boolean) - } -} From c2a7a8938138c50fa34e92ea7604db1cd9e4592d Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 16 Dec 2025 11:45:33 +1100 Subject: [PATCH 045/270] Move extensions configuration to webpack.config.js --- config/webpack/webpack.config.js | 10 ++++++++++ config/webpacker.yml | 18 ------------------ 2 files changed, 10 insertions(+), 18 deletions(-) create mode 100644 config/webpack/webpack.config.js diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js new file mode 100644 index 0000000000..db02af6d77 --- /dev/null +++ b/config/webpack/webpack.config.js @@ -0,0 +1,10 @@ +const { generateWebpackConfig } = require("@rails/webpacker") + +const options = { + resolve: { + extensions: [".mjs", ".js", ".sass",".scss", ".css", ".module.sass", ".module.scss", ".module.css", ".png", ".svg", ".gif", ".jpeg", ".jpg", ".eot", ".ttf", ".woff"] + } +} + +// This results in a new object copied from the mutable global +module.exports = generateWebpackConfig(options) diff --git a/config/webpacker.yml b/config/webpacker.yml index 6242775ead..7c9691e7b9 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -39,24 +39,6 @@ default: &default - .woff - .woff2 - extensions: - - .mjs - - .js - - .sass - - .scss - - .css - - .module.sass - - .module.scss - - .module.css - - .png - - .svg - - .gif - - .jpeg - - .jpg - - .eot - - .ttf - - .woff - development: <<: *default compile: true From ad4b26e86d0d3d58c1cdd856985a6313fd3406b4 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 17 Dec 2025 11:12:43 +1100 Subject: [PATCH 046/270] Add missing dependency for asset compilation --- package.json | 2 + yarn.lock | 310 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 307 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a0217616e9..cebcaf69e9 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,8 @@ "postcss-import": "^16.1.1", "postcss-loader": "^8.2.0", "postcss-preset-env": "^10.5.0", + "regenerator-transform": "^0.15.2", + "sass-embedded": "^1.96.0", "sass-loader": "^16.0.6", "select2": "*", "shortcut-buttons-flatpickr": "*", diff --git a/yarn.lock b/yarn.lock index 21a26d5898..0643de76da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1150,7 +1150,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== @@ -1242,6 +1242,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bufbuild/protobuf@^2.5.0": + version "2.10.2" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.10.2.tgz#d7c063301f2a33095fc202f06bf3cce0c138dfcd" + integrity sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A== + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -2104,6 +2109,95 @@ resolved "https://registry.yarnpkg.com/@orchidjs/unicode-variants/-/unicode-variants-1.1.2.tgz#1fd71791a67fdd1591ebe0dcaadd3964537a824e" integrity sha512-5DobW1CHgnBROOEpFlEXytED5OosEWESFvg/VYmH0143oXcijYTprRYJTs+55HzGM4IqxiLFSuqEzu9mPNwVsA== +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3147,6 +3241,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-builder@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/buffer-builder/-/buffer-builder-0.2.0.tgz#3322cd307d8296dab1f604618593b261a3fade8f" + integrity sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3264,6 +3363,13 @@ chokidar@^3.5.1, chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -3367,6 +3473,11 @@ colorette@^2.0.10, colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +colorjs.io@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/colorjs.io/-/colorjs.io-0.5.2.tgz#63b20139b007591ebc3359932bef84628eb3fcef" + integrity sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw== + commander@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" @@ -3774,6 +3885,11 @@ destroy@1.2.0, destroy@~1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-newline@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4589,6 +4705,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +immutable@^5.0.2: + version "5.1.4" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f" + integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA== + import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" @@ -4689,7 +4810,7 @@ is-generator-fn@^2.1.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.1, is-glob@~4.0.1: +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" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -5564,7 +5685,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.2, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -5730,6 +5851,11 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-forge@^1: version "1.3.3" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.3.tgz#0ad80f6333b3a0045e827ac20b7f735f93716751" @@ -6644,6 +6770,11 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -6677,6 +6808,13 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -6797,6 +6935,13 @@ run-applescript@^7.0.0: resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== +rxjs@^7.4.0: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -6821,6 +6966,133 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sass-embedded-all-unknown@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.96.0.tgz#15dc4103428754442eb8efffca112119146a880d" + integrity sha512-UfUHoWZtxmsDjDfK+fKCy0aJe6zThu7oaIQx0c/vnHgvprcddEPIay01qTXhiUa3cFcsMmvlBvPTVw0gjKVtVQ== + dependencies: + sass "1.96.0" + +sass-embedded-android-arm64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.96.0.tgz#fde75ab439240ba17ebd71ba0b9ee6c7028de096" + integrity sha512-TJiebTo4TBF5Wrn+lFkUfSN3wazvl8kkFm9a1nA9ZtRdaE0nsJLGnMM6KLQLP2Vl+IOf6ovetZseISkClRoGXw== + +sass-embedded-android-arm@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.96.0.tgz#765ab941cb95a1b7d0bc0358b1b0d1ce31d169d5" + integrity sha512-0mwVRBFig9hH8vFcRExBuBoR+CfUOcWdwarZwbxIFGI1IyH4BLBGiX85vVn6ssSCVNydpE6lFGm45CN8O0tQig== + +sass-embedded-android-riscv64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.96.0.tgz#d6d36f01dec7bb2df28bcb8bb9c51384c254f3eb" + integrity sha512-7AVu/EeJqKN3BGNhm+tc1XzmoqbOtCwHG2VgN6j6Lyqh1JZlx0dglRtyQuKDZ7odTKiWmotEIuYZ6OxLmr2Ejg== + +sass-embedded-android-x64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.96.0.tgz#4f781e8ebf82f128c3cb6c5844d408ab4980d478" + integrity sha512-ei/UsT0q8rF5JzWhn1A7B0M1y/IiWVY3l4zibQrXk5MGaOXHlCM6ffZD+2j7C613Jm9/KAQ7yX1NIIu72LPgDQ== + +sass-embedded-darwin-arm64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.96.0.tgz#d94f483e02963fd56d9e081ac639fc25f358ab28" + integrity sha512-OMvN5NWcrrisC24ZR3GyaWJ1uFxw25qLnUkpEso9TSlaMWiomjU82/uQ/AkQvIMl+EMlJqeYLxZWvq/byLH5Xg== + +sass-embedded-darwin-x64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.96.0.tgz#491375185d9fda266b0b87f70179dfd952a4ed62" + integrity sha512-J/R5sv0eW+/DU98rccHPO1f3lsTFjVTpdkU9d3P1yB7BFmQjw5PYde9BVRlXeOawPwfgT3p/hvY4RELScICdww== + +sass-embedded-linux-arm64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.96.0.tgz#533c16766336a5909c21c1e3ccd52505fe0ead30" + integrity sha512-VcbVjK0/O/mru0h0FC1WSUWIzMqRrzuJ8eZNMXTs4vApfkh28pxNaUodwU81f1L1nngJ3vpFDBniUKpW6NwJhw== + +sass-embedded-linux-arm@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.96.0.tgz#b4fa8eb54080b724d383b043aec9ebd285eaca8a" + integrity sha512-XuQvV6gNld5Bz3rX0SFLtKPGMu4UQdXNp//9A+bDmtVGZ6yu8REIqphQBxOMpgkAKsA4JZLKKk1N97woeVsIlA== + +sass-embedded-linux-musl-arm64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.96.0.tgz#7c42226812455447ee07227072ea05681d384836" + integrity sha512-lVyLObEeu8Wgw8riC6dSMlkF7jVNAjdZ1jIBhvX1yDsrQwwaI60pM21YXmnZSFyCE6KVFkKAgwRQNO/IkoCwMA== + +sass-embedded-linux-musl-arm@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.96.0.tgz#ba9580bf21216903e1a09d8bc958daf6335aaf6f" + integrity sha512-qK7FrnczCVECZXtyYOoI3azFlMDZn70GI1yJPPuZLpWvwIPYoZOLv3u6JSec5o3wT6KeKyWG3ZpGIpigLUjPig== + +sass-embedded-linux-musl-riscv64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.96.0.tgz#3389f5e98bfbb2122b12b15fd79e069df84b9945" + integrity sha512-Y+DuGVRsM2zGl268QN5aF/Y6OFYTILb3f+6huEXKlGL6FK2MXadsmeoVbmKVrTamQHzyA2bWWMU1C0jhVFtlzg== + +sass-embedded-linux-musl-x64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.96.0.tgz#a09f72924d4789ca2f2e61cce3afeb2e123b8d15" + integrity sha512-sAQtUQ8fFNxnxSf3fncOh892Hfxa4PW4e5qrnSE0Y1IGV/wsTzk7m5Z6IeT7sa3BsvXh5TFN6+JGbUoOJ5RigA== + +sass-embedded-linux-riscv64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.96.0.tgz#501c2a71fb70a2f54f2d150f0facce9f6deb954b" + integrity sha512-Bf6bAjuUm6sfGHo0XoZEstjVkEWwmmtOSomGoPuAwXFS9GQnFcqDz9EXKNkZEOsQi2D+aDeDxs8HcU9/OLMT9g== + +sass-embedded-linux-x64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.96.0.tgz#b73027c9b1c3ac1a10f215115fcb13a80c36f28e" + integrity sha512-U4GROkS0XM6ekqs/ubroWwFAGY9N35wqrt5q6Y+MJCpTK5bHPHlgFo7J75ZUSaEObL+UrDqvMDQkCdYEFiiQbg== + +sass-embedded-unknown-all@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.96.0.tgz#1c3c8214974da05b1657212ec8f595b491b2caaa" + integrity sha512-OHzGEr2VElK2SaQdkkTX0O0KwTbiv1N/EhnHgzXYaZWOTvv0gxEfR7q7x/oScCBIZc2x8dSfvThfBnohIClo/w== + dependencies: + sass "1.96.0" + +sass-embedded-win32-arm64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.96.0.tgz#d4d0d4eafc1ddd2581956bef365232cadf687107" + integrity sha512-KKz1h5pr45fwrKcxrxHsujo3f/HgVkX64YNJ9PRPuOuX7lU8g18IEgDxoTGQ64PPBQ5RXOt6jxpT+x2OLPVnCw== + +sass-embedded-win32-x64@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.96.0.tgz#f5349af406f6552984df6293525b0e177241b9c9" + integrity sha512-MDreKaWcgiyKD5YPShaRvUBoe5dC2y8IPJK49G7iQjoMfw9INDCBkDdLcz00Mn0eJq4nJJp5UEE98M6ljIrBRg== + +sass-embedded@^1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.96.0.tgz#9bee58c9143d77f220ceea1cee2e4a95a595f62e" + integrity sha512-z9PQ7owvdhn7UuZGrpPccdkcH9xJd9iCv+UQhcPqppBslYEp0R9LRQVyyPTZg7jfA77bGxz/I8V48LXJR5LjXQ== + dependencies: + "@bufbuild/protobuf" "^2.5.0" + buffer-builder "^0.2.0" + colorjs.io "^0.5.0" + immutable "^5.0.2" + rxjs "^7.4.0" + supports-color "^8.1.1" + sync-child-process "^1.0.2" + varint "^6.0.0" + optionalDependencies: + sass-embedded-all-unknown "1.96.0" + sass-embedded-android-arm "1.96.0" + sass-embedded-android-arm64 "1.96.0" + sass-embedded-android-riscv64 "1.96.0" + sass-embedded-android-x64 "1.96.0" + sass-embedded-darwin-arm64 "1.96.0" + sass-embedded-darwin-x64 "1.96.0" + sass-embedded-linux-arm "1.96.0" + sass-embedded-linux-arm64 "1.96.0" + sass-embedded-linux-musl-arm "1.96.0" + sass-embedded-linux-musl-arm64 "1.96.0" + sass-embedded-linux-musl-riscv64 "1.96.0" + sass-embedded-linux-musl-x64 "1.96.0" + sass-embedded-linux-riscv64 "1.96.0" + sass-embedded-linux-x64 "1.96.0" + sass-embedded-unknown-all "1.96.0" + sass-embedded-win32-arm64 "1.96.0" + sass-embedded-win32-x64 "1.96.0" + sass-loader@^16.0.6: version "16.0.6" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.6.tgz#913b05607d06c386bc37870494e1e3a3e091fd3b" @@ -6828,6 +7100,17 @@ sass-loader@^16.0.6: dependencies: neo-async "^2.6.2" +sass@1.96.0: + version "1.96.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.96.0.tgz#dca45b6b08ae829500f448124afc7c15150bbb34" + integrity sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + sax@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db" @@ -7096,7 +7379,7 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -source-map-js@^1.0.1, source-map-js@^1.2.1: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -7350,6 +7633,18 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +sync-child-process@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/sync-child-process/-/sync-child-process-1.0.2.tgz#45e7c72e756d1243e80b547ea2e17957ab9e367f" + integrity sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA== + dependencies: + sync-message-port "^1.0.0" + +sync-message-port@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sync-message-port/-/sync-message-port-1.1.3.tgz#6055c565ee8c81d2f9ee5aae7db757e6d9088c0c" + integrity sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg== + synckit@^0.11.8: version "0.11.11" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" @@ -7485,7 +7780,7 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -7643,6 +7938,11 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" From b3dc76b8cf1fe5aad259a01c8d4bc4af2c854743 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 17 Dec 2025 11:30:36 +1100 Subject: [PATCH 047/270] Fix configuration and scss to get webpack to compile Move the Postcss config hack to postcss.config.js --- app/webpacker/css/admin_v3/all.scss | 19 ++++++------ app/webpacker/css/darkswarm/all.scss | 6 ++-- config/webpack/base.js | 31 +++++-------------- postcss.config.js | 5 ++- .../{select2.css.scss => select2.scss} | 0 5 files changed, 24 insertions(+), 37 deletions(-) rename vendor/assets/stylesheets/{select2.css.scss => select2.scss} (100%) diff --git a/app/webpacker/css/admin_v3/all.scss b/app/webpacker/css/admin_v3/all.scss index a9840b62f1..3393a90cbb 100644 --- a/app/webpacker/css/admin_v3/all.scss +++ b/app/webpacker/css/admin_v3/all.scss @@ -2,16 +2,17 @@ // While in feature-toggle, we inherit all files from old admin design. // Individual files may be copied in order to replace the old files. -@import "vendor/assets/stylesheets/normalize"; -@import "vendor/assets/stylesheets/responsive-tables"; -@import "vendor/assets/stylesheets/jquery.powertip"; +// TODO remove ~ +@import "assets/stylesheets/normalize"; +@import "assets/stylesheets/responsive-tables"; +@import "assets/stylesheets/jquery.powertip"; @import "~jquery-ui/themes/base/core"; @import "~jquery-ui/themes/base/button"; @import "~jquery-ui/themes/base/resizable"; -@import "vendor/assets/stylesheets/jquery-ui-theme"; +@import "assets/stylesheets/jquery-ui-theme"; @import "~jquery-ui/themes/base/dialog"; @import "../shared/ng-tags-input.min"; -@import "vendor/assets/stylesheets/select2.css.scss"; +@import "assets/stylesheets/select2"; @import "~flatpickr/dist/flatpickr"; @import "~flatpickr/dist/themes/material_blue"; @import "~shortcut-buttons-flatpickr/dist/themes/light"; @@ -126,10 +127,10 @@ @import "~tom-select/src/scss/tom-select.default"; @import "components/tom_select"; // admin_v3 -@import "app/components/modal_component/modal_component"; -@import "app/components/vertical_ellipsis_menu_component/vertical_ellipsis_menu_component"; // admin_v3 and only V3 -@import "app/components/tag_list_input_component/tag_list_input_component"; -@import "app/webpacker/css/admin/trix.scss"; +@import "modal_component/modal_component"; +@import "vertical_ellipsis_menu_component/vertical_ellipsis_menu_component"; // admin_v3 and only V3 +@import "tag_list_input_component/tag_list_input_component"; +@import "admin/trix"; @import "terms_of_service_banner"; // admin_v3 diff --git a/app/webpacker/css/darkswarm/all.scss b/app/webpacker/css/darkswarm/all.scss index cbab208f24..d0b9a4d70e 100644 --- a/app/webpacker/css/darkswarm/all.scss +++ b/app/webpacker/css/darkswarm/all.scss @@ -1,6 +1,6 @@ -@import 'vendor/assets/stylesheets/autocomplete'; -@import 'vendor/assets/stylesheets/leaflet'; +@import 'assets/stylesheets/autocomplete'; +@import 'assets/stylesheets/leaflet'; @import 'variables'; @import '../shared/variables/layout'; @import '../shared/utilities'; @@ -77,4 +77,4 @@ ofn-modal { @import "../shared/question-mark-icon"; @import '../admin/shared/scroll_bar'; -@import 'app/components/modal_component/modal_component'; +@import 'modal_component/modal_component'; diff --git a/config/webpack/base.js b/config/webpack/base.js index 6461d6b01f..20df0e208f 100644 --- a/config/webpack/base.js +++ b/config/webpack/base.js @@ -2,22 +2,6 @@ const { webpackConfig } = require('@rails/webpacker') module.exports = webpackConfig -// TODO see if we can remove -function hotfixPostcssLoaderConfig (subloader) { - const subloaderName = subloader.loader - if (subloaderName === 'postcss-loader') { - if (subloader.options.postcssOptions) { - console.log( - '\x1b[31m%s\x1b[0m', - 'Remove postcssOptions workaround in config/webpack/base.js' - ) - } else { - subloader.options.postcssOptions = subloader.options.config; - delete subloader.options.config; - } - } -} - // TODO try removing this function addQuietDepsToSassLoader (subloader) { if (subloader.loader === 'sass-loader') { @@ -28,11 +12,10 @@ function addQuietDepsToSassLoader (subloader) { } } -webpackConfig.loaders.keys().forEach(loaderName => { - const loader = webpackConfig.loaders.get(loaderName); - if (loaderName === 'sass') { - loader.use.forEach(addQuietDepsToSassLoader); - } - loader.use.forEach(hotfixPostcssLoaderConfig); -}); - +//webpackConfig.loaders.keys().forEach(loaderName => { +// const loader = webpackConfig.loaders.get(loaderName); +// if (loaderName === 'sass') { +// loader.use.forEach(addQuietDepsToSassLoader); +// } +// loader.use.forEach(hotfixPostcssLoaderConfig); +//}); diff --git a/postcss.config.js b/postcss.config.js index aa5998a809..973aaedf25 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,9 @@ module.exports = { plugins: [ - require('postcss-import'), + require('postcss-import')({ + // Wepacker isn't passing the configured path to Postcss, so we specify the base path here + path: process.cwd() + }), require('postcss-flexbugs-fixes'), require('postcss-preset-env')({ autoprefixer: { diff --git a/vendor/assets/stylesheets/select2.css.scss b/vendor/assets/stylesheets/select2.scss similarity index 100% rename from vendor/assets/stylesheets/select2.css.scss rename to vendor/assets/stylesheets/select2.scss From bbbbe71bc426bafb13bd8437cee7b8ef69b0e575 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 17 Dec 2025 14:42:15 +1100 Subject: [PATCH 048/270] Remove deprecated `~`prefix https://github.com/webpack/sass-loader/blob/main/README.md#the-style-new-api-by-default-since-16-version-and-outputstyle-old-api-options-in-production-mode --- app/webpacker/css/admin_v3/all.scss | 17 ++++++++--------- app/webpacker/css/darkswarm/all.scss | 2 +- app/webpacker/css/darkswarm/variables.scss | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/webpacker/css/admin_v3/all.scss b/app/webpacker/css/admin_v3/all.scss index 3393a90cbb..6e0d8da2aa 100644 --- a/app/webpacker/css/admin_v3/all.scss +++ b/app/webpacker/css/admin_v3/all.scss @@ -2,20 +2,19 @@ // While in feature-toggle, we inherit all files from old admin design. // Individual files may be copied in order to replace the old files. -// TODO remove ~ @import "assets/stylesheets/normalize"; @import "assets/stylesheets/responsive-tables"; @import "assets/stylesheets/jquery.powertip"; -@import "~jquery-ui/themes/base/core"; -@import "~jquery-ui/themes/base/button"; -@import "~jquery-ui/themes/base/resizable"; +@import "jquery-ui/themes/base/core"; +@import "jquery-ui/themes/base/button"; +@import "jquery-ui/themes/base/resizable"; @import "assets/stylesheets/jquery-ui-theme"; -@import "~jquery-ui/themes/base/dialog"; +@import "jquery-ui/themes/base/dialog"; @import "../shared/ng-tags-input.min"; @import "assets/stylesheets/select2"; -@import "~flatpickr/dist/flatpickr"; -@import "~flatpickr/dist/themes/material_blue"; -@import "~shortcut-buttons-flatpickr/dist/themes/light"; +@import "flatpickr/dist/flatpickr"; +@import "flatpickr/dist/themes/material_blue"; +@import "shortcut-buttons-flatpickr/dist/themes/light"; @import "../admin/globals/functions"; @import "globals/palette"; // admin_v3 @@ -124,7 +123,7 @@ @import "shared/question-mark-icon"; @import "../admin/question-mark-tooltip"; -@import "~tom-select/src/scss/tom-select.default"; +@import "tom-select/src/scss/tom-select.default"; @import "components/tom_select"; // admin_v3 @import "modal_component/modal_component"; diff --git a/app/webpacker/css/darkswarm/all.scss b/app/webpacker/css/darkswarm/all.scss index d0b9a4d70e..b9ea99065b 100644 --- a/app/webpacker/css/darkswarm/all.scss +++ b/app/webpacker/css/darkswarm/all.scss @@ -4,7 +4,7 @@ @import 'variables'; @import '../shared/variables/layout'; @import '../shared/utilities'; -@import '~foundation-sites/scss/foundation'; +@import 'foundation-sites/scss/foundation'; @import 'big-input'; @import 'branding'; diff --git a/app/webpacker/css/darkswarm/variables.scss b/app/webpacker/css/darkswarm/variables.scss index 28d7df1a25..1eea3e3ad7 100644 --- a/app/webpacker/css/darkswarm/variables.scss +++ b/app/webpacker/css/darkswarm/variables.scss @@ -1,4 +1,4 @@ -@import "~foundation-sites/scss/foundation/components/global"; +@import "foundation-sites/scss/foundation/components/global"; // Brand guide colours: // International: #81c26e From 2d50dace20c853c8c0c71cfb8d201775c80d4109 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 17 Dec 2025 14:56:49 +1100 Subject: [PATCH 049/270] Move to shakapacker 6 and install dependencies --- Gemfile | 2 +- Gemfile.lock | 12 +- package.json | 16 +- yarn.lock | 861 +++++++++------------------------------------------ 4 files changed, 170 insertions(+), 721 deletions(-) diff --git a/Gemfile b/Gemfile index a0c44ecfe5..a3c9e03949 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'activemerchant' gem 'angular-rails-templates' gem 'ransack', '~> 4.1.0' gem 'responders' -gem 'webpacker', '6.0.0.rc.6' +gem 'shakapacker', '6.0.0' # Indirect dependency but we access it directly in JS specs. # It turns out to be hard to upgrade but please do if you can. diff --git a/Gemfile.lock b/Gemfile.lock index 3661214820..f4927bc37f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -813,6 +813,11 @@ GEM sd_notify (0.1.1) securerandom (0.4.1) semantic_range (3.1.0) + shakapacker (6.0.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) shoulda-matchers (7.0.1) activesupport (>= 7.1) sidekiq (7.2.4) @@ -939,11 +944,6 @@ GEM addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (6.0.0.rc.6) - activesupport (>= 5.2) - rack-proxy (>= 0.6.1) - railties (>= 5.2) - semantic_range (>= 2.3.0) webrick (1.9.2) websocket-driver (0.7.7) base64 @@ -1080,6 +1080,7 @@ DEPENDENCIES rubocop-rspec_rails sd_notify select2-rails! + shakapacker (= 6.0.0) shoulda-matchers sidekiq sidekiq-scheduler @@ -1105,7 +1106,6 @@ DEPENDENCIES web! web-console webmock - webpacker (= 6.0.0.rc.6) whenever wicked_pdf wkhtmltopdf-binary diff --git a/package.json b/package.json index cebcaf69e9..a8e1d77b73 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,19 @@ }, "license": "AGPL-3.0", "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-runtime": "^7.28.5", + "@babel/preset-env": "^7.28.5", + "@babel/runtime": "^7.28.4", "@floating-ui/dom": "*", "@hotwired/stimulus": "*", "@hotwired/turbo": "*", - "@rails/webpacker": "^6.0.0-rc.6", "@stimulus-components/rails-nested-form": "*", + "babel-loader": "^10.0.0", "cable_ready": "5.0.6", "coffee-loader": "^5.0.0", "coffeescript": "^2.7.0", + "compression-webpack-plugin": "^11.1.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.4", "flatpickr": "*", @@ -37,17 +42,22 @@ "sass-embedded": "^1.96.0", "sass-loader": "^16.0.6", "select2": "*", + "shakapacker": "6.0.0", "shortcut-buttons-flatpickr": "*", "stimulus": "*", "stimulus-autocomplete": "*", "stimulus-flatpickr": "*", "stimulus_reflex": "3.5.5", "style-loader": "^4.0.0", + "terser-webpack-plugin": "^5.3.16", "tom-select": "*", "trix": "*", "turbo_power": "*", - "webpack": "^5.53.0", - "webpack-cli": "^4.8.0" + "webpack": "^5.104.0", + "webpack-assets-manifest": "^6.5.0", + "webpack-cli": "^6.0.1", + "webpack-merge": "^6.0.1", + "webpack-sources": "^3.3.3" }, "babel": { "presets": [ diff --git a/yarn.lock b/yarn.lock index 0643de76da..11b233e289 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,37 +22,12 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/code-frame@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.13.11": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== - -"@babel/compat-data@^7.21.5": - version "7.21.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" - integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== - "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.15.5", "@babel/core@^7.23.9", "@babel/core@^7.27.4": +"@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== @@ -73,16 +48,6 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/generator@^7.27.5", "@babel/generator@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" @@ -108,17 +73,6 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.13.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" - integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== - dependencies: - "@babel/compat-data" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - "@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" @@ -130,21 +84,6 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" - integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.21.5" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.21.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" @@ -176,20 +115,6 @@ regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-define-polyfill-provider@^0.6.5": version "0.6.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" @@ -201,51 +126,11 @@ lodash.debounce "^4.0.8" resolve "^1.22.10" -"@babel/helper-environment-visitor@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" - integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - "@babel/helper-globals@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" - integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== - dependencies: - "@babel/types" "^7.21.5" - "@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" @@ -254,20 +139,6 @@ "@babel/traverse" "^7.28.5" "@babel/types" "^7.28.5" -"@babel/helper-module-imports@^7.12.13": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -285,13 +156,6 @@ "@babel/helper-validator-identifier" "^7.27.1" "@babel/traverse" "^7.28.3" -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" @@ -309,11 +173,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-plugin-utils@^7.13.0": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - "@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" @@ -323,18 +182,6 @@ "@babel/helper-wrap-function" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/helper-replace-supers@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" - integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== - dependencies: - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-member-expression-to-functions" "^7.21.5" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - "@babel/helper-replace-supers@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" @@ -344,13 +191,6 @@ "@babel/helper-optimise-call-expression" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - "@babel/helper-skip-transparent-expression-wrappers@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" @@ -359,54 +199,25 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-string-parser@^7.21.5": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" - integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== - "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -430,24 +241,6 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - "@babel/parser@^7.1.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" @@ -460,11 +253,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== -"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" @@ -504,14 +292,6 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/traverse" "^7.28.3" -"@babel/plugin-proposal-class-properties@^7.14.5": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" @@ -981,17 +761,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-runtime@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3" - integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw== +"@babel/plugin-transform-runtime@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - semver "^6.3.0" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.27.1": version "7.27.1" @@ -1060,7 +840,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/preset-env@^7.15.6": +"@babel/preset-env@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== @@ -1150,29 +930,11 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.28.4", "@babel/runtime@^7.8.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - "@babel/template@^7.27.1", "@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" @@ -1182,22 +944,6 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.21.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" @@ -1219,7 +965,7 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@babel/types@^7.13.12", "@babel/types@^7.14.5", "@babel/types@^7.18.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.5", "@babel/types@^7.4.4": +"@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.4.4": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== @@ -1228,15 +974,6 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1631,10 +1368,10 @@ resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@discoveryjs/json-ext@^0.6.1": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" + integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== "@emnapi/core@^1.4.3": version "1.7.1" @@ -1967,15 +1704,6 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/remapping@^2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" @@ -1984,21 +1712,11 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - "@jridgewell/source-map@^0.3.3": version "0.3.11" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" @@ -2007,16 +1725,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.5" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" @@ -2030,14 +1738,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - "@jsonjoy.com/base64@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" @@ -2213,29 +1913,6 @@ resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-8.1.100.tgz#b1f85f3482425fb91e5eba1deb55152ee0bb2f85" integrity sha512-j4vJQqz51CDVYv2UafKRu4jiZi5/gTnm7NkyL+VMIgEw3s8jtVtmzu9uItUaZccUg9NJ6o05yVyBAHxNfTuCRA== -"@rails/webpacker@^6.0.0-rc.6": - version "6.0.0-rc.6" - resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-6.0.0-rc.6.tgz#04af15dc33697e09aa492da54d2093cdd15573ff" - integrity sha512-nbDxn3KsSoLeJgVpU3J81wiXLg4vErEahWdi08BJx5EO9aS6+mXWhOXHKyQogCxLkBMvLZqOafUnJMcK9O+9sA== - dependencies: - "@babel/core" "^7.15.5" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-transform-runtime" "^7.15.0" - "@babel/preset-env" "^7.15.6" - "@babel/runtime" "^7.15.4" - babel-loader "^8.2.2" - compression-webpack-plugin "^9.0.0" - glob "^7.2.0" - js-yaml "^4.1.0" - path-complete-extname "^1.0.0" - pnp-webpack-plugin "^1.7.0" - terser-webpack-plugin "^5.2.4" - webpack "^5.53.0" - webpack-assets-manifest "^5.0.6" - webpack-cli "^4.8.0" - webpack-merge "^5.8.0" - webpack-sources "^3.2.1" - "@sinclair/typebox@^0.34.0": version "0.34.41" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.41.tgz#aa51a6c1946df2c5a11494a2cdb9318e026db16c" @@ -2461,16 +2138,11 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json-schema@^7.0.5": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" @@ -2813,22 +2485,15 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== +"@webpack-cli/configtest@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57" + integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== +"@webpack-cli/info@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63" + integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== "@webpack-cli/serve@^3.0.1": version "3.0.1" @@ -2875,11 +2540,6 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" @@ -2887,16 +2547,6 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" @@ -2929,13 +2579,6 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -3009,15 +2652,12 @@ babel-jest@30.2.0: graceful-fs "^4.2.11" slash "^3.0.0" -babel-loader@^8.2.2: - version "8.3.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== +babel-loader@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.0.0.tgz#b9743714c0e1e084b3e4adef3cd5faee33089977" + integrity sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" + find-up "^5.0.0" babel-plugin-istanbul@^7.0.1: version "7.0.1" @@ -3037,15 +2677,6 @@ babel-plugin-jest-hoist@30.2.0: dependencies: "@types/babel__core" "^7.20.5" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - babel-plugin-polyfill-corejs2@^0.4.14: version "0.4.14" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" @@ -3063,21 +2694,6 @@ babel-plugin-polyfill-corejs3@^0.13.0: "@babel/helper-define-polyfill-provider" "^0.6.5" core-js-compat "^3.43.0" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - babel-plugin-polyfill-regenerator@^0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" @@ -3139,11 +2755,6 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -3202,7 +2813,7 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -3213,16 +2824,6 @@ browserslist@^4.0.0, browserslist@^4.26.3, browserslist@^4.27.0, browserslist@^4 node-releases "^2.0.27" update-browserslist-db "^1.2.0" -browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - browserslist@^4.24.0: version "4.27.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697" @@ -3316,25 +2917,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== -caniuse-lite@^1.0.30001449: - version "1.0.30001750" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz" - integrity sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ== - caniuse-lite@^1.0.30001751: version "1.0.30001753" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz#419f8fc9bab6f1a1d10d9574d0b3374f823c5b00" integrity sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw== -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3439,13 +3026,6 @@ collect-v8-coverage@^1.0.2: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -3453,11 +3033,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -3483,21 +3058,16 @@ commander@^11.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +commander@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3505,13 +3075,13 @@ compressible@~2.0.18: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" - integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== +compression-webpack-plugin@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-11.1.0.tgz#ee340d2029cf99ccecdea9ad1410b377d15b48b3" + integrity sha512-zDOQYp10+upzLxW+VRSjEpRRwBXJdsb5lBMlRxx1g8hckIFBpe3DTI0en2w7h+beuq89576RVzfiXrkdPGrHhA== dependencies: - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" + schema-utils "^4.2.0" + serialize-javascript "^6.0.2" compression@^1.7.4: version "1.8.1" @@ -3573,13 +3143,6 @@ cookie@~0.7.1, cookie@~0.7.2: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== -core-js-compat@^3.14.0: - version "3.25.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.2.tgz#7875573586809909c69e03ef310810c1969ee138" - integrity sha512-TxfyECD4smdn3/CjWxczVtJqVLEEC2up7/82t7vC0AzNogr+4nQ8vyF7abxAuTXWvjTClSbvGhU0RgqA4ToQaQ== - dependencies: - browserslist "^4.21.4" - core-js-compat@^3.43.0: version "3.47.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" @@ -3983,11 +3546,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.380" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.380.tgz#195dc59d930c6b74efbee6f0e6a267ce4af5ed91" - integrity sha512-XKGdI4pWM78eLH2cbXJHiBnWUwFSzZM7XujsB6stDiGu9AeSqziedP6amNLpJzE3i0rLTcfAwdCTs5ecP5yeSg== - electron-to-chromium@^1.5.238: version "1.5.244" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820" @@ -4013,11 +3571,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -4048,7 +3601,7 @@ engine.io@~6.6.0: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.17.3: +enhanced-resolve@^5.17.4: version "5.18.4" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== @@ -4081,7 +3634,7 @@ env-paths@^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: +envinfo@^7.14.0: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== @@ -4103,10 +3656,10 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" - integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== +es-module-lexer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.0.0.tgz#f657cd7a9448dcdda9c070a3cb75e5dc1e85f5b1" + integrity sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" @@ -4130,11 +3683,6 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" @@ -4264,12 +3812,12 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +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" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -4331,15 +3879,6 @@ finalhandler@~1.3.1: statuses "~2.0.2" unpipe "~1.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4348,6 +3887,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -4415,11 +3962,6 @@ fsevents@^2.3.3, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -4510,11 +4052,6 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" @@ -4535,11 +4072,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== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -4557,13 +4089,6 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -4749,10 +4274,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== ipaddr.js@1.9.1: version "1.9.1" @@ -4776,13 +4301,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-core-module@^2.11.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== - dependencies: - has "^1.0.3" - is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" @@ -5393,11 +4911,6 @@ jsdom@^26.1.0: ws "^8.18.0" xml-name-validator "^5.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - jsesc@^3.0.2, jsesc@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" @@ -5413,17 +4926,12 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.1.2, json5@^2.2.3: +json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5536,15 +5044,6 @@ loader-runner@^4.3.1: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5552,28 +5051,18 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - signal-exit "^3.0.2" + p-locate "^5.0.0" lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.has@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" - integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5617,13 +5106,6 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -5871,11 +5353,6 @@ node-releases@^2.0.26, node-releases@^2.0.27: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - 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" @@ -5965,7 +5442,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -5979,6 +5456,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-retry@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" @@ -6065,7 +5549,7 @@ path-to-regexp@~0.1.12: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== -picocolors@1.1.1, picocolors@^1.0.0, picocolors@^1.1.1: +picocolors@1.1.1, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -6090,20 +5574,13 @@ pirates@^4.0.7: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pnp-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9" - integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg== - dependencies: - ts-pnp "^1.1.6" - postcss-attribute-case-insensitive@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" @@ -6669,6 +6146,15 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -6682,11 +6168,6 @@ punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -6782,12 +6263,12 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - resolve "^1.9.0" + resolve "^1.20.0" regenerate-unicode-properties@^10.1.0: version "10.1.0" @@ -6890,7 +6371,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.1.7, resolve@^1.22.10, resolve@^1.9.0: +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.10: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -6899,14 +6380,10 @@ resolve@^1.1.7, resolve@^1.22.10, resolve@^1.9.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.14.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== retry@^0.13.1: version "0.13.1" @@ -7123,24 +6600,6 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" @@ -7169,7 +6628,7 @@ selfsigned@^2.4.1: "@types/node-forge" "^1.3.0" node-forge "^1" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -7217,7 +6676,7 @@ send@~0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: +serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -7257,6 +6716,15 @@ setprototypeof@1.2.0, setprototypeof@~1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shakapacker@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-6.0.0.tgz#7b3345f534d24ea056f984d766a8290e682dde29" + integrity sha512-kNkBPkvmeda0ZK1aNmdICqKWYEwzkqzRpTtJd50ArM+ZpY7wIlCuVBXGE2SM4opzQVfp9bJG00XA+NCE1K6E7Q== + dependencies: + glob "^7.2.0" + js-yaml "^4.1.0" + path-complete-extname "^1.0.0" + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -7589,13 +7057,6 @@ stylehacks@^7.0.5: browserslist "^4.27.0" postcss-selector-parser "^7.1.0" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -7657,7 +7118,7 @@ tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== -terser-webpack-plugin@^5.2.4, terser-webpack-plugin@^5.3.11: +terser-webpack-plugin@^5.3.16: version "5.3.16" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz#741e448cc3f93d8026ebe4f7ef9e4afacfd56330" integrity sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q== @@ -7770,11 +7231,6 @@ trix@*: dependencies: dompurify "^3.2.5" -ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== - tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -7883,14 +7339,6 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - update-browserslist-db@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" @@ -7907,13 +7355,6 @@ update-browserslist-db@^1.2.0: escalade "^3.2.0" picocolors "^1.1.1" -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7987,36 +7428,34 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-assets-manifest@^5.0.6: - version "5.2.1" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.2.1.tgz#7ebe4c882efdc343029ed2f54a6f7ce990406f08" - integrity sha512-MsEcXVio1GY6R+b4dVfTHIDMB0RB90KajQG8neRbH92vE2S1ClGw9mNa9NPlratYBvZOhExmN0qqMNFTaCTuIg== +webpack-assets-manifest@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-6.5.0.tgz#d49d98e226bb10518a3423cd8830511cb179a306" + integrity sha512-kLTeboMb91KRDr2MH5I3hnGi5Sei8lmhtupLARygX2sjGB7Jzc5J81HNRIquYN9SkRvos8YGoJeBcBWDBp27JA== dependencies: - chalk "^4.1.2" deepmerge "^4.3.1" - lockfile "^1.0.4" - lodash.get "^4.4.2" - lodash.has "^4.5.2" - schema-utils "^3.3.0" - tapable "^2.2.1" + proper-lockfile "^4.1.2" + schema-utils "^4.3.3" + tapable "^2.3.0" -webpack-cli@^4.8.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== +webpack-cli@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" + integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" + "@discoveryjs/json-ext" "^0.6.1" + "@webpack-cli/configtest" "^3.0.1" + "@webpack-cli/info" "^3.0.1" + "@webpack-cli/serve" "^3.0.1" colorette "^2.0.14" - commander "^7.0.0" + commander "^12.1.0" cross-spawn "^7.0.3" + envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^6.0.1" webpack-dev-middleware@^7.4.2: version "7.4.5" @@ -8064,24 +7503,24 @@ webpack-dev-server@^5.2.2: webpack-dev-middleware "^7.4.2" ws "^8.18.0" -webpack-merge@^5.7.3, webpack-merge@^5.8.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== dependencies: clone-deep "^4.0.1" flat "^5.0.2" - wildcard "^2.0.0" + wildcard "^2.0.1" -webpack-sources@^3.2.1, webpack-sources@^3.3.3: +webpack-sources@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== -webpack@^5.53.0: - version "5.103.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.103.0.tgz#17a7c5a5020d5a3a37c118d002eade5ee2c6f3da" - integrity sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw== +webpack@^5.104.0: + version "5.104.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.0.tgz#2b919a4f2526cdc42731142ae295019264fcfb76" + integrity sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -8091,10 +7530,10 @@ webpack@^5.53.0: "@webassemblyjs/wasm-parser" "^1.14.1" acorn "^8.15.0" acorn-import-phases "^1.0.3" - browserslist "^4.26.3" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.3" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.17.4" + es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -8105,7 +7544,7 @@ webpack@^5.53.0: neo-async "^2.6.2" schema-utils "^4.3.3" tapable "^2.3.0" - terser-webpack-plugin "^5.3.11" + terser-webpack-plugin "^5.3.16" watchpack "^2.4.4" webpack-sources "^3.3.3" @@ -8157,7 +7596,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wildcard@^2.0.0: +wildcard@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== From d1f47f69566d939f5ad4cad68ee2d9570a1a49c8 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 17 Dec 2025 15:01:58 +1100 Subject: [PATCH 050/270] Rename bin scripts to match new name --- Procfile | 2 +- Procfile.docker | 2 +- bin/{webpack => webpacker} | 0 bin/{webpack-dev-server => webpacker-dev-server} | 0 compose.yaml | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename bin/{webpack => webpacker} (100%) rename bin/{webpack-dev-server => webpacker-dev-server} (100%) diff --git a/Procfile b/Procfile index 5bd98f6681..c8f01d2a22 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ # Foreman Procfile. Start all dev server processes with: `foreman start` rails: DEV_CACHING=true bundle exec rails s -p 3000 -webpack: ./bin/webpack-dev-server +webpack: ./bin/webpacker-dev-server sidekiq: DEV_CACHING=true bundle exec sidekiq -q mailers -q default diff --git a/Procfile.docker b/Procfile.docker index 3ad3b7c78d..08270a03a6 100644 --- a/Procfile.docker +++ b/Procfile.docker @@ -1,5 +1,5 @@ # Foreman Procfile for Docker env. Start all dev server processes with: `bundle exec foreman start -f Procfile.docker` -webpack: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpack-dev-server +webpack: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpacker-dev-server sidekiq: DEV_CACHING=true bundle exec sidekiq -q mailers -q default rails: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 DEV_CACHING=true bundle exec rails s -p 3000 -b 0.0.0.0 diff --git a/bin/webpack b/bin/webpacker similarity index 100% rename from bin/webpack rename to bin/webpacker diff --git a/bin/webpack-dev-server b/bin/webpacker-dev-server similarity index 100% rename from bin/webpack-dev-server rename to bin/webpacker-dev-server diff --git a/compose.yaml b/compose.yaml index 30128f5cdd..b02b0077e1 100644 --- a/compose.yaml +++ b/compose.yaml @@ -89,7 +89,7 @@ services: build: . command: > sh -lc 'until [ -f /bundles/.Gemfile.lock.sha ] && sha256sum -c /bundles/.Gemfile.lock.sha >/dev/null 2>&1; do sleep 0.5; done; - exec ./bin/webpack-dev-server' + exec ./bin/webpacker-dev-server' ports: - "3035:3035" volumes: From 8ce14a55c867e7681d08afd26183e28a6cc24055 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 19 Dec 2025 15:06:11 +1100 Subject: [PATCH 051/270] Fix dependencies version, and update config Trying to stay as close as possible to the default config --- app/views/layouts/darkswarm.html.haml | 2 +- config/webpack/base.js | 21 -- config/webpack/development.js | 5 - config/webpack/production.js | 5 - config/webpack/test.js | 5 - config/webpack/webpack.config.js | 4 +- package.json | 14 +- yarn.lock | 309 ++++++++++++++++---------- 8 files changed, 207 insertions(+), 158 deletions(-) delete mode 100644 config/webpack/base.js delete mode 100644 config/webpack/development.js delete mode 100644 config/webpack/production.js delete mode 100644 config/webpack/test.js diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index edea1430a2..5ca17256f4 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -13,7 +13,7 @@ - else = favicon_link_tag "/favicon-staging.ico" %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} - %link{href: asset_pack_path("media/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} + %link{href: asset_pack_path("static/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} = render "layouts/matomo_tag" = language_meta_tags diff --git a/config/webpack/base.js b/config/webpack/base.js deleted file mode 100644 index 20df0e208f..0000000000 --- a/config/webpack/base.js +++ /dev/null @@ -1,21 +0,0 @@ -const { webpackConfig } = require('@rails/webpacker') - -module.exports = webpackConfig - -// TODO try removing this -function addQuietDepsToSassLoader (subloader) { - if (subloader.loader === 'sass-loader') { - subloader.options.sassOptions = { - ...subloader.options.sassOptions, - quietDeps: true - } - } -} - -//webpackConfig.loaders.keys().forEach(loaderName => { -// const loader = webpackConfig.loaders.get(loaderName); -// if (loaderName === 'sass') { -// loader.use.forEach(addQuietDepsToSassLoader); -// } -// loader.use.forEach(hotfixPostcssLoaderConfig); -//}); diff --git a/config/webpack/development.js b/config/webpack/development.js deleted file mode 100644 index c84a413b59..0000000000 --- a/config/webpack/development.js +++ /dev/null @@ -1,5 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'development' - -const webpackConfig = require('./base') - -module.exports = webpackConfig diff --git a/config/webpack/production.js b/config/webpack/production.js deleted file mode 100644 index c41e043601..0000000000 --- a/config/webpack/production.js +++ /dev/null @@ -1,5 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'production' - -const webpackConfig = require('./base') - -module.exports = webpackConfig diff --git a/config/webpack/test.js b/config/webpack/test.js deleted file mode 100644 index c84a413b59..0000000000 --- a/config/webpack/test.js +++ /dev/null @@ -1,5 +0,0 @@ -process.env.NODE_ENV = process.env.NODE_ENV || 'development' - -const webpackConfig = require('./base') - -module.exports = webpackConfig diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js index db02af6d77..cd663becf8 100644 --- a/config/webpack/webpack.config.js +++ b/config/webpack/webpack.config.js @@ -1,4 +1,4 @@ -const { generateWebpackConfig } = require("@rails/webpacker") +const { webpackConfig, merge } = require("shakapacker") const options = { resolve: { @@ -7,4 +7,4 @@ const options = { } // This results in a new object copied from the mutable global -module.exports = generateWebpackConfig(options) +module.exports = merge(webpackConfig, options) diff --git a/package.json b/package.json index a8e1d77b73..4f910ec7fd 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,11 @@ "@hotwired/stimulus": "*", "@hotwired/turbo": "*", "@stimulus-components/rails-nested-form": "*", - "babel-loader": "^10.0.0", + "babel-loader": "^8.2.2", "cable_ready": "5.0.6", "coffee-loader": "^5.0.0", "coffeescript": "^2.7.0", - "compression-webpack-plugin": "^11.1.0", + "compression-webpack-plugin": "^9.0.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.4", "flatpickr": "*", @@ -33,6 +33,7 @@ "mini-css-extract-plugin": "^2.9.4", "moment": "*", "mrujs": "*", + "pnp-webpack-plugin": "^1.7.0", "postcss": "^8.5.6", "postcss-flexbugs-fixes": "^5.0.2", "postcss-import": "^16.1.1", @@ -54,14 +55,14 @@ "trix": "*", "turbo_power": "*", "webpack": "^5.104.0", - "webpack-assets-manifest": "^6.5.0", - "webpack-cli": "^6.0.1", - "webpack-merge": "^6.0.1", + "webpack-assets-manifest": "^5.0.6", + "webpack-cli": "^4.8.0", + "webpack-merge": "^5.8.0", "webpack-sources": "^3.3.3" }, "babel": { "presets": [ - "./node_modules/@rails/webpacker/package/babel/preset.js" + "./node_modules/shakapacker/package/babel/preset.js" ] }, "browserslist": [ @@ -70,7 +71,6 @@ ], "devDependencies": { "@testing-library/dom": "<11.0.0", - "@webpack-cli/serve": "^3.0.1", "jasmine-core": "~5.12.1", "jest": "*", "jest-environment-jsdom": "*", diff --git a/yarn.lock b/yarn.lock index 11b233e289..6c18142a70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1368,10 +1368,10 @@ resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== -"@discoveryjs/json-ext@^0.6.1": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83" - integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@emnapi/core@^1.4.3": version "1.7.1" @@ -2138,7 +2138,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -2485,20 +2485,22 @@ "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-3.0.1.tgz#76ac285b9658fa642ce238c276264589aa2b6b57" - integrity sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA== +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== -"@webpack-cli/info@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-3.0.1.tgz#3cff37fabb7d4ecaab6a8a4757d3826cf5888c63" - integrity sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ== +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" -"@webpack-cli/serve@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-3.0.1.tgz#bd8b1f824d57e30faa19eb78e4c0951056f72f00" - integrity sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg== +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2540,6 +2542,11 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" @@ -2547,6 +2554,16 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" +ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^8.0.0, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" @@ -2652,12 +2669,15 @@ babel-jest@30.2.0: graceful-fs "^4.2.11" slash "^3.0.0" -babel-loader@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-10.0.0.tgz#b9743714c0e1e084b3e4adef3cd5faee33089977" - integrity sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA== +babel-loader@^8.2.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.4.1.tgz#6ccb75c66e62c3b144e1c5f2eaec5b8f6c08c675" + integrity sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA== dependencies: - find-up "^5.0.0" + find-cache-dir "^3.3.1" + loader-utils "^2.0.4" + make-dir "^3.1.0" + schema-utils "^2.6.5" babel-plugin-istanbul@^7.0.1: version "7.0.1" @@ -2755,6 +2775,11 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -3058,16 +3083,21 @@ commander@^11.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" @@ -3075,13 +3105,13 @@ compressible@~2.0.18: dependencies: mime-db ">= 1.43.0 < 2" -compression-webpack-plugin@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-11.1.0.tgz#ee340d2029cf99ccecdea9ad1410b377d15b48b3" - integrity sha512-zDOQYp10+upzLxW+VRSjEpRRwBXJdsb5lBMlRxx1g8hckIFBpe3DTI0en2w7h+beuq89576RVzfiXrkdPGrHhA== +compression-webpack-plugin@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== dependencies: - schema-utils "^4.2.0" - serialize-javascript "^6.0.2" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" compression@^1.7.4: version "1.8.1" @@ -3571,6 +3601,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3634,7 +3669,7 @@ env-paths@^2.2.1: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envinfo@^7.14.0: +envinfo@^7.7.3: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== @@ -3812,12 +3847,12 @@ extend@^3.0.0: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -fast-deep-equal@^3.1.3: +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" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -3879,6 +3914,15 @@ finalhandler@~1.3.1: statuses "~2.0.2" unpipe "~1.0.0" +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -3887,14 +3931,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -4274,10 +4310,10 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -interpret@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" - integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== ipaddr.js@1.9.1: version "1.9.1" @@ -4926,12 +4962,17 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json5@^2.2.3: +json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -5044,6 +5085,15 @@ loader-runner@^4.3.1: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" integrity sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== +loader-utils@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -5051,18 +5101,28 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== dependencies: - p-locate "^5.0.0" + signal-exit "^3.0.2" lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.has@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g== + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5106,6 +5166,13 @@ lz-string@^1.5.0: resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -5442,7 +5509,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -5456,13 +5523,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - p-retry@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" @@ -5574,13 +5634,20 @@ pirates@^4.0.7: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pnp-webpack-plugin@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9" + integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg== + dependencies: + ts-pnp "^1.1.6" + postcss-attribute-case-insensitive@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" @@ -6146,15 +6213,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -proper-lockfile@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -6168,7 +6226,7 @@ punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== -punycode@^2.3.1: +punycode@^2.1.0, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== @@ -6263,12 +6321,12 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" - integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== dependencies: - resolve "^1.20.0" + resolve "^1.9.0" regenerate-unicode-properties@^10.1.0: version "10.1.0" @@ -6371,7 +6429,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.10: +resolve@^1.1.7, resolve@^1.22.10, resolve@^1.9.0: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -6380,11 +6438,6 @@ resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.10: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -6600,6 +6653,24 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" @@ -6628,7 +6699,7 @@ selfsigned@^2.4.1: "@types/node-forge" "^1.3.0" node-forge "^1" -semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -6676,7 +6747,7 @@ send@~0.19.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@^6.0.2: +serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -7231,6 +7302,11 @@ trix@*: dependencies: dompurify "^3.2.5" +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -7355,6 +7431,13 @@ update-browserslist-db@^1.2.0: escalade "^3.2.0" picocolors "^1.1.1" +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7428,34 +7511,36 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-assets-manifest@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-6.5.0.tgz#d49d98e226bb10518a3423cd8830511cb179a306" - integrity sha512-kLTeboMb91KRDr2MH5I3hnGi5Sei8lmhtupLARygX2sjGB7Jzc5J81HNRIquYN9SkRvos8YGoJeBcBWDBp27JA== +webpack-assets-manifest@^5.0.6: + version "5.2.1" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-5.2.1.tgz#7ebe4c882efdc343029ed2f54a6f7ce990406f08" + integrity sha512-MsEcXVio1GY6R+b4dVfTHIDMB0RB90KajQG8neRbH92vE2S1ClGw9mNa9NPlratYBvZOhExmN0qqMNFTaCTuIg== dependencies: + chalk "^4.1.2" deepmerge "^4.3.1" - proper-lockfile "^4.1.2" - schema-utils "^4.3.3" - tapable "^2.3.0" + lockfile "^1.0.4" + lodash.get "^4.4.2" + lodash.has "^4.5.2" + schema-utils "^3.3.0" + tapable "^2.2.1" -webpack-cli@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-6.0.1.tgz#a1ce25da5ba077151afd73adfa12e208e5089207" - integrity sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw== +webpack-cli@^4.8.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== dependencies: - "@discoveryjs/json-ext" "^0.6.1" - "@webpack-cli/configtest" "^3.0.1" - "@webpack-cli/info" "^3.0.1" - "@webpack-cli/serve" "^3.0.1" + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" colorette "^2.0.14" - commander "^12.1.0" + commander "^7.0.0" cross-spawn "^7.0.3" - envinfo "^7.14.0" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^3.1.1" - rechoir "^0.8.0" - webpack-merge "^6.0.1" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" webpack-dev-middleware@^7.4.2: version "7.4.5" @@ -7503,14 +7588,14 @@ webpack-dev-server@^5.2.2: webpack-dev-middleware "^7.4.2" ws "^8.18.0" -webpack-merge@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" - integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== +webpack-merge@^5.7.3, webpack-merge@^5.8.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" flat "^5.0.2" - wildcard "^2.0.1" + wildcard "^2.0.0" webpack-sources@^3.3.3: version "3.3.3" @@ -7596,7 +7681,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wildcard@^2.0.1: +wildcard@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== From 55a15b914c54a6ac711b066b5f9b0a962c676bff Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 19 Dec 2025 15:53:10 +1100 Subject: [PATCH 052/270] Upgrade to shakapacker 6.6.0 --- Gemfile | 2 +- Gemfile.lock | 4 +- bin/webpacker | 2 - bin/webpacker-dev-server | 2 - package.json | 6 +- yarn.lock | 319 +++++++++++++-------------------------- 6 files changed, 113 insertions(+), 222 deletions(-) diff --git a/Gemfile b/Gemfile index a3c9e03949..208fa92bb3 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'activemerchant' gem 'angular-rails-templates' gem 'ransack', '~> 4.1.0' gem 'responders' -gem 'shakapacker', '6.0.0' +gem 'shakapacker', '6.6.0' # Indirect dependency but we access it directly in JS specs. # It turns out to be hard to upgrade but please do if you can. diff --git a/Gemfile.lock b/Gemfile.lock index f4927bc37f..709724be41 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -813,7 +813,7 @@ GEM sd_notify (0.1.1) securerandom (0.4.1) semantic_range (3.1.0) - shakapacker (6.0.0) + shakapacker (6.6.0) activesupport (>= 5.2) rack-proxy (>= 0.6.1) railties (>= 5.2) @@ -1080,7 +1080,7 @@ DEPENDENCIES rubocop-rspec_rails sd_notify select2-rails! - shakapacker (= 6.0.0) + shakapacker (= 6.6.0) shoulda-matchers sidekiq sidekiq-scheduler diff --git a/bin/webpacker b/bin/webpacker index 78900abfc3..8a952955e9 100755 --- a/bin/webpacker +++ b/bin/webpacker @@ -6,8 +6,6 @@ require "webpacker" require "webpacker/webpack_runner" ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" -ENV["NODE_ENV"] ||= "development" -##ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) APP_ROOT = File.expand_path("..", __dir__) diff --git a/bin/webpacker-dev-server b/bin/webpacker-dev-server index 1fbf450891..e921e0e53e 100755 --- a/bin/webpacker-dev-server +++ b/bin/webpacker-dev-server @@ -1,8 +1,6 @@ #!/usr/bin/env ruby ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" -ENV["NODE_ENV"] ||= "development" -##ENV["NODE_OPTIONS"] ||= "--openssl-legacy-provider" require "pathname" ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", diff --git a/package.json b/package.json index 4f910ec7fd..1487f8a83f 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "sass-embedded": "^1.96.0", "sass-loader": "^16.0.6", "select2": "*", - "shakapacker": "6.0.0", + "shakapacker": "6.6.0", "shortcut-buttons-flatpickr": "*", "stimulus": "*", "stimulus-autocomplete": "*", @@ -56,7 +56,7 @@ "turbo_power": "*", "webpack": "^5.104.0", "webpack-assets-manifest": "^5.0.6", - "webpack-cli": "^4.8.0", + "webpack-cli": "^4.9.2", "webpack-merge": "^5.8.0", "webpack-sources": "^3.3.3" }, @@ -79,6 +79,6 @@ "karma-coffee-preprocessor": "~1.0.1", "karma-jasmine": "~0.3.8", "prettier": "*", - "webpack-dev-server": "^5.2.2" + "webpack-dev-server": "^4.9.0" } } diff --git a/yarn.lock b/yarn.lock index 6c18142a70..0c46dcdd06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1738,51 +1738,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsonjoy.com/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" - integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== - -"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" - integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== - -"@jsonjoy.com/codegen@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" - integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== - -"@jsonjoy.com/json-pack@^1.11.0": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" - integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== - dependencies: - "@jsonjoy.com/base64" "^1.1.2" - "@jsonjoy.com/buffers" "^1.2.0" - "@jsonjoy.com/codegen" "^1.0.0" - "@jsonjoy.com/json-pointer" "^1.0.2" - "@jsonjoy.com/util" "^1.9.0" - hyperdyperid "^1.2.0" - thingies "^2.5.0" - tree-dump "^1.1.0" - -"@jsonjoy.com/json-pointer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" - integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== - dependencies: - "@jsonjoy.com/codegen" "^1.0.0" - "@jsonjoy.com/util" "^1.9.0" - -"@jsonjoy.com/util@^1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" - integrity sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ== - dependencies: - "@jsonjoy.com/buffers" "^1.0.0" - "@jsonjoy.com/codegen" "^1.0.0" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" @@ -2009,14 +1964,14 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.13": +"@types/bonjour@^3.5.9": version "3.5.13" resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.5.4": +"@types/connect-history-api-fallback@^1.3.5": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== @@ -2069,7 +2024,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": +"@types/express-serve-static-core@^4.17.33": version "4.19.7" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz#f1d306dcc03b1aafbfb6b4fe684cce8a31cffc10" integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== @@ -2088,7 +2043,7 @@ "@types/express-serve-static-core" "^5.0.0" "@types/serve-static" "^2" -"@types/express@^4.17.21": +"@types/express@^4.17.13": version "4.17.25" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.25.tgz#070c8c73a6fee6936d65c195dbbfb7da5026649b" integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== @@ -2177,10 +2132,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/retry@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" - integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/send@*": version "1.2.1" @@ -2197,14 +2152,14 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.4": +"@types/serve-index@^1.9.1": version "1.9.4" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@^1", "@types/serve-static@^1.15.5": +"@types/serve-static@^1", "@types/serve-static@^1.13.10": version "1.15.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== @@ -2221,7 +2176,7 @@ "@types/http-errors" "*" "@types/node" "*" -"@types/sockjs@^0.3.36": +"@types/sockjs@^0.3.33": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== @@ -2243,7 +2198,7 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== -"@types/ws@^8.5.10": +"@types/ws@^8.5.5": version "8.18.1" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== @@ -2803,7 +2758,7 @@ body-parser@^1.19.0, body-parser@~1.20.3: type-is "~1.6.18" unpipe "~1.0.0" -bonjour-service@^1.2.1: +bonjour-service@^1.0.11: version "1.3.0" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== @@ -2877,13 +2832,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== -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -2960,7 +2908,7 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chokidar@^3.5.1, chokidar@^3.6.0: +chokidar@^3.5.1, chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3440,23 +3388,17 @@ deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-browser-id@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" - integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== - -default-browser@^5.2.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.4.0.tgz#b55cf335bb0b465dd7c961a02cd24246aa434287" - integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" + execa "^5.0.0" -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== +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" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== depd@2.0.0, depd@~2.0.0: version "2.0.0" @@ -3773,7 +3715,7 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.1.1: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -3805,7 +3747,7 @@ expect@30.2.0: jest-mock "30.2.0" jest-util "30.2.0" -express@^4.21.2: +express@^4.17.3: version "4.22.1" resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== @@ -3988,6 +3930,11 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-monkey@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.1.0.tgz#632aa15a20e71828ed56b24303363fb1414e5997" + integrity sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4054,11 +4001,6 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob-to-regex.js@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" - integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -4154,6 +4096,11 @@ html-encoding-sniffer@^4.0.0: dependencies: whatwg-encoding "^3.1.1" +html-entities@^2.3.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" + integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -4209,7 +4156,7 @@ http-proxy-agent@^7.0.2: agent-base "^7.1.0" debug "^4.3.4" -http-proxy-middleware@^2.0.9: +http-proxy-middleware@^2.0.3: version "2.0.9" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== @@ -4242,11 +4189,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -hyperdyperid@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" - integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== - iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -4320,7 +4262,7 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.1.0: +ipaddr.js@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.3.0.tgz#71dce70e1398122208996d1c22f2ba46a24b1abc" integrity sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg== @@ -4344,10 +4286,10 @@ is-core-module@^2.16.1: dependencies: hasown "^2.0.2" -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" @@ -4371,18 +4313,6 @@ is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-network-error@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.0.tgz#2ce62cbca444abd506f8a900f39d20b898d37512" - integrity sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4420,12 +4350,12 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-wsl@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" - integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - is-inside-container "^1.0.0" + is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" @@ -5039,7 +4969,7 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -launch-editor@^2.6.1: +launch-editor@^2.6.0: version "2.12.0" resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817" integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== @@ -5207,17 +5137,12 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^4.43.1: - version "4.51.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.51.1.tgz#25945de4a90d1573945105e187daa9385e1bca73" - integrity sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ== +memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - "@jsonjoy.com/json-pack" "^1.11.0" - "@jsonjoy.com/util" "^1.9.0" - glob-to-regex.js "^1.0.1" - thingies "^2.5.0" - tree-dump "^1.0.3" - tslib "^2.0.0" + fs-monkey "^1.0.4" merge-descriptors@1.0.3: version "1.0.3" @@ -5247,25 +5172,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-db@>= 1.43.0 < 2", mime-db@^1.54.0: +"mime-db@>= 1.43.0 < 2": version "1.54.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" -mime-types@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" - integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== - dependencies: - mime-db "^1.54.0" - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -5459,7 +5377,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1, on-finished@^2.4.1, on-finished@~2.4.1: +on-finished@2.4.1, on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -5492,15 +5410,14 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" - integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - wsl-utils "^0.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" p-limit@^2.2.0: version "2.3.0" @@ -5523,13 +5440,12 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-retry@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" - integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: - "@types/retry" "0.12.2" - is-network-error "^1.0.0" + "@types/retry" "0.12.0" retry "^0.13.1" p-try@^2.0.0: @@ -6460,11 +6376,6 @@ rrweb-cssom@^0.8.0: resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== -run-applescript@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" - integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== - rxjs@^7.4.0: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" @@ -6691,7 +6602,7 @@ select2@*: resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d" integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw== -selfsigned@^2.4.1: +selfsigned@^2.1.1: version "2.4.1" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== @@ -6787,10 +6698,10 @@ setprototypeof@1.2.0, setprototypeof@~1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shakapacker@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-6.0.0.tgz#7b3345f534d24ea056f984d766a8290e682dde29" - integrity sha512-kNkBPkvmeda0ZK1aNmdICqKWYEwzkqzRpTtJd50ArM+ZpY7wIlCuVBXGE2SM4opzQVfp9bJG00XA+NCE1K6E7Q== +shakapacker@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-6.6.0.tgz#1e372a7ce6fa93f1a7bd1820737b8168679eb220" + integrity sha512-7sNnv8PXMlgm2Ob7vZOayLKu0+PPMN3q0HEyAlkFIJtHJt7wA3p1rObhlk0/OrNeBa4dio/9HiBUeEU7bZsHvw== dependencies: glob "^7.2.0" js-yaml "^4.1.0" @@ -7219,11 +7130,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -thingies@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.5.0.tgz#5f7b882c933b85989f8466b528a6247a6881e04f" - integrity sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw== - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -7290,11 +7196,6 @@ tr46@^5.1.0: dependencies: punycode "^2.3.1" -tree-dump@^1.0.3, tree-dump@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" - integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== - trix@*: version "2.1.15" resolved "https://registry.yarnpkg.com/trix/-/trix-2.1.15.tgz#fabad796ea779a8ae96522402fbc214cbfc4015f" @@ -7312,7 +7213,7 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -7524,7 +7425,7 @@ webpack-assets-manifest@^5.0.6: schema-utils "^3.3.0" tapable "^2.2.1" -webpack-cli@^4.8.0: +webpack-cli@^4.9.2: version "4.10.0" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== @@ -7542,51 +7443,52 @@ webpack-cli@^4.8.0: rechoir "^0.7.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^7.4.2: - version "7.4.5" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" - integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== +webpack-dev-middleware@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== dependencies: colorette "^2.0.10" - memfs "^4.43.1" - mime-types "^3.0.1" - on-finished "^2.4.1" + memfs "^3.4.3" + mime-types "^2.1.31" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz#96a143d50c58fef0c79107e61df911728d7ceb39" - integrity sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg== +webpack-dev-server@^4.9.0: + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== dependencies: - "@types/bonjour" "^3.5.13" - "@types/connect-history-api-fallback" "^1.5.4" - "@types/express" "^4.17.21" - "@types/express-serve-static-core" "^4.17.21" - "@types/serve-index" "^1.9.4" - "@types/serve-static" "^1.15.5" - "@types/sockjs" "^0.3.36" - "@types/ws" "^8.5.10" + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" ansi-html-community "^0.0.8" - bonjour-service "^1.2.1" - chokidar "^3.6.0" + bonjour-service "^1.0.11" + chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" - express "^4.21.2" + default-gateway "^6.0.3" + express "^4.17.3" graceful-fs "^4.2.6" - http-proxy-middleware "^2.0.9" - ipaddr.js "^2.1.0" - launch-editor "^2.6.1" - open "^10.0.3" - p-retry "^6.2.0" - schema-utils "^4.2.0" - selfsigned "^2.4.1" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^7.4.2" - ws "^8.18.0" + webpack-dev-middleware "^5.3.4" + ws "^8.13.0" webpack-merge@^5.7.3, webpack-merge@^5.8.0: version "5.10.0" @@ -7726,7 +7628,7 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@^8.18.0: +ws@^8.13.0, ws@^8.18.0: version "8.18.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== @@ -7736,13 +7638,6 @@ ws@~8.17.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== -wsl-utils@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" - integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== - dependencies: - is-wsl "^3.1.0" - xml-name-validator@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" From bb0c1e7a0f3ef3197c41f7a8dc3ef688adcb2428 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 19 Dec 2025 16:57:18 +1100 Subject: [PATCH 053/270] Quiet sass deprecations warning for dependencies We are not planning to upgrade foundation-sites --- config/webpack/webpack.config.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js index cd663becf8..5fbe79ce63 100644 --- a/config/webpack/webpack.config.js +++ b/config/webpack/webpack.config.js @@ -6,5 +6,15 @@ const options = { } } +const OFNwebpackConfig = merge(webpackConfig, options) + +// quiet deprecations in dependencies, notably foundation-sites +const scssRule = OFNwebpackConfig.module.rules.find((rule) => rule.test.test(".scss")) +const sassDefaultOptions = scssRule.use[3].options.sassOptions +scssRule.use[3].options.sassOptions = { + ...sassDefaultOptions, + quietDeps: true +} + // This results in a new object copied from the mutable global -module.exports = merge(webpackConfig, options) +module.exports = OFNwebpackConfig From 98a2bf5d471c823b0d1d60dac3c151cdf33def1c Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 22 Dec 2025 11:26:34 +1100 Subject: [PATCH 054/270] image_pack_path is now available from Shackapaker --- config/initializers/webpack.rb | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 config/initializers/webpack.rb diff --git a/config/initializers/webpack.rb b/config/initializers/webpack.rb deleted file mode 100644 index 4ccf08144e..0000000000 --- a/config/initializers/webpack.rb +++ /dev/null @@ -1,10 +0,0 @@ - -module WebpackImageExtension - def image_pack_path(image) - # The Webpacker::Helper#resolve_path_to_image method is incredibly useful - # for nicely fetching Webpacker image paths, but it's private. - resolve_path_to_image(image) - end -end - -Webpacker::Helper.include WebpackImageExtension From a120e390d0f48fd471f29b3f3ca8377079559d84 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 22 Dec 2025 14:43:40 +1100 Subject: [PATCH 055/270] Remove added config, not needed anymore --- postcss.config.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/postcss.config.js b/postcss.config.js index 973aaedf25..aa5998a809 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,9 +1,6 @@ module.exports = { plugins: [ - require('postcss-import')({ - // Wepacker isn't passing the configured path to Postcss, so we specify the base path here - path: process.cwd() - }), + require('postcss-import'), require('postcss-flexbugs-fixes'), require('postcss-preset-env')({ autoprefixer: { From 24d6c1e386a553df61d9e1c13862277163f38a8a Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 22 Dec 2025 14:45:39 +1100 Subject: [PATCH 056/270] Remove support for IE 11 Stimulus doesn't support IE 11 : https://stimulus.hotwired.dev/handbook/installing#browser-support --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1487f8a83f..3dcf9776df 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ }, "browserslist": [ "defaults", - "IE 11" + "not IE 11" ], "devDependencies": { "@testing-library/dom": "<11.0.0", From caf6b087c184e386e94cb8ac89ff05b8fb4ad38f Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 22 Dec 2025 14:47:12 +1100 Subject: [PATCH 057/270] Clean up wepacker config Disable overlayi, it covers the whole page as we have lots of warning --- config/webpacker.yml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/config/webpacker.yml b/config/webpacker.yml index 7c9691e7b9..19c3eeb903 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -25,19 +25,6 @@ default: &default # Extract and emit a css file extract_css: true - static_assets_extensions: - - .jpg - - .jpeg - - .png - - .gif - - .tiff - - .ico - - .svg - - .eot - - .otf - - .ttf - - .woff - - .woff2 development: <<: *default @@ -48,14 +35,13 @@ development: https: false host: localhost port: 3035 - public: localhost:3035 # Hot Module Replacement updates modules while the application is running without a full reload hmr: false # Defaults to the inverse of hmr. Uncomment to manually set this. # live_reload: true client: # Should we show a full-screen overlay in the browser when there are compiler errors or warnings? - overlay: true + overlay: false # May also be a string # webSocketURL: # hostname: "0.0.0.0" From 3676acf244c23851dca1093a2a05a5efb2eba945 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 22 Dec 2025 14:48:10 +1100 Subject: [PATCH 058/270] Fix font link --- app/views/layouts/darkswarm.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index 5ca17256f4..475cb45bff 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -13,7 +13,7 @@ - else = favicon_link_tag "/favicon-staging.ico" %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} - %link{href: asset_pack_path("static/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} + %link{href: asset_pack_path("static/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} = render "layouts/matomo_tag" = language_meta_tags From 0d5330d3888d336b965f8b0089f9e3b8306aaa5d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 12:21:13 +1100 Subject: [PATCH 059/270] Bump ruby from 3.2.9p265 to 3.3.10p183 --- .ruby-version | 2 +- Dockerfile | 4 ++-- Gemfile.lock | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ruby-version b/.ruby-version index e650c01d92..5f6fc5edc2 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.9 +3.3.10 diff --git a/Dockerfile b/Dockerfile index 2b4c6a94fa..2c7ed56f58 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.2.9-alpine3.19 AS base +FROM ruby:3.3.10-alpine3.19 AS base ENV LANG=C.UTF-8 \ LC_ALL=C.UTF-8 \ TZ=Europe/London \ @@ -31,4 +31,4 @@ FROM development-base COPY . $RAILS_ROOT COPY Gemfile Gemfile.lock ./ RUN bundle install --jobs "$(nproc)" -COPY --from=yarn-dependencies $RAILS_ROOT/node_modules ./node_modules \ No newline at end of file +COPY --from=yarn-dependencies $RAILS_ROOT/node_modules ./node_modules diff --git a/Gemfile.lock b/Gemfile.lock index 23d22a0797..e5e0b77b70 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1112,7 +1112,7 @@ DEPENDENCIES wkhtmltopdf-binary RUBY VERSION - ruby 3.2.9p265 + ruby 3.3.10p183 BUNDLED WITH 2.4.19 From ce5a95ff4f72ace36a44f6a20c996d53cb8be03d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 12:24:03 +1100 Subject: [PATCH 060/270] Bump bundler from 2.4.19 to 2.5.22 (default gem) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index e5e0b77b70..72ba7c50b7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1115,4 +1115,4 @@ RUBY VERSION ruby 3.3.10p183 BUNDLED WITH - 2.4.19 + 2.5.22 From 969dcae8d0bd8ff783dcdfa31c24ae0e3eb6ac7e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 14:08:10 +1100 Subject: [PATCH 061/270] Remove unnecessary require statement --- db/default/users.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/db/default/users.rb b/db/default/users.rb index 85fdd0379c..a56ac58bad 100644 --- a/db/default/users.rb +++ b/db/default/users.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'highline/import' - # see last line where we create an admin if there is none, asking for email and password def prompt_for_admin_password if ENV['ADMIN_PASSWORD'] From 61c7c2682217738039db08e385e1c9f55706382a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 14:09:42 +1100 Subject: [PATCH 062/270] Remove version restriction on highline It came from a very old version of the Spree code. --- Gemfile | 2 +- Gemfile.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index e57cc9b443..dbb60d9700 100644 --- a/Gemfile +++ b/Gemfile @@ -49,7 +49,7 @@ gem 'acts_as_list', '1.0.4' gem 'cancancan', '~> 1.15.0' gem 'digest' gem 'ffaker' -gem 'highline', '2.0.3' # Necessary for the install generator +gem 'highline' gem 'json' gem 'monetize', '~> 1.11' gem 'paranoia', '~> 2.4' diff --git a/Gemfile.lock b/Gemfile.lock index 23d22a0797..d2171987e6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1017,7 +1017,7 @@ DEPENDENCIES good_migrations haml haml_lint - highline (= 2.0.3) + highline i18n i18n-js (~> 3.9.0) i18n-tasks From 79a9dbcf68510a60aa33d8d4a36fb106b96e2516 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 14:12:59 +1100 Subject: [PATCH 063/270] Bump highline from 2.0.3 to 3.1.2 to support newer rubies --- Gemfile.lock | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d2171987e6..b6264c90b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -388,7 +388,8 @@ GEM hashdiff (1.2.1) hashery (2.1.2) hashie (5.0.0) - highline (2.0.3) + highline (3.1.2) + reline htmlentities (4.4.2) http_parser.rb (0.8.0) i18n (1.14.7) From 5479572a08565555f0b6fcdb83082b1c2e1939b8 Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 7 Jan 2026 17:00:34 +1100 Subject: [PATCH 064/270] Increase headings to level 2 h4 is rendered as bold text the same size as content. --- .github/PULL_REQUEST_TEMPLATE.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0d46875442..78d396df84 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -#### What? Why? +## What? Why? - Closes # @@ -7,7 +7,7 @@ -#### What should we test? +## What should we test? @@ -33,12 +33,12 @@ Changelog Category (reviewers may add a label for the release notes): The title of the pull request will be included in the release notes. -#### Dependencies +## Dependencies -#### Documentation updates +## Documentation updates From cab4b2fb2880251e1ff301a645d59a22d8bf28b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Thu, 11 Dec 2025 22:09:09 +0100 Subject: [PATCH 065/270] Add a new cloud storage configuration for s3-compatible alternatives --- app/models/application_record.rb | 5 +++- config/application.rb | 11 ++++++- .../initializers/content_security_policy.rb | 2 +- config/storage.yml | 17 +++++++++++ spec/models/application_record_spec.rb | 30 +++++++++++++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 spec/models/application_record_spec.rb diff --git a/app/models/application_record.rb b/app/models/application_record.rb index daccc28cf0..212f623112 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -12,7 +12,10 @@ class ApplicationRecord < ActiveRecord::Base self.include_root_in_json = true def self.image_service - ENV["S3_BUCKET"].present? ? :amazon_public : :local + return :local if ENV["S3_BUCKET"].blank? + return :amazon_public if ENV["S3_ENDPOINT"].blank? + + :s3_compatible_storage_public end # We might have a development environment without S3 but with a database diff --git a/config/application.rb b/config/application.rb index 6de448f6eb..5071eab71b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -211,7 +211,16 @@ module Openfoodnetwork Rails.autoloaders.main.ignore(Rails.root.join('app/webpacker')) - config.active_storage.service = ENV["S3_BUCKET"].present? ? :amazon : :local + config.active_storage.service = + if ENV["S3_BUCKET"].present? + if ENV["S3_ENDPOINT"].present? + :s3_compatible_storage + else + :amazon + end + else + :local + end config.active_storage.content_types_to_serve_as_binary -= ["image/svg+xml"] config.active_storage.variable_content_types += ["image/svg+xml"] config.active_storage.url_options = config.action_controller.default_url_options diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb index 6b0cb839ae..f12339ccc1 100644 --- a/config/initializers/content_security_policy.rb +++ b/config/initializers/content_security_policy.rb @@ -7,7 +7,7 @@ Rails.application.config.content_security_policy do |policy| policy.default_src :self, :https policy.font_src :self, :https, :data, "fonts.gstatic.com" - policy.img_src :self, :https, :data, "*.s3.amazonaws.com" + policy.img_src :self, :https, :data, ENV.fetch("S3_CORS_POLICY_DOMAIN", "*.s3.amazonaws.com") policy.img_src :self, :http, :data, ENV["SITE_URL"] if Rails.env.development? policy.object_src :none policy.frame_ancestors :none diff --git a/config/storage.yml b/config/storage.yml index 8e0bb583a8..5a134df4e9 100644 --- a/config/storage.yml +++ b/config/storage.yml @@ -23,3 +23,20 @@ amazon_public: secret_access_key: <%= ENV["S3_SECRET"] %> bucket: <%= ENV["S3_BUCKET"] %> region: <%= ENV.fetch("S3_REGION", "us-east-1") %> + +s3_compatible_storage: + service: S3 + endpoint: <%= ENV["S3_ENDPOINT"] %> + access_key_id: <%= ENV["S3_ACCESS_KEY"] %> + secret_access_key: <%= ENV["S3_SECRET"] %> + bucket: <%= ENV["S3_BUCKET"] %> + region: <%= ENV["S3_REGION"] %> + +s3_compatible_storage_public: + service: S3 + public: true + endpoint: <%= ENV["S3_ENDPOINT"] %> + access_key_id: <%= ENV["S3_ACCESS_KEY"] %> + secret_access_key: <%= ENV["S3_SECRET"] %> + bucket: <%= ENV["S3_BUCKET"] %> + region: <%= ENV["S3_REGION"] %> diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb new file mode 100644 index 0000000000..0c1737ae5d --- /dev/null +++ b/spec/models/application_record_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe ApplicationRecord do + describe ".image_service" do + subject { described_class.image_service } + + it { is_expected.to eq(:local) } + + context "with a S3 bucket defined" do + before do + expect(ENV).to receive(:[]).with("S3_BUCKET").and_return("test-bucket") + expect(ENV).to receive(:[]).with("S3_ENDPOINT").and_return(nil) + end + + it { is_expected.to eq(:amazon_public) } + end + + context "with a S3 bucket and endpoint defined" do + before do + expect(ENV).to receive(:[]).with("S3_BUCKET").and_return("test-bucket") + expect(ENV).to receive(:[]).with("S3_ENDPOINT") + .and_return("https://s3-compatible-alternative.com") + end + + it { is_expected.to eq(:s3_compatible_storage_public) } + end + end +end From 252943e9de1eae08147cbc42e4fd13bc041139a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Fri, 12 Dec 2025 14:45:01 +0100 Subject: [PATCH 066/270] Adjust context using allow method for Application Record spec --- spec/models/application_record_spec.rb | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb index 0c1737ae5d..c07138b9f1 100644 --- a/spec/models/application_record_spec.rb +++ b/spec/models/application_record_spec.rb @@ -10,21 +10,20 @@ RSpec.describe ApplicationRecord do context "with a S3 bucket defined" do before do - expect(ENV).to receive(:[]).with("S3_BUCKET").and_return("test-bucket") - expect(ENV).to receive(:[]).with("S3_ENDPOINT").and_return(nil) + allow(ENV).to receive(:[]).with("S3_BUCKET").and_return("test-bucket") + allow(ENV).to receive(:[]).with("S3_ENDPOINT").and_return(nil) end it { is_expected.to eq(:amazon_public) } - end - context "with a S3 bucket and endpoint defined" do - before do - expect(ENV).to receive(:[]).with("S3_BUCKET").and_return("test-bucket") - expect(ENV).to receive(:[]).with("S3_ENDPOINT") - .and_return("https://s3-compatible-alternative.com") + context "with a S3 endpoint defined" do + before do + allow(ENV).to receive(:[]).with("S3_ENDPOINT") + .and_return("https://s3-compatible-alternative.com") + end + + it { is_expected.to eq(:s3_compatible_storage_public) } end - - it { is_expected.to eq(:s3_compatible_storage_public) } end end end From 18ef5cc69a5c88e56cb083c762b625b2e6cc7570 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 12:04:46 +1100 Subject: [PATCH 067/270] Update all locales with the latest Transifex translations --- config/locales/ar.yml | 8 +++-- config/locales/ca.yml | 16 ++-------- config/locales/cy.yml | 30 ++++--------------- config/locales/de_CH.yml | 22 +------------- config/locales/de_DE.yml | 42 ++++++++++---------------- config/locales/el.yml | 30 ++++--------------- config/locales/en_CA.yml | 30 ++++--------------- config/locales/en_FR.yml | 30 ++++--------------- config/locales/en_GB.yml | 30 ++++--------------- config/locales/en_IE.yml | 30 ++++--------------- config/locales/en_NZ.yml | 22 -------------- config/locales/es.yml | 27 +++-------------- config/locales/es_CR.yml | 22 -------------- config/locales/eu.yml | 27 +++-------------- config/locales/fi.yml | 25 +--------------- config/locales/fr.yml | 30 ++++--------------- config/locales/fr_BE.yml | 65 +++++++++++++++++++++++++++------------- config/locales/fr_CA.yml | 30 ++++--------------- config/locales/fr_CH.yml | 22 -------------- config/locales/hi.yml | 30 ++++--------------- config/locales/hu.yml | 30 ++++--------------- config/locales/it.yml | 21 ------------- config/locales/ko.yml | 22 -------------- config/locales/ml.yml | 30 ++++--------------- config/locales/mr.yml | 27 ++--------------- config/locales/nb.yml | 30 ++++--------------- config/locales/pa.yml | 30 ++++--------------- config/locales/pt_BR.yml | 22 -------------- config/locales/ru.yml | 30 ++++--------------- config/locales/sr.yml | 24 --------------- config/locales/uk.yml | 22 -------------- 31 files changed, 165 insertions(+), 691 deletions(-) diff --git a/config/locales/ar.yml b/config/locales/ar.yml index d1665777f7..1c93a6fe6e 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -4358,13 +4358,10 @@ ar: webhook_endpoints: title: نقاط نهاية Webhook description: قد تؤدي الأحداث في النظام إلى تشغيل webhooks للأنظمة الخارجية. - event_types: - order_cycle_opened: تم فتح دورة الطلب event_type: header: نوع الحدث url: header: عنوان URL لنقطة النهاية - create_placeholder: 'أدخل عنوان URL لنقطة نهاية webhook ' developer_settings: title: إعدادات المطور form: @@ -4564,3 +4561,8 @@ ar: add_tag_rule_modal: select_rule_type: "اختر نوع القاعدة:" add_rule: "أضف قاعدة " + webhook_endpoint_form: + url: + create_placeholder: 'أدخل عنوان URL لنقطة نهاية webhook ' + event_types: + order_cycle_opened: تم فتح دورة الطلب diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 09d886692d..f5f05fb580 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -89,17 +89,6 @@ ca: messages: blank: "no es pot deixar en blanc" errors: - messages: - content_type_invalid: "té un tipus de contingut no vàlid" - file_size_out_of_range: "la mida %{file_size} no és entre el rang necessari" - limit_out_of_range: "el total està fora del marge" - image_metadata_missing: "no és una imatge vàlida" - aspect_ratio_not_square: "ha de ser una imatge quadrada" - aspect_ratio_not_portrait: "ha de ser una imatge vertical" - aspect_ratio_not_landscape: "ha de ser una imatge horitzontal" - aspect_ratio_is_not: "ha de tenir una relació d'aspecte de %{aspect_ratio} " - aspect_ratio_unknown: "té una relació d'aspecte desconeguda" - image_not_processable: "no és una imatge vàlida" not_found: title: "La pàgina que esteu cridant no existeix (404)" message_html: "Si us plau torna-ho a provar Això podria ser un problema temporal. Feu clic al botó Enrere per tornar a la pantalla anterior o torneu a Inici i torneu-ho a provar. Contacteu amb suport

Si el problema persisteix o és urgent, si us plau, digueu-nos-ho. Esn pots enviar un correua a suport

katuma.org .

Ens ajuda molt si pots donar tants detalls com sigui possible sobre de què estaves fent quan va aparèixer l'error.

" @@ -4249,8 +4238,6 @@ ca: title: Clau API webhook_endpoints: title: Webhook Endpoints - event_types: - order_cycle_opened: Cicle de comanda obert form: account_settings: Configuració del compte show: @@ -4393,3 +4380,6 @@ ca: add_tag_rule_modal: select_rule_type: "Selecciona un tipus de regla:" add_rule: "Afegeix una regla" + webhook_endpoint_form: + event_types: + order_cycle_opened: Cicle de comanda obert diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 46e94452bf..b36af81a4c 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -115,27 +115,6 @@ cy: blank: "ni chaniateir ei adael yn wag" too_short: "rhy fyr (o leiaf %{count} cymeriad)" errors: - messages: - content_type_invalid: "math o gynnwys annilys" - file_size_out_of_range: "nid yw'r maint %{file_size} rhwng yr ystod ofynnol" - limit_out_of_range: "mae'r cyfanswm rhif tu hwnt i'r ystod" - image_metadata_missing: "nid yw'n llun dilys" - dimension_min_inclusion: "mae'n gorfod bod yn fwy neu'r un faint â %{width} x %{height} picsel." - dimension_max_inclusion: "mae'n gorfod bod yn llai neu'r un faint â %{width} x %{height} picsel." - dimension_width_inclusion: "nid yw lled yn cael ei gynnwys rhwng %{min} ac %{max} picsel." - dimension_height_inclusion: "nid yw uchder yn cael ei gynnwys rhwng %{min} acd %{max} picsel." - dimension_width_greater_than_or_equal_to: "mae'r lled yn gorfod bod yn fwy neu'r un faint â %{length} picsel." - dimension_height_greater_than_or_equal_to: "mae'r uchder yn gorfod bod yn fwy neu'r un faint â %{length} picsel." - dimension_width_less_than_or_equal_to: "mae'r lled yn gorfod bod yn llai neu'r un faint â %{length} picsel." - dimension_height_less_than_or_equal_to: "mae'r uchder yn gorfod bod yn llai neu'r un faint â %{length} picsel." - dimension_width_equal_to: "mae'r lled yn gorfod bod yr un faint â %{length} picsel." - dimension_height_equal_to: "mae'r uchder yn gorfod bod yr un faint â %{length} picsel." - aspect_ratio_not_square: "mae'n gorfod bod yn llun sgwâr" - aspect_ratio_not_portrait: "mae'n gorfod bod yn llun siâp portread" - aspect_ratio_not_landscape: "mae'n gorfod bod yn llun siâp tirlun" - aspect_ratio_is_not: "mae'n rhaid cael cymhareb agwedd o %{aspect_ratio}" - aspect_ratio_unknown: "yn meddu ar gymhareb agwedd anhysbys" - image_not_processable: "nid yw'n llun dilys" not_found: title: "Nid yw'r dudalen rydych yn chwilio amdani'n bodoli (404)" message_html: "Rhowch gynnig arall

. Hwyrach taw problem dros dro yw hon. Cliciwch y botwm ‘yn ôl’ i ddychwelyd at y sgrin flaenorol, neu ewch yn ôl i’r Hafan , a rhowch gynnig arall

. Cysylltwch â’r ddesg

Gymorth os bydd y broblem yn parhau neu os bydd yn fater brys, cofiwch ddweud wrthym amdano. Mae ein manylion cyswllt ar gael ar dudalen ‘Lleol’ y Rhwydwaith Bwyd Agored byd-eang .

Bydd o gymorth mawr inni os gallwch roi cymaint o fanylion â phosibl am y dudalen sydd ar goll.

" @@ -4034,6 +4013,7 @@ cy: logourl: "url Logo" are_you_sure_delete: "Ydych chi'n siŵr eich bod chi am ddileu'r cofnod hwn?" confirm_delete: "Cadarnhau Dileu" + voucher: "Taleb" configurations: "Cyfluniadau" general_settings: "Gosodiadau Cyffredinol" site_name: "Enw'r Safle" @@ -4758,13 +4738,10 @@ cy: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remote webhook endpoint developer_settings: title: Gosodiadau'r Datblygwr form: @@ -4938,6 +4915,11 @@ cy: add_tag_rule_modal: select_rule_type: "Dewis math o reol:" add_rule: "Ychwanegu Rheol" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remote webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened invisible_captcha: sentence_for_humans: "Gadewch yn wag os gwelwch yn dda." timestamp_error_message: "Rhowch gynnig arall ar ôl 5 eiliad." diff --git a/config/locales/de_CH.yml b/config/locales/de_CH.yml index bc33b6721e..50abf96221 100644 --- a/config/locales/de_CH.yml +++ b/config/locales/de_CH.yml @@ -89,27 +89,6 @@ de_CH: messages: blank: "darf nicht leer sein" errors: - messages: - content_type_invalid: "hat ein ungültiges Datenformat" - file_size_out_of_range: "Dateigrösse %{file_size} liegt ausserhalb des zulässigen Bereichs" - limit_out_of_range: "Gesamtzahl liegt ausserhalb des zulässigen Bereichs" - image_metadata_missing: "ist kein gültiges Bild" - dimension_min_inclusion: "muss grösser oder gleich %{width} x %{height} Pixel sein" - dimension_max_inclusion: "muss kleiner oder gleich %{width} x %{height} Pixel sein" - dimension_width_inclusion: "Breite liegt nicht zwischen %{min} und %{max} Pixel" - dimension_height_inclusion: "Höhe liegt nicht zwischen %{min} und %{max} Pixel" - dimension_width_greater_than_or_equal_to: "Breite muss grösser oder gleich %{length} Pixel sein" - dimension_height_greater_than_or_equal_to: "Höhe muss grösser oder gleich %{length} Pixel sein" - dimension_width_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein" - dimension_height_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein" - dimension_width_equal_to: "Breite muss %{length} Pixel sein" - dimension_height_equal_to: "Höhe muss %{length} Pixel sein" - aspect_ratio_not_square: "muss ein quadratisches Bild sein" - aspect_ratio_not_portrait: "muss ein Bild im Hochformat sein" - aspect_ratio_not_landscape: "muss ein Bild im Querformat sein" - aspect_ratio_is_not: "muss ein Seitenverhältnis von %{aspect_ratio} haben" - aspect_ratio_unknown: "hat ein unbekanntes Seitenverhältnis" - image_not_processable: "ist kein gültiges Bild" not_found: title: "Die gesuchte Seite existiert nicht (404)" stripe: @@ -3615,6 +3594,7 @@ de_CH: logourl: "URL des Logos" are_you_sure_delete: "Möchten Sie diesen Datensatz wirklich löschen?" confirm_delete: "Löschen bestätigen" + voucher: "Gutschein" configurations: "Konfiguration" general_settings: "Allgemeine Einstellungen" site_name: "Name der Website" diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index 05935bf797..3c7d4bb16f 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -105,27 +105,6 @@ de_DE: blank: "darf nicht leer sein." too_short: "ist zu kurz (mindestens %{count} Zeichen)" errors: - messages: - content_type_invalid: "hat ein ungültiges Datenformat" - file_size_out_of_range: "Dateigröße %{file_size} liegt außerhalb des zulässigen Bereichs" - limit_out_of_range: "Gesamtzahl liegt außerhalb des zulässigen Bereichs" - image_metadata_missing: "ist kein gültiges Bild" - dimension_min_inclusion: "muss größer oder gleich %{width} x %{height} Pixel sein" - dimension_max_inclusion: "muss kleiner oder gleich %{width} x %{height} Pixel sein" - dimension_width_inclusion: "Breite liegt nicht zwischen %{min} und %{max} Pixel" - dimension_height_inclusion: "Höhe liegt nicht zwischen %{min} und %{max} Pixel" - dimension_width_greater_than_or_equal_to: "Breite muss größer oder gleich %{length} Pixel sein" - dimension_height_greater_than_or_equal_to: "Höhe muss größer oder gleich %{length} Pixel sein" - dimension_width_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein" - dimension_height_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein" - dimension_width_equal_to: "Breite muss %{length} Pixel sein" - dimension_height_equal_to: "Höhe muss %{length} Pixel sein" - aspect_ratio_not_square: "muss ein quadratisches Bild sein" - aspect_ratio_not_portrait: "muss ein Bild im Hochformat sein" - aspect_ratio_not_landscape: "muss ein Bild im Querformat sein" - aspect_ratio_is_not: "muss ein Seitenverhältnis von %{aspect_ratio} haben" - aspect_ratio_unknown: "hat ein unbekanntes Seitenverhältnis" - image_not_processable: "ist kein gültiges Bild" not_found: title: "Die gesuchte Seite existiert nicht (404). " message_html: "Bitte versuchen Sie es erneut

Dies könnte ein vorübergehendes Problem sein. Bitte klicken Sie auf die Zurück-Schaltfläche, um zum vorherigen Bildschirm zurückzukehren, oder gehen Sie zurück zur Startseite und versuchen Sie es erneut.

Kontaktieren Sie den Support

Wenn das Problem weiterhin besteht oder dringend ist, teilen Sie uns dies bitte mit. Unsere Kontaktdaten finden Sie auf der lokalen Seite des globalen Open Food Network .

Es hilft uns sehr, wenn Sie so detailliert wie möglich angeben können, worum es auf der fehlenden Seite geht.

" @@ -795,12 +774,14 @@ de_DE: cancellation_text: "Produktvariante beibehalten" filters: search_products: Nach Produkten suchen + search_for_producers: Produzenten suchen all_producers: Alle Produzenten + search_for_categories: Kategorie suchen all_categories: Alle Kategorien producers: label: Unsere Produzenten categories: - label: Lieferkategorien + label: Produktkategorie tags: label: Stichwörter search: Suche @@ -845,6 +826,7 @@ de_DE: category_field_name: "Kategorie" tax_category_field_name: "Steuerkategorie" producer_field_name: "Produzent" + select_unit_scale: Einheit auswählen add_a_tag: Stichwort hinzufügen clone: success: Das Produkt wurde dupliziert. @@ -1098,6 +1080,7 @@ de_DE: images: legend: "Bilder" logo: Logo + logo_size: "300 x 300 Pixel" inventory_settings: legend: "Katalog" text1: Sie verwalten optional Ihre Lagerbestände und Preise auch in Ihrem @@ -1259,7 +1242,7 @@ de_DE: vouchers: legend: Gutscheine voucher_code: Gutschein-Code - rate: Steuersatz + rate: Gutscheinwert label: Bezeichnung purpose: Zweck expiry: Gültigkeit @@ -1516,6 +1499,7 @@ de_DE: shared: attachment_field: logo_label: "Logo" + logo_hint: 300 x 300 Pixel logo_remove: "Bild löschen" logo_remove_confirm: "Das Logo wird sofort nach Ihrer Bestätigung gelöscht." promo_image_note1: 'BITTE BEACHTEN SIE:' @@ -3078,6 +3062,8 @@ de_DE: report_header_transaction_fee: Transaktionsgebühr (keine Steuern) report_header_total_untaxable_admin: Summe nicht steuerpflichtiger Admin-Anpassungen (keine Steuern) report_header_total_taxable_admin: Summe steuerpflichtiger Admin-Anpassungen (inkl. Steuern) + report_header_voucher_label: Gutschein-Code + report_header_voucher_amount: "Gutscheinwert" report_line_cost_of_produce: Produktkosten report_line_line_items: Einzelposten report_header_last_completed_order_date: Letzte Bestellung @@ -3795,6 +3781,7 @@ de_DE: logourl: "URL des Logos" are_you_sure_delete: "Möchten Sie diesen Datensatz wirklich löschen?" confirm_delete: "Löschen bestätigen" + voucher: "Gutschein" configurations: "Konfiguration" general_settings: "Allgemeine Einstellungen" site_name: "Name der Website" @@ -4248,6 +4235,7 @@ de_DE: product_name: Produktname primary_taxon_form: product_category: Produktkategorie + search_for_categories: "Lieferkategorie suchen" group_buy_form: group_buy: "Gruppenkauf aktivieren?" bulk_unit_size: Erforderliche Gesamtbestellmenge (in Gramm, Liter oder Stück) @@ -4500,13 +4488,10 @@ de_DE: webhook_endpoints: title: Webhook-Endpunkte description: Ereignisse im System können Webhooks zu externen Systemen auslösen. - event_types: - order_cycle_opened: Bestellzyklus eröffnet event_type: header: Ereignistyp url: header: Endpunkt-URL - create_placeholder: Geben Sie die URL des Remote-Webhook-Endpunkts ein developer_settings: title: Entwicklereinstellungen form: @@ -4654,3 +4639,8 @@ de_DE: add_tag_rule_modal: select_rule_type: "Wählen Sie einen Regelart aus:" add_rule: "Regel hinzufügen" + webhook_endpoint_form: + url: + create_placeholder: Geben Sie die URL des Remote-Webhook-Endpunkts ein + event_types: + order_cycle_opened: Bestellzyklus eröffnet diff --git a/config/locales/el.yml b/config/locales/el.yml index ba99a8ca40..b6cee813eb 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -106,27 +106,6 @@ el: blank: "δεν μπορεί να είναι κενό" too_short: "είναι πολύ σύντομο (το ελάχιστο είναι %{count} χαρακτήρες)" errors: - messages: - content_type_invalid: "περιέχει λανθασμένο τύπο περιεχομένου" - file_size_out_of_range: "μέγεθος %{file_size} δεν είναι εντός της απαιτούμενης εμβέλειας" - limit_out_of_range: "Ο συνολικός αριθμός βρίσκεται εκτός εύρους" - image_metadata_missing: "δεν είναι έγκυρη εικόνα" - dimension_min_inclusion: "πρέπει να είναι μεγαλύτερο η ίσο με %{width} x %{height} pixels." - dimension_max_inclusion: "πρέπει να είναι μικρότερο από ή ίσο με %{width} x %{height} pixels." - dimension_width_inclusion: "Το πλάτος δεν είναι μεταξύ %{min} και %{max} pixels." - dimension_height_inclusion: "Το ύψος δεν είναι μεταξύ %{min} και %{max} pixels. " - dimension_width_greater_than_or_equal_to: "Το πλάτος πρέπει να είναι μεγαλύτερο από η ίσο με %{length} pixels." - dimension_height_greater_than_or_equal_to: "Το ύψος πρέπει να είναι μεγαλύτερο από η ίσο με %{length} pixels." - dimension_width_less_than_or_equal_to: "Το πλάτος πρέπει να είναι μικρότερο από ή ίσο με %{length} pixels." - dimension_height_less_than_or_equal_to: "Το ύψος πρέπει να είναι μικρότερο από η ίσο με %{length} pixels." - dimension_width_equal_to: "Το πλάτος πρέπει να είναι ίσο με %{length} pixels." - dimension_height_equal_to: "Το ύψος πρέπει να είναι ίσο με %{length} pixels." - aspect_ratio_not_square: "πρέπει να είναι τετράγωνη εικόνα. " - aspect_ratio_not_portrait: "πρέπει να είναι εικόνα πορτρέτο. " - aspect_ratio_not_landscape: "πρέπει να είναι εικόνα τοπίου." - aspect_ratio_is_not: "πρέπει να έχει λόγο διαστάσεων %{aspect_ratio}" - aspect_ratio_unknown: "έχει άγνωστη αναλογία εμφάνισης (aspect ratio)." - image_not_processable: "δεν είναι έγκυρη εικόνα" not_found: title: "Η συγκεκριμένη σελίδα δεν υπάρχει (404) " message_html: "Παρακαλούμε προσπαθήστε ξανά

Πιθανόν να πρόκειται για προσωρινό σφάλμα. Παρακαλούμε επιστρέψτε στην προηγούμενη σελίδα ή πηγαίνετε πίσω στην Αρχική σελίδα και προσπαθήστε ξανά.

Επικοινωνήστε με την εξυπηρέτηση πελατών

Εάν το πρόβλημα παραμένει η επείγει, παρακαλούμε να μας ενημερώσετε. Βρείτε τα στοιχεία επικοινωνίας μας στο Open Food Network Local page.

Θα μας είναι απόλυτα χρήσιμο το να μας δώσετε όσες περισσότερες πληροφορίες γίνεται αναφορικά με τα στοιχεία της σελίδας που λείπουν.

" @@ -3798,6 +3777,7 @@ el: logourl: "Logourl" are_you_sure_delete: "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την εγγραφή;" confirm_delete: "Επιβεβαίωση διαγραφής" + voucher: "Κουπόνι" configurations: "Διαμορφώσεις" general_settings: "Γενικές Ρυθμίσεις" site_name: "Ονομα ιστοσελίδας" @@ -4513,11 +4493,8 @@ el: webhook_endpoints: title: Webhook Endpoints description: Συμβάντα στο σύστημα μπορεί να πυροδοτήσουν webhooks σε εξωτερικά συστήματα. - event_types: - order_cycle_opened: Ο Κύκλος παραγγελίας άνοιξε url: header: Endpoint URL - create_placeholder: Εισάγετε το URL απο το απομακρυσμένο webhook endpoint. developer_settings: title: Ρυθμίσεις Developer form: @@ -4665,6 +4642,11 @@ el: add_tag_rule_modal: select_rule_type: "Επιλέξτε έναν τύπο κανόνα:" add_rule: "Προσθήκη κανόνα" + webhook_endpoint_form: + url: + create_placeholder: Εισάγετε το URL απο το απομακρυσμένο webhook endpoint. + event_types: + order_cycle_opened: Ο Κύκλος παραγγελίας άνοιξε invisible_captcha: sentence_for_humans: "Παρακαλώ αφήστε κενό" timestamp_error_message: "Παρακαλώ δοκιμάστε ξανά σε 5 δευτερόλεπτα." diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index d5ed2d2d9e..d780597574 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -115,27 +115,6 @@ en_CA: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: - messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not within required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixels." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixels." - dimension_width_inclusion: "width is not between %{min} and %{max} pixels." - dimension_height_inclusion: "height is not between %{min} and %{max} pixels." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixels." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixels." - dimension_width_equal_to: "width must be equal to %{length} pixels." - dimension_height_equal_to: "height must be equal to %{length} pixels." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ration of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ration" - image_not_processable: "is not a valid image" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Homeand try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -4035,6 +4014,7 @@ en_CA: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" site_name: "Site Name" @@ -4760,13 +4740,10 @@ en_CA: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remove webhook endpoint developer_settings: title: Developer Settings form: @@ -4915,6 +4892,11 @@ en_CA: add_tag_rule_modal: select_rule_type: "Select a rule type:" add_rule: "Add Rule" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remove webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index 311fbcc706..bb30b94323 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -115,27 +115,6 @@ en_FR: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: - messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not between required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixel." - dimension_width_inclusion: "width is not included between %{min} and %{max} pixel." - dimension_height_inclusion: "height is not included between %{min} and %{max} pixel." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixel." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixel." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixel." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixel." - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "height must be equal to %{length} pixel." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ratio of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ratio" - image_not_processable: "is not a valid image" not_found: title: "The page you were looking for doesn't exist (404)" message_html: " Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

f the problem persists or is urgent, please tell us about it.

" @@ -4036,6 +4015,7 @@ en_FR: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" site_name: "Site Name" @@ -4761,13 +4741,10 @@ en_FR: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remote webhook endpoint developer_settings: title: Developer Settings form: @@ -4916,6 +4893,11 @@ en_FR: add_tag_rule_modal: select_rule_type: "Select a rule type:" add_rule: "Add Rule" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remote webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 90078da6df..7098767675 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -115,27 +115,6 @@ en_GB: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: - messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not between required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixel." - dimension_width_inclusion: "width is not included between %{min} and %{max} pixel." - dimension_height_inclusion: "height is not included between %{min} and %{max} pixel." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixel." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixel." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixel." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixel." - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "height must be equal to %{length} pixel." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ratio of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ratio" - image_not_processable: "is not a valid image" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -4037,6 +4016,7 @@ en_GB: logourl: "Logo url" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" site_name: "Site Name" @@ -4762,13 +4742,10 @@ en_GB: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remote webhook endpoint developer_settings: title: Developer Settings form: @@ -4916,6 +4893,11 @@ en_GB: add_tag_rule_modal: select_rule_type: "Select a rule type:" add_rule: "Add Rule" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remote webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/en_IE.yml b/config/locales/en_IE.yml index 559a5d894f..dfdbc10801 100644 --- a/config/locales/en_IE.yml +++ b/config/locales/en_IE.yml @@ -115,27 +115,6 @@ en_IE: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: - messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not between required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixel." - dimension_width_inclusion: "width is not included between %{min} and %{max} pixel." - dimension_height_inclusion: "height is not included between %{min} and %{max} pixel." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixel." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixel." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixel." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixel." - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "height must be equal to %{length} pixel." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ratio of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ratio" - image_not_processable: "is not a valid image" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -3900,6 +3879,7 @@ en_IE: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" site_name: "Site Name" @@ -4621,13 +4601,10 @@ en_IE: webhook_endpoints: title: Webhook Endpoints description: Events in the system may trigger webhooks to external systems. - event_types: - order_cycle_opened: Order Cycle Opened event_type: header: Event type url: header: Endpoint URL - create_placeholder: Enter the URL of the remote webhook endpoint developer_settings: title: Developer Settings form: @@ -4775,6 +4752,11 @@ en_IE: add_tag_rule_modal: select_rule_type: "Select a rule type:" add_rule: "Add Rule" + webhook_endpoint_form: + url: + create_placeholder: Enter the URL of the remote webhook endpoint + event_types: + order_cycle_opened: Order Cycle Opened invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index 29407e4c12..155f83be54 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -72,28 +72,6 @@ en_NZ: limited_stock_but_no_count_on_hand: "must be specified because forcing limited stock" messages: blank: "can't be blank" - errors: - messages: - content_type_invalid: "has an invalid content type" - file_size_out_of_range: "size %{file_size} is not between required range" - limit_out_of_range: "total number is out of range" - image_metadata_missing: "is not a valid image" - dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixel." - dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixel." - dimension_width_inclusion: "width is not included between %{min} and %{max} pixel." - dimension_height_inclusion: "height is not included between %{min} and %{max} pixel." - dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixel." - dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixel." - dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixel." - dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixel." - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "height must be equal to %{length} pixel." - aspect_ratio_not_square: "must be a square image" - aspect_ratio_not_portrait: "must be a portrait image" - aspect_ratio_not_landscape: "must be a landscape image" - aspect_ratio_is_not: "must have an aspect ratio of %{aspect_ratio}" - aspect_ratio_unknown: "has an unknown aspect ratio" - image_not_processable: "is not a valid image" stripe: error_code: incorrect_number: "The card number is incorrect." diff --git a/config/locales/es.yml b/config/locales/es.yml index c9b29726ae..54115f7441 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -115,27 +115,6 @@ es: blank: "no puede estar vacío" too_short: "es demasiado corto (el mínimo es %{count}caracteres)" errors: - messages: - content_type_invalid: "Tiene un tipo de contenido invalido" - file_size_out_of_range: "el tamaño %{file_size} no está en el rango requerido" - limit_out_of_range: "El número total está fuera de rango" - image_metadata_missing: "no es una imagen valida" - dimension_min_inclusion: "debe ser mayor o igual a %{width} x %{height} píxeles." - dimension_max_inclusion: "debe ser inferior o igual a %{width} x %{height} píxeles." - dimension_width_inclusion: "la anchura no se incluye entre %{min} y %{max} píxel." - dimension_height_inclusion: "la altura no se incluye entre %{min} y %{max} píxel." - dimension_width_greater_than_or_equal_to: "La anchura debe ser mayor o igual a %{length} píxeles." - dimension_height_greater_than_or_equal_to: "La altura debe ser mayor o igual que %{length} píxel." - dimension_width_less_than_or_equal_to: "La anchura debe ser menor o igual a %{length} píxeles." - dimension_height_less_than_or_equal_to: "La altura debe ser menor o igual a %{length} píxel." - dimension_width_equal_to: "La anchura debe ser igual a %{length} píxeles." - dimension_height_equal_to: "la altura debe ser igual a %{length} pixel." - aspect_ratio_not_square: "la imagen tiene que ser cuadrada" - aspect_ratio_not_portrait: "la imagen tiene que ser un retrato" - aspect_ratio_not_landscape: "debe ser una imagen de paisaje" - aspect_ratio_is_not: "debe tener una relación de aspecto de %{aspect_ratio}" - aspect_ratio_unknown: "tiene una relación de aspecto desconocida" - image_not_processable: "no es una imagen valida" not_found: title: "La página que estas buscando no existe (404)" message_html: "Por favor, inténtelo de nuevo

Esto puede ser un problema temporal. Haga clic en el botón Atrás para volver a la pantalla anterior o vuelva a Inicio e inténtelo de nuevo

. Póngase en contacto con el servicio de asistencia

Si el problema persiste o es urgente, comuníquenoslo. Encuentre nuestros datos de contacto en la página local de Open Food Network.

Nos será de gran ayuda que nos facilite todos los detalles posibles sobre el motivo de la página que falta.

" @@ -3892,6 +3871,7 @@ es: logourl: "URL del logo" are_you_sure_delete: "¿Está seguro de que desea eliminar este registro?" confirm_delete: "Confirmar la eliminación" + voucher: "Bono" configurations: "Configuraciones" general_settings: "Configuración general" site_name: "Nombre del sitio" @@ -4602,8 +4582,6 @@ es: title: API key webhook_endpoints: description: Los eventos del sistema pueden desencadenar webhooks a sistemas externos. - event_types: - order_cycle_opened: Ciclo de pedidos abierto developer_settings: title: Configuración de desarrollo form: @@ -4762,6 +4740,9 @@ es: add_tag_rule_modal: select_rule_type: "Selecciona un tipo de regla:" add_rule: "Añadir regla" + webhook_endpoint_form: + event_types: + order_cycle_opened: Ciclo de pedidos abierto invisible_captcha: sentence_for_humans: "Por favor, dejalo vacio" timestamp_error_message: "Por favor, inténtelo de nuevo después de 5 segundos." diff --git a/config/locales/es_CR.yml b/config/locales/es_CR.yml index d7774e2a9b..ec984f0bd9 100644 --- a/config/locales/es_CR.yml +++ b/config/locales/es_CR.yml @@ -72,28 +72,6 @@ es_CR: limited_stock_but_no_count_on_hand: "debe estar especificado porque se ha definido un inventario limitado" messages: blank: "no puede estar en blanco" - errors: - messages: - content_type_invalid: "tiene un tipo de contenido no válido" - file_size_out_of_range: "el tamaño %{file_size} no está entre el rango requerido" - limit_out_of_range: "el número total está fuera de rango" - image_metadata_missing: "no es una imagen valida" - dimension_min_inclusion: "debe ser mayor o igual a %{width}x %{height} píxel." - dimension_max_inclusion: "debe ser menor o igual a %{width} x %{height} píxel." - dimension_width_inclusion: "el ancho no está incluido entre %{min} y %{max} píxel." - dimension_height_inclusion: "la altura no está incluida entre %{min} y %{max} píxel." - dimension_width_greater_than_or_equal_to: "el ancho debe ser mayor o igual al %{length} píxel." - dimension_height_greater_than_or_equal_to: "la altura debe ser mayor o igual al %{length} píxel." - dimension_width_less_than_or_equal_to: "el ancho debe ser menor o igual al %{length} píxel." - dimension_height_less_than_or_equal_to: "la altura debe ser menor o igual al %{length} píxel." - dimension_width_equal_to: "el ancho debe ser igual al %{length} píxel." - dimension_height_equal_to: "la altura debe ser igual al %{length} píxel." - aspect_ratio_not_square: "debe ser una imagen cuadrada" - aspect_ratio_not_portrait: "debe ser una imagen de retrato" - aspect_ratio_not_landscape: "debe ser una imagen de paisaje" - aspect_ratio_is_not: "debe tener una relación de aspecto de %{aspect_ratio}" - aspect_ratio_unknown: "tiene una relación de aspecto desconocida" - image_not_processable: "no es una imagen valida" stripe: error_code: incorrect_number: "El número de tarjeta es incorrecto." diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 9ac4443536..c51593ad68 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -111,27 +111,6 @@ eu: blank: "ezin da hutsik egon" too_short: "laburregia da (gutxienekoa %{count} karaktere da)" errors: - messages: - content_type_invalid: "Eduki-mota baliogabea du" - file_size_out_of_range: " %{file_size} tamaina ez dago eskatutako barrutian" - limit_out_of_range: "Guztizko kopurua tartetik kanpo dago" - image_metadata_missing: "ez da irudi balioduna" - dimension_min_inclusion: " %{width} x %{height} pixelen adinakoa edo handiagoa izan behar du." - dimension_max_inclusion: " %{width} x %{height} pixelak baino txikiagoa edo berdina izan behar du." - dimension_width_inclusion: "zabalera ez da sartzen %{min} eta %{max} pixelen artean." - dimension_height_inclusion: "altuera ez da sartzen %{min} eta %{max} pixelen artean." - dimension_width_greater_than_or_equal_to: "Zabalerak %{length} pixelekoa edo handiagoa izan behar du." - dimension_height_greater_than_or_equal_to: "Altuerak %{length} pixela baino handiagoa edo berdina izan behar du." - dimension_width_less_than_or_equal_to: "Zabalerak %{length} pixelekoa edo txikiagoa izan behar du." - dimension_height_less_than_or_equal_to: "Altuerak %{length} pixela edo txikiagoa izan behar du." - dimension_width_equal_to: "Zabalerak %{length} pixelen berdina izan behar du." - dimension_height_equal_to: "altuerak %{length} pixel izan behar du." - aspect_ratio_not_square: "irudiak karratua izan behar du" - aspect_ratio_not_portrait: "irudiak erretratua izan behar du" - aspect_ratio_not_landscape: "paisaiaren irudia izan behar du" - aspect_ratio_is_not: " %{aspect_ratio} itxura-erlazioa izan behar du" - aspect_ratio_unknown: "itxura ezezaguneko harremana du" - image_not_processable: "ez da irudi balioduna" not_found: title: "Bilatzen ari zaren orrialdea ez da existitzen (404)" message_html: "Mesedez, saiatu berriro Hau denbora arazo bat izan daiteke.

Egin klik Atzera botoian aurreko pantailara itzultzeko edo itzuli Hasiera botoira eta saiatu berriro. Jarri harremanetan laguntza-zerbitzuarekin Arazoak jarraitzen badu edo premiazkoa bada, jakinaraz iezaguzu.

Aurkitu gure harremanetarako datuak Open Food Network-en tokiko orrian.

Oso lagungarria izango zaigu falta den orriaren arrazoiari buruzko xehetasun posible guztiak ematea.

" @@ -3687,6 +3666,7 @@ eu: logourl: "Logoaren URLa" are_you_sure_delete: "Ziur zaude erregistro hau ezabatu nahi duzula?" confirm_delete: "Ezeztapena baieztatu" + voucher: "Bonoa" configurations: "Konfigurazioak" general_settings: "Konfigurazio orokorra" site_name: "Gunearen izena" @@ -4376,8 +4356,6 @@ eu: regenerate_key: "Giltza birsortu" webhook_endpoints: description: Sistemaren gertaerek webhook-ak eragin diezazkiekete kanpoko sistemei. - event_types: - order_cycle_opened: Eskaera-ziklo irekia developer_settings: title: Garapenaren konfigurazioa form: @@ -4484,6 +4462,9 @@ eu: add_tag_rule_modal: select_rule_type: "Hautatu erregela mota bat:" add_rule: "Erregela gehitu" + webhook_endpoint_form: + event_types: + order_cycle_opened: Eskaera-ziklo irekia invisible_captcha: sentence_for_humans: "Mesedez, utzi hutsik" timestamp_error_message: "Mesedez, saia zaitez berriro 5 segundoren ondoren." diff --git a/config/locales/fi.yml b/config/locales/fi.yml index f6747bebf7..72505b6c46 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -115,27 +115,6 @@ fi: blank: "ei voi olla tyhjä" too_short: "on liian lyhyt (vähintään %{count} merkkiä)" errors: - messages: - content_type_invalid: "sisältötyyppi on virheellinen" - file_size_out_of_range: "koko %{file_size} ei ole vaaditulla välillä" - limit_out_of_range: "kokonaismäärä on sallitun alueen ulkopuolella" - image_metadata_missing: "ei ole kelvollinen kuva" - dimension_min_inclusion: "täytyy olla vähintään %{width} x %{height} pikseliä." - dimension_max_inclusion: "täytyy olla enintään %{width} x %{height} pikseliä." - dimension_width_inclusion: "leveys ei ole välillä %{min} ja %{max} pikseliä." - dimension_height_inclusion: "korkeus ei ole välillä %{min} ja %{max} pikseliä." - dimension_width_greater_than_or_equal_to: "leveyden täytyy olla vähintään %{length} pikseliä." - dimension_height_greater_than_or_equal_to: "korkeuden täytyy olla vähintään %{length} pikseliä." - dimension_width_less_than_or_equal_to: "leveyden täytyy olla enintään %{length} pikseliä." - dimension_height_less_than_or_equal_to: "korkeuden täytyy olla enintään %{length} pikseliä." - dimension_width_equal_to: "leveyden täytyy olla %{length} pikseliä." - dimension_height_equal_to: "korkeuden täytyy olla %{length} pikseliä." - aspect_ratio_not_square: "täytyy olla neliömäinen kuva" - aspect_ratio_not_portrait: "täytyy olla pystysuuntainen kuva" - aspect_ratio_not_landscape: "täytyy olla vaakasuuntainen kuva" - aspect_ratio_is_not: "täytyy olla kuvasuhde %{aspect_ratio}" - aspect_ratio_unknown: "on tuntematon kuvasuhde" - image_not_processable: "ei ole kelvollinen kuva" not_found: title: "Etsimääsi sivua ei löytynyt (404)" message_html: "Yritä uudelleen

Tämä voi olla tilapäinen ongelma. Palaa edelliselle sivulle tai etusivulle ja yritä uudelleen.

Ota yhteyttä tukeen

Jos ongelma jatkuu tai on kiireellinen, kerro siitä meille. Löydä yhteystiedot globaalilta Open Food Network Local -sivulta.

Autat meitä paljon, jos annat mahdollisimman paljon yksityiskohtia puuttuvasta sivusta.

" @@ -4014,6 +3993,7 @@ fi: logourl: "Logourl" are_you_sure_delete: "Haluatko varmasti poistaa tämän tietueen?" confirm_delete: "Vahvista poisto" + voucher: "Alennuskuponki" configurations: "Asetukset" general_settings: "Yleiset asetukset" site_name: "Sivuston nimi" @@ -4739,13 +4719,10 @@ fi: webhook_endpoints: title: Webhook-päätepisteet description: Järjestelmän tapahtumat voivat laukaista webhookeja ulkoisiin järjestelmiin. - event_types: - order_cycle_opened: Tilausjakso avattu event_type: header: Tapahtuman tyyppi url: header: Päätepisteen URL-osoite - create_placeholder: Anna etäwebhook-päätepisteen URL-osoite developer_settings: title: Kehittäjäasetukset form: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 49c3475e13..1f70a5397c 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -115,27 +115,6 @@ fr: blank: "Champ obligatoire" too_short: "est trop court (minimum %{count} caractère)" errors: - messages: - content_type_invalid: "a un contenu invalide" - file_size_out_of_range: "la taille %{file_size} n'est pas dans la fourchette requise" - limit_out_of_range: "le nombre total est hors de la fourchette" - image_metadata_missing: "n'est pas une image valide" - dimension_min_inclusion: "doit être plus grand ou égal à %{width} x %{height} pixel." - dimension_max_inclusion: "doit être plus petit our égal à %{width} x %{height} pixel." - dimension_width_inclusion: "la largeur n'est pas comprise entre %{min} et %{max} pixel." - dimension_height_inclusion: "la hauteur n'est pas comprise entre %{min} et %{max} pixel." - dimension_width_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixel." - dimension_height_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixel." - dimension_width_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixel." - dimension_height_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixel." - dimension_width_equal_to: "la largeur doit être égale à %{length} pixel." - dimension_height_equal_to: "la hauteur doit être égale à %{length} pixel." - aspect_ratio_not_square: "doit être une image carrée" - aspect_ratio_not_portrait: "doit être une image en mode portrait" - aspect_ratio_not_landscape: "doit être une image en mode paysage" - aspect_ratio_is_not: "doit avoir un rapport d'aspect de %{aspect_ratio}" - aspect_ratio_unknown: "a un rapport d'aspect inconnu" - image_not_processable: "n'est pas une image valide" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: " Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez.

Contacter notre support

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -4104,6 +4083,7 @@ fr: logourl: "URL logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + voucher: "Bon de réduction" configurations: "Configurations" general_settings: "Configurations générales" site_name: "Nom du site" @@ -4830,13 +4810,10 @@ fr: webhook_endpoints: title: 'Webhook ' description: Les événements dans le système peuvent déclencher des webhooks vers des systèmes externes. - event_types: - order_cycle_opened: Cycle de vente ouvert event_type: header: Type d'évènement url: header: URL du point de terminaison - create_placeholder: Entrez l'URL du point de terminaison du webhook developer_settings: title: Paramètres développeurs form: @@ -4998,6 +4975,11 @@ fr: add_tag_rule_modal: select_rule_type: "Choisir le type de règle:" add_rule: "Valider" + webhook_endpoint_form: + url: + create_placeholder: Entrez l'URL du point de terminaison du webhook + event_types: + order_cycle_opened: Cycle de vente ouvert invisible_captcha: sentence_for_humans: "Merci de laisser ce champ libre" timestamp_error_message: "S'il vous plaît réessayez après 5 secondes." diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index bb751f227b..320e2bfd12 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -108,27 +108,6 @@ fr_BE: blank: "Champ obligatoire" too_short: "est trop court (le minimum est %{count} caractères)" errors: - messages: - content_type_invalid: "a un type de contenu non valide" - file_size_out_of_range: "la taille %{file_size} n'est pas comprise dans la plage requise" - limit_out_of_range: "le nombre total est hors plage" - image_metadata_missing: "n'est pas une image valide" - dimension_min_inclusion: "doit être supérieur ou égal à %{width} x %{height} pixel." - dimension_max_inclusion: "doit être inférieur ou égal à %{width} x %{height} pixel." - dimension_width_inclusion: "la largeur n'est pas incluse entre les pixels %{min} et %{max} ." - dimension_height_inclusion: "la hauteur n'est pas incluse entre %{min} et %{max} pixel." - dimension_width_greater_than_or_equal_to: "la largeur doit être supérieure ou égale au pixel %{length} ." - dimension_height_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale au pixel %{length} ." - dimension_width_less_than_or_equal_to: "la largeur doit être inférieure ou égale au pixel %{length} ." - dimension_height_less_than_or_equal_to: "la hauteur doit être inférieure ou égale au pixel %{length} ." - dimension_width_equal_to: "la largeur doit être égale au pixel %{length} ." - dimension_height_equal_to: "la hauteur doit être égale au pixel %{length} ." - aspect_ratio_not_square: "doit être une image carrée" - aspect_ratio_not_portrait: "doit être une image en format portrait" - aspect_ratio_not_landscape: "doit être une image en format paysage" - aspect_ratio_is_not: "doit avoir un rapport hauteur / largeur de %{aspect_ratio}" - aspect_ratio_unknown: "a un rapport hauteur/largeur inconnu" - image_not_processable: "n'est pas une image valide" not_found: title: "La page que vous cherchiez n'existe pas (404)" message_html: "Veuillez réessayer

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton Précédent pour revenir à l'écran précédent ou revenir à l'accueil et réessayer.

Contactez le support

Si le problème persiste ou est urgent, veuillez nous en informer. Retrouvez nos coordonnées sur la page locale mondiale d’Open Food Network .

Cela nous aide vraiment si vous pouvez donner autant de détails que possible sur le sujet de la page manquante.

" @@ -231,6 +210,8 @@ fr_BE: community_forum_url: "Lien vers le forum communautaire" customer_instructions: "Précisions pour la personne qui achète" additional_information: "Information complémentaire" + connect_app: + url: "https://n8n.openfoodnetwork.org/webhook/regen/connect-enterprise" devise: passwords: spree_user: @@ -268,16 +249,28 @@ fr_BE: updated: "Votre mot de passe a été changé avec succès. Vous êtes à présent connecté." send_instructions: "Un email a été envoyé avec des instructions pour confirmer votre adresse email. Vérifiez votre boite mail!" item_description: "Description de l'article" + menu_1_icon_name: "Nom de l'icône du menu 1" + menu_2_icon_name: "Nom de l'icône du menu 2" + menu_3_icon_name: "Nom de l'icône du menu 3" + menu_4_icon_name: "Nom de l'icône du menu 4" + menu_5_icon_name: "Nom de l'icône du menu 5" + menu_6_icon_name: "Nom de l'icône du menu 6" + menu_7_icon_name: "Nom de l'icône du menu 7" models: order_cycle: cloned_order_cycle_name: "Copie de %{order_cycle}" tax_rate: included_in_price: "Inclus dans le prix" open_street_map_enabled: "Open Street Map activé" + open_street_map_default_latitude: "Latitude par défaut Open Street Map" + open_street_map_default_longitude: "Longitude par défaut Open Street Map" + open_street_map_provider_name: "Nom du fournisseur Open Street Map" + open_street_map_provider_options: "Options du fournisseur Open Street Map" resume_order: "Reprendre la commande" sku: "Référence produit" subtotal: "Sous-total" tax_rate: "TVA applicable" + producer_mail_qty: Qté validators: date_time_string_validator: not_string_error: "doit être une chaîne" @@ -299,6 +292,7 @@ fr_BE: stock: "Stock" product: "Produit" backorder_incomplete: + headline: "Votre commande fournisseur n'est pas terminée" hints: | Il se peut que vous deviez aller dans les paramètres du cycle de vente et reconnecter votre compte. Vérifiez également que le catalogue de votre fournisseur n'a pas changé et qu'il fournit @@ -485,7 +479,11 @@ fr_BE: payment_could_not_complete: "Le paiement n'a pas pu être finalisé" vine_voucher_validator_service: errors: + vine_api: "Il y a eu une erreur de communication avec l'API, merci de réessayer." invalid_voucher: "Le bon de réduction n'est pas valide." + vine_voucher_redeemer_service: + errors: + vine_api: "Il y a eu une erreur de communication avec l'API" actions: create_and_add_another: "Créer et ajouter un nouveau" create: "Créer" @@ -730,6 +728,8 @@ fr_BE: one: "1 sélectionné" import: Importer invalid_url: L'URL de ce catalogue n'est pas valide. + import: + title: "Import du catalogue produit DFC" enterprise_fees: index: title: "Marges et Commissions" @@ -811,9 +811,12 @@ fr_BE: filters: search_products: Rechercher des produits search_for_producers: Rechercher des producteurs + select_producer: Sélectionner producteur all_producers: Tous les producteurs search_for_categories: Rechercher des catégories + select_category: Sélectionner catégorie all_categories: Toutes catégories + select_tag: Choisir le tag producers: label: Producteur·trice·s categories: @@ -856,6 +859,9 @@ fr_BE: delete_product: success: Le produit a bien été supprimé error: Le produit n'a pas pu être supprimé + delete_variant: + success: La variante a bien été supprimée + error: La variante n'a pas pu être supprimée variant_row: none_tax_category: Aucun search_for_tax_categories: "Rechercher des catégories de taxes" @@ -909,6 +915,9 @@ fr_BE: tax_categories: TVA applicable shipping_categories: Condition de transport dfc_import_form: + title: "Importer depuis le catalogue DFC" + enterprise: "Créer les produits pour l'entreprise" + catalog_url: "URL du catalogue DFC" preview: Aperçu import: review: Vérifier @@ -1037,6 +1046,9 @@ fr_BE: variants_without_unit_value: "ATTENTION: certaines variantes n'ont pas de nombre d'unités" all: "Tous" select_variant: "Choisir une variante" + note: + note_label: "Note :" + no_note_present: "Aucune note n'a été ajoutée." enterprise: select_outgoing_oc_products_from: Sélectionner les produits sortants pour le cycle de vente parmi enterprises: @@ -1146,6 +1158,7 @@ fr_BE: own: Les miens sells: Produits vendus sells_tip: "Aucun - l'entreprise ne vend pas en direct aux acheteurs.
Les miens - l'entreprise vend ses propres produits aux acheteurs.
Tous - l'entreprise vend ses propres produits et/ou les produits d'autres entreprises.
" + external_billing_id_placeholder: 'ex : INV-2024-123456' visible_in_search: Apparaît sur la plateforme? visible_in_search_tip: "Les profils peuvent être 1 1. Visibles publiquement, sur la carte et la liste des comptoirs. 2 2. Invisibles sur la carte et la liste des comptoirs, mais référencées sur les profils des comptoirs et producteurs de leur réseau. 3 3. Complètement invisibles (sauf si on dispose du lien)." visible: Visible par tous @@ -1190,6 +1203,7 @@ fr_BE: enable_subscriptions_true: "Activé" customer_names_in_reports: "Nom de client dans le rapport" customer_names_tip: "Autoriser vos fourniseurs à voir les noms des clients dans le rapport " + producers_to_edit_orders: "Possibilité pour les producteurs de modifier les commandes" customer_names_false: "Désactivé" customer_names_true: "Activé" customer_contacts_tip: "Autoriser vos fournisseurs de voir l'adresse mail et le téléphone des clients dans les rapports" @@ -3532,6 +3546,7 @@ fr_BE: indent: "Augmenter d'un niveau" italic: "Italique" link: "Lien" + numbers: "Nombres" outdent: "Diminuer d'un niveau" quote: "Citation" redo: "Refaire" @@ -3553,6 +3568,10 @@ fr_BE: one: "caisse" many: "caisses" other: "caisses" + box: + one: "boîte" + many: "boîtes" + other: "boîtes" bottle: one: "bouteille" many: "bouteilles" @@ -3754,6 +3773,7 @@ fr_BE: logourl: "Url logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + voucher: "Bon d'achat" configurations: "Configurations" general_settings: "Réglages Généraux" site_name: "Nom du site" @@ -4033,6 +4053,9 @@ fr_BE: payment_method: "Mode de paiement" payment_state: "Statut du paiement" amount: "Quantité" + note: + note_label: "Note :" + no_note_present: "Aucune note n'a été ajoutée." form: distribution_fields: title: "Distribution" diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index f2bf5d317d..2d748df53f 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -115,27 +115,6 @@ fr_CA: blank: "Champ obligatoire" too_short: "est trop court (minimum %{count} caractère)" errors: - messages: - content_type_invalid: "a un contenu invalide" - file_size_out_of_range: "la taille %{file_size} n'est pas dans la fourchette requise" - limit_out_of_range: "le nombre total est hors de la fourchette" - image_metadata_missing: "n'est pas une image valide" - dimension_min_inclusion: "doit être plus grand ou égal à %{width} x %{height} pixel." - dimension_max_inclusion: "doit être plus grand ou égal à %{width} x %{height} pixel." - dimension_width_inclusion: "la largeur n'est pas comprise entre %{min} et %{max} pixel." - dimension_height_inclusion: "la hauteur n'est pas comprise entre %{min} et %{max} pixel." - dimension_width_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixel." - dimension_height_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixel." - dimension_width_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixel." - dimension_height_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixel." - dimension_width_equal_to: "la largeur doit être égale à %{length} pixel." - dimension_height_equal_to: "la hauteur doit être égale à %{length} pixel. " - aspect_ratio_not_square: "doit être une image carrée" - aspect_ratio_not_portrait: "doit être une image en mode portrait" - aspect_ratio_not_landscape: "doit être une image en mode paysage" - aspect_ratio_is_not: "doit avoir un rapport d'aspect de %{aspect_ratio}" - aspect_ratio_unknown: "a un rapport d'aspect inconnu" - image_not_processable: "n'est pas une image valide" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: "Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez. Contacter notre support 

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -4091,6 +4070,7 @@ fr_CA: logourl: "URL du logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + voucher: "Bon de réduction" configurations: "Configurations" general_settings: "Configurations générales" site_name: "Nom du site" @@ -4817,13 +4797,10 @@ fr_CA: webhook_endpoints: title: 'Webhook ' description: Les événements dans le système peuvent déclencher des webhooks vers des systèmes externes. - event_types: - order_cycle_opened: Cycle de vente ouvert event_type: header: Type d'évènement url: header: URL du point de terminaison - create_placeholder: Entrez l'URL du point de terminaison du webhook developer_settings: title: Paramètres développeurs form: @@ -4985,6 +4962,11 @@ fr_CA: add_tag_rule_modal: select_rule_type: "Choisir le type de règle:" add_rule: "Ajouter une règle" + webhook_endpoint_form: + url: + create_placeholder: Entrez l'URL du point de terminaison du webhook + event_types: + order_cycle_opened: Cycle de vente ouvert invisible_captcha: sentence_for_humans: "Merci de laisser ce champ libre" timestamp_error_message: "S'il vous plaît réessayez après 5 secondes." diff --git a/config/locales/fr_CH.yml b/config/locales/fr_CH.yml index 81263cc94d..31e955e50b 100644 --- a/config/locales/fr_CH.yml +++ b/config/locales/fr_CH.yml @@ -75,28 +75,6 @@ fr_CH: limited_stock_but_no_count_on_hand: "doit être spécifié car pas \"à volonté\"" messages: blank: "Champ obligatoire" - errors: - messages: - content_type_invalid: "a un contenu invalide" - file_size_out_of_range: "la taille %{file_size} n'est pas dans la fourchette requise" - limit_out_of_range: "le nombre total est hors de la fourchette" - image_metadata_missing: "n'est pas une image valide" - dimension_min_inclusion: "doit être plus grand ou égal à %{width} x %{height} pixel." - dimension_max_inclusion: "doit être plus petit ou égal à %{width} x %{height} pixel." - dimension_width_inclusion: "la largeur n'est pas comprise entre %{min} et %{max} pixel." - dimension_height_inclusion: "la hauteur n'est pas comprise entre %{min} et %{max} pixel." - dimension_width_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixel." - dimension_height_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixel." - dimension_width_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixel." - dimension_height_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixel." - dimension_width_equal_to: "la largeur doit être égale à %{length} pixel." - dimension_height_equal_to: "la hauteur doit être égale à %{length} pixel." - aspect_ratio_not_square: "doit être une image carrée" - aspect_ratio_not_portrait: "doit être une image en mode portrait" - aspect_ratio_not_landscape: "doit être une image en mode paysage" - aspect_ratio_is_not: "doit avoir un rapport d'aspect de %{aspect_ratio}" - aspect_ratio_unknown: "a un rapport d'aspect inconnu" - image_not_processable: "n'est pas une image valide" stripe: error_code: incorrect_number: "Le numéro de carte bancaire est incorrect." diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 54e849a4a1..092365b018 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -105,27 +105,6 @@ hi: blank: "खाली नहीं हो सकता" too_short: "बहुत छोटा है (न्यूनतम %{count} वर्ण है)" errors: - messages: - content_type_invalid: "में एक अमान्य कंटेन्ट प्रकार है" - file_size_out_of_range: "आकार %{file_size} आवश्यक सीमा के बीच नहीं है" - limit_out_of_range: "कुल संख्या सीमा से बाहर है" - image_metadata_missing: "मान्य छवि नहीं है" - dimension_min_inclusion: "%{width} x %{height} पिक्सेल से बड़ा या बराबर होना चाहिए" - dimension_max_inclusion: "%{width} x %{height} पिक्सेल से कम या बराबर होना चाहिए" - dimension_width_inclusion: "चौड़ाई %{min} और %{max} पिक्सेल के बीच में शामिल नहीं है" - dimension_height_inclusion: "%{min} और %{max} पिक्सल के बीच ऊंचाई शामिल नहीं है।" - dimension_width_greater_than_or_equal_to: "चौड़ाई %{length} पिक्सल से ज्यादा या उसके बराबर होनी चाहिए।" - dimension_height_greater_than_or_equal_to: "ऊंचाई %{length} पिक्सल से ज्यादा या उसके बराबर होनी चाहिए।" - dimension_width_less_than_or_equal_to: "चौड़ाई %{length} पिक्सल से कम या उसके बराबर होनी चाहिए।" - dimension_height_less_than_or_equal_to: "ऊंचाई %{length} पिक्सल से कम या उसके बराबर होनी चाहिए।" - dimension_width_equal_to: "चौड़ाई %{length} पिक्सल के बराबर होनी चाहिए।" - dimension_height_equal_to: "ऊंचाई %{length} पिक्सल के बराबर होनी चाहिए।" - aspect_ratio_not_square: "चौकोर इमेज होनी चाहिए" - aspect_ratio_not_portrait: "पोर्ट्रेट इमेज होनी चाहिए" - aspect_ratio_not_landscape: "लैंडस्केप इमेज होनी चाहिए" - aspect_ratio_is_not: "का आस्पेक्ट रेशियो %{aspect_ratio} होना चाहिए" - aspect_ratio_unknown: "इसका एक अज्ञात आस्पेक्ट रेशियो है" - image_not_processable: "मान्य छवि नहीं है" not_found: title: "जिस पेज को आप खोज रहे थे वह मौजूद नहीं है (404)" message_html: "कृपया फिर से कोशिश करें

यह एक अस्थायी समस्या हो सकती है। कृपया पिछली स्क्रीन पर रिटर्न के लिए वापस जाएं बटन पर क्लिक करें या होम पर वापस जाएं और फिर से कोशिश करें।

समर्थन से संपर्क करें

यदि समस्या बनी रहती है या अत्यावश्यक है, तो कृपया हमें इसके बारे में बताएं। वैश्विक Open Food Network लोकल पेजसे हमारे संपर्क विवरण प्राप्त करें।

अगर आप गुम हुए पेज के बारे में जितना संभव हो उतना विवरण दे सकते हैं, तो यह वास्तव में हमारी मदद करता है।

" @@ -3722,6 +3701,7 @@ hi: logourl: "लॉग-आउट करें" are_you_sure_delete: "क्या आप वाकई इस रिकॉर्ड को मिटाना चाहते हैं?" confirm_delete: "हटाने की पुष्टि करें" + voucher: "वाउचर" configurations: "कॉन्फ़िगरेशन करें" general_settings: "सामान्य सेटिंग" site_name: "साइट का नाम" @@ -4411,13 +4391,10 @@ hi: webhook_endpoints: title: Webhook एंडपॉइंट्स description: सिस्टम में होने वाले इवेंट्स webhook को बाहरी सिस्टम में ट्रिगर कर सकती हैं। - event_types: - order_cycle_opened: ऑर्डर साइकल खोला गया event_type: header: इवेंट प्रकार url: header: एंडपॉइंट URL - create_placeholder: रिमोट webhook एंडपॉइंट का URL एंटर करें developer_settings: title: डेवलपर सेटिंग form: @@ -4565,3 +4542,8 @@ hi: add_tag_rule_modal: select_rule_type: "नियम का प्रकार चुनें:" add_rule: "नियम जोड़ें" + webhook_endpoint_form: + url: + create_placeholder: रिमोट webhook एंडपॉइंट का URL एंटर करें + event_types: + order_cycle_opened: ऑर्डर साइकल खोला गया diff --git a/config/locales/hu.yml b/config/locales/hu.yml index bf5f80167f..e1908a1b36 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -115,27 +115,6 @@ hu: blank: "nem lehet üres" too_short: "túl rövid (minimum %{count}karakter)" errors: - messages: - content_type_invalid: "érvénytelen tartalom típus" - file_size_out_of_range: "a %{file_size} mérete nem esik bele a kívánt tartományba" - limit_out_of_range: "az összmenyiség kívül esik a megengedett tartományon" - image_metadata_missing: "nem használható kép" - dimension_min_inclusion: "legyen nagyobb vagy egyenlő %{width} x %{height} pixel" - dimension_max_inclusion: "legyen kisebb vagy egyenlő %{width} x %{height} pixel" - dimension_width_inclusion: "a szélesség nincs %{min} és %{max} pixel közt" - dimension_height_inclusion: "magasság nincs %{min} és %{max} pixel között" - dimension_width_greater_than_or_equal_to: "a szélesség legyen nagyobb vagy egyenlő %{length} pixel" - dimension_height_greater_than_or_equal_to: "a magasság legyen nagyobb vagy egyenlő %{length} pixel" - dimension_width_less_than_or_equal_to: "a szélesség legyen kisebb vagy egyenlő %{length} pixel" - dimension_height_less_than_or_equal_to: "a magasság legyen kisebb vagy egyenlő %{length} pixel" - dimension_width_equal_to: "a szélesség legyen egyenlő %{length} pixel" - dimension_height_equal_to: "a magasság legyen egyenlő %{length} pixel" - aspect_ratio_not_square: "négyzet alakú képnek kell lennie" - aspect_ratio_not_portrait: "portré képnek kell lennie" - aspect_ratio_not_landscape: "fekvő tájolású kép legyen" - aspect_ratio_is_not: "%{aspect_ratio} arányú legyen" - aspect_ratio_unknown: "ismeretlen arány" - image_not_processable: "nem használható kép" not_found: title: "A keresett oldal nem található! (404)" message_html: "Kérjük, próbáld újra!

Ez lehet egy átmeneti probléma. Kattints a vissza gombra, hogy visszatérj az előző képernyőre, vagy menj vissza a(z) Kezdőlapra és próbáld újra.

Fordulj az Ügyfélszolgálathoz.

Ha a probléma továbbra is fennáll, vagy sürgős, kérjük, értesíts minket róla. Elérhetőségeinket a globális Open Food Network helyi oldalán találod.

Nagy segítség, ha minél több részletet meg tudsz adni a nem található oldalról.

" @@ -3930,6 +3909,7 @@ hu: logourl: "Logourl" are_you_sure_delete: "Biztosan törli ezt a rekordot?" confirm_delete: "Törlés megerősítése" + voucher: "Kupon" configurations: "Konfigurációk" general_settings: "Általános beállítások" site_name: "Webhely neve" @@ -4654,13 +4634,10 @@ hu: webhook_endpoints: title: Webhook végpontok description: A rendszerben bekövetkező események webhookokat indíthatnak külső rendszerek felé. - event_types: - order_cycle_opened: Rendelési ciklus megnyitva event_type: header: Esemény típusa url: header: Végpont URL - create_placeholder: Add meg a távoli webhook végpont URL-címét developer_settings: title: Fejlesztői beállítások form: @@ -4809,6 +4786,11 @@ hu: add_tag_rule_modal: select_rule_type: "Válassz egy szabálytípust:" add_rule: "Szabály hozzáadása" + webhook_endpoint_form: + url: + create_placeholder: Add meg a távoli webhook végpont URL-címét + event_types: + order_cycle_opened: Rendelési ciklus megnyitva invisible_captcha: sentence_for_humans: "Kérjük, hagyd üresen" timestamp_error_message: "Kérjük, próbáld meg 5 másodperc múlva." diff --git a/config/locales/it.yml b/config/locales/it.yml index a6e5769570..7ae2dab7ce 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -87,27 +87,6 @@ it: messages: blank: "non può essere lasciato vuoto" errors: - messages: - content_type_invalid: "tipo di contenuto non valido" - file_size_out_of_range: "la dimensione %{file_size} non rientra nell'intervallo richiesto" - limit_out_of_range: "numero totale fuori intervallo" - image_metadata_missing: "immagine non valida" - dimension_min_inclusion: "deve essere maggiore o uguale a %{width} x %{height} pixel." - dimension_max_inclusion: "deve essere minore o uguale a %{width} x %{height} pixel." - dimension_width_inclusion: "la larghezza non è inclusa tra %{min} e %{max} pixel." - dimension_height_inclusion: "l'altezza non è inclusa tra %{min} e %{max} pixel." - dimension_width_greater_than_or_equal_to: "la larghezza deve essere maggiore o uguale a %{length} pixel." - dimension_height_greater_than_or_equal_to: "l'altezza deve essere maggiore o uguale a %{length} pixel." - dimension_width_less_than_or_equal_to: "la larghezza deve essere minore o uguale a %{length} pixel." - dimension_height_less_than_or_equal_to: "l'altezza deve essere minore o uguale a %{length} pixel." - dimension_width_equal_to: "la larghezza deve essere uguale a %{length} pixel." - dimension_height_equal_to: "l'altezza deve essere uguale a %{length} pixel." - aspect_ratio_not_square: "deve essere un'immagine quadrata" - aspect_ratio_not_portrait: "deve essere un ritratto" - aspect_ratio_not_landscape: "deve essere un paesaggio" - aspect_ratio_is_not: "deve avere propozioni di %{aspect_ratio}" - aspect_ratio_unknown: "ha proporzioni sconosciute" - image_not_processable: "immagine non valida" not_found: title: "La pagina che stai cercando non esiste (404)" message_html: "Per favore riprova

Questo potrebbe essere un problema temporaneo. Per favore clicca il pulsante \"Indietro\" per tornare alla schermata precedente o alla Home e prova ancora.

Contatta il supporto

Se il problema persiste o è urgente, per favore segnalacelo. Trova i nostri dettagli di contatto su pagina Open Food Network Locale.

Ci aiuterebbe molto se ci fornissi più dettagli possibili circa la pagina mancante.

" diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 90acb904d2..4f32b2f92e 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -70,28 +70,6 @@ ko: limited_stock_but_no_count_on_hand: "한정된 재고 사항에 따라 명시되어야 합니다." messages: blank: "빈칸이 될 수 없습니다." - errors: - messages: - content_type_invalid: "사용 불가한 컨텐츠 타입입니다." - file_size_out_of_range: "%{file_size}의 크기는 요구된 범위에 있지 않습니다." - limit_out_of_range: "총합이 범위를 넘어섭니다." - image_metadata_missing: "가능한 이미지 파일이 아닙니다." - dimension_min_inclusion: "%{width} x %{height} 픽셀보다 크거나 같아야 합니다." - dimension_max_inclusion: "%{width} x %{height} 픽셀보다 작거나 같아야 합니다." - dimension_width_inclusion: "가로의 길이가 %{min} 과 %{max} 픽셀 사이에 있지 않습니다." - dimension_height_inclusion: "세로이 길이가 %{min} 과%{max} 픽셀 사이에 있지 않습니다." - dimension_width_greater_than_or_equal_to: "가로의 길이는%{length} 픽셀보다 크거나 같아야 합니다." - dimension_height_greater_than_or_equal_to: "세로의 길이는 %{length} 픽셀보다 크거나 같아야 합니다." - dimension_width_less_than_or_equal_to: "가로의 길이는 %{length} 픽셀보다 작거나 같아야 합니다." - dimension_height_less_than_or_equal_to: "세로의 길이는 %{length} 픽셀보다 작거나 같아야 합니다." - dimension_width_equal_to: "가로의 길이는 %{length} 픽셀이어야 합니다." - dimension_height_equal_to: "세로의 길이는 %{length} 픽셀이어야 합니다." - aspect_ratio_not_square: "정사각형 형태의 사진이어야 합니다." - aspect_ratio_not_portrait: "세로로 찍은 사진이어야 합니다." - aspect_ratio_not_landscape: "가로로 찍은 사진이어야 합니다." - aspect_ratio_is_not: "화면 비율이 %{aspect_ratio} 이어야 합니다." - aspect_ratio_unknown: "알 수 없는 화면 비율 입니다." - image_not_processable: "가능한 이미지 파일이 아닙니다." stripe: error_code: incorrect_number: "카드 숫자가 맞지 않습니다." diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 1dd14847b2..3c12ba0c88 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -105,27 +105,6 @@ ml: blank: "ശൂന്യമായിരിക്കാൻ കഴിയില്ല" too_short: "വളരെ ചെറുതാണ് (കുറഞ്ഞത് %{count} അക്ഷരങ്ങൾ ഉണ്ടാകണം)" errors: - messages: - content_type_invalid: "ഒരു അസാധുവായ ഉള്ളടക്കം ഉണ്ട്" - file_size_out_of_range: "%{file_size} വലുപ്പം ആവശ്യമായ ശ്രേണിയ്‌ക്കിടയിലല്ല" - limit_out_of_range: "ആകെ എണ്ണം പരിധിക്ക് പുറത്താണ്" - image_metadata_missing: "ചിത്രം സാധുതയുള്ളതല്ല" - dimension_min_inclusion: "%{width} x %{height} പിക്സലിനു തുല്യമോ വലുതോ ആയിരിക്കണം." - dimension_max_inclusion: "%{width} x %{height} പിക്സലിനു തുല്യമോ കുറവോ ആയിരിക്കണം." - dimension_width_inclusion: "%{min} പിക്സലിനും %{max} പിക്സലിനും ഇടയിൽ വീതി ഉൾപ്പെടുത്തിയിട്ടില്ല." - dimension_height_inclusion: "%{min} പിക്സലിനും %{max} പിക്സലിനും ഇടയിൽ ഉയരം ഉൾപ്പെടുത്തിയിട്ടില്ല." - dimension_width_greater_than_or_equal_to: "വീതി %{length} പിക്സലിനു തുല്യമോ വലുതോ ആയിരിക്കണം." - dimension_height_greater_than_or_equal_to: "ഉയരം %{length} പിക്സലിനു തുല്യമോ വലുതോ ആയിരിക്കണം." - dimension_width_less_than_or_equal_to: "വീതി %{length} പിക്സലിനു തുല്യമോ കുറവോ ആയിരിക്കണം." - dimension_height_less_than_or_equal_to: "ഉയരം %{length} പിക്സലിനു തുല്യമോ കുറവോ ആയിരിക്കണം." - dimension_width_equal_to: "വീതി %{length} പിക്സലിന് തുല്യമായിരിക്കണം." - dimension_height_equal_to: "ഉയരം %{length} പിക്സലിന് തുല്യമായിരിക്കണം." - aspect_ratio_not_square: "ഒരു ചതുര ചിത്രം ആയിരിക്കണം" - aspect_ratio_not_portrait: "ഒരു ഛായാചിത്രം ആയിരിക്കണം" - aspect_ratio_not_landscape: "ഒരു ഭൂപ്രകൃതി ചിത്രമായിരിക്കണം" - aspect_ratio_is_not: "%{aspect_ratio} എന്ന വീക്ഷണാനുപാതം ഉണ്ടായിരിക്കണം" - aspect_ratio_unknown: "വീക്ഷണാനുപാതം അജ്ഞാതമാണ് " - image_not_processable: "ചിത്രം സാധുതയുള്ളതല്ല" not_found: title: "നിങ്ങൾ തിരയുന്ന പേജ് നിലവിലില്ല (404)" message_html: "ദയവായി വീണ്ടും ശ്രമിക്കുക

ഇതൊരു താൽക്കാലിക പ്രശ്നമായിരിക്കാം. മുൻപുണ്ടായിരുന്ന സ്‌ക്രീനിലേക്ക് മടങ്ങാൻ ബാക്ക് ബട്ടൺ ക്ലിക്ക് ചെയ്യുക അല്ലെങ്കിൽ ഹോം പേജ് ലേക്ക് തിരികെ പോയി വീണ്ടും ശ്രമിക്കുക.

പിന്തുണയ്ക്കായി ബന്ധപ്പെടുക

പ്രശ്‌നം നിലനിൽക്കുന്നുണ്ടെങ്കിലോ അത്യാവശ്യമോ ആണെങ്കിൽ, അതിനെക്കുറിച്ച് ഞങ്ങളോട് പറയുക. ആഗോള ഓപ്പൺ ഫുഡ് നെറ്റ്‌വർക്ക് ലോക്കൽ പേജിൽ നിന്ന് ഞങ്ങളുടെ ബന്ധപ്പെടുന്നതിനുള്ള വിശദാംശങ്ങൾ കണ്ടെത്തുക.

നഷ്‌ടമായ പേജ് എന്തിനെക്കുറിച്ചാണെന്ന് നിങ്ങൾക്ക് കഴിയുന്നത്ര വിശദാംശങ്ങൾ നൽകാൻ കഴിയുമെങ്കിൽ അത് ശരിക്കും ഞങ്ങളെ സഹായിക്കും.

" @@ -3746,6 +3725,7 @@ ml: logourl: "ലോഗോ യുആർഎൽ" are_you_sure_delete: "ഈ റെക്കോർഡ് ഇല്ലാതാക്കണമെന്ന് തീർച്ചയാണോ?" confirm_delete: "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക" + voucher: "വൗച്ചർ" configurations: "കോൺഫിഗറേഷനുകൾ" general_settings: "പൊതുവായ ക്രമീകരണങ്ങൾ" site_name: "സൈറ്റിന്റെ പേര്" @@ -4438,13 +4418,10 @@ ml: webhook_endpoints: title: വെബ്‌ഹുക്ക് എൻഡ്‌പോയിന്റുകൾ description: സിസ്റ്റത്തിലെ ഇവന്റുകൾ ബാഹ്യ സിസ്റ്റങ്ങളിലേക്ക് വെബ്‌ഹുക്കുകളെ ട്രിഗർ ചെയ്‌തേക്കാം. - event_types: - order_cycle_opened: ഓർഡർ സൈക്കിൾ തുറന്നു event_type: header: ഇവന്റ് തരം url: header: എൻഡ്‌പോയിന്റ് യുആർഎൽ - create_placeholder: റിമോട്ട് വെബ്ഹുക്ക് എൻഡ് പോയിന്റിന്റെ യുആർഎൽ നൽകുക developer_settings: title: ഡെവലപ്പർ ക്രമീകരണങ്ങൾ form: @@ -4592,3 +4569,8 @@ ml: add_tag_rule_modal: select_rule_type: "ഒരു റൂൾ തരം തിരഞ്ഞെടുക്കുക:" add_rule: "നിയമം ചേർക്കുക" + webhook_endpoint_form: + url: + create_placeholder: റിമോട്ട് വെബ്ഹുക്ക് എൻഡ് പോയിന്റിന്റെ യുആർഎൽ നൽകുക + event_types: + order_cycle_opened: ഓർഡർ സൈക്കിൾ തുറന്നു diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 8d08ece38b..20ebb4eac0 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -105,27 +105,6 @@ mr: blank: "रिक्त असू शकत नाही" too_short: "खूप छोटा आहे (किमान %{count} अक्षरे )" errors: - messages: - content_type_invalid: "सामग्री प्रकार अवैध आहे" - file_size_out_of_range: "आकार %{file_size} आवश्यक रेंज मध्ये नाही" - limit_out_of_range: "एकूण संख्या श्रेणीबाहेर आहे" - image_metadata_missing: "वैध इमेज़ नाही" - dimension_min_inclusion: "%{width} x %{height} पिक्सेल पेक्षा मोठे किंवा समान असणे आवश्यक आहे." - dimension_max_inclusion: "%{width} x %{height} पिक्सेल पेक्षा कमी किंवा समान असणे आवश्यक आहे." - dimension_width_inclusion: "रुंदी %{min} आणि %{max} पिक्सेल दरम्यान समाविष्ट केलेली नाही." - dimension_height_inclusion: "उंची %{min} आणि %{max} पिक्सेल च्या दरम्यान नाही." - dimension_width_greater_than_or_equal_to: "रुंदी %{length} पिक्सेलपेक्षा जास्त किंवा समान असणे आवश्यक आहे." - dimension_height_greater_than_or_equal_to: "उंची %{length} पिक्सेल पेक्षा जास्त किंवा समान असणे आवश्यक आहे." - dimension_width_less_than_or_equal_to: "रुंदी %{length} पिक्सेल पेक्षा कमी किंवा समान असणे आवश्यक आहे." - dimension_height_less_than_or_equal_to: "उंची %{length} पिक्सेल पेक्षा कमी किंवा समान असणे आवश्यक आहे." - dimension_width_equal_to: "रुंदी %{length} पिक्सेल इतकी असणे आवश्यक आहे." - dimension_height_equal_to: "उंची %{length} पिक्सेल इतकी असणे आवश्यक आहे." - aspect_ratio_not_square: "इमेज़ चौरसाकृती असावी" - aspect_ratio_not_portrait: "पोर्ट्रेट इमेज़ असणे आवश्यक आहे" - aspect_ratio_not_landscape: "लँडस्केप इमेज़ असणे आवश्यक आहे" - aspect_ratio_is_not: "%{aspect_ratio} चा ॲस्पेक्ट रेशो आवश्यक आहे" - aspect_ratio_unknown: "ॲस्पेक्ट रेशो अज्ञात आहे" - image_not_processable: "वैध इमेज़ नाही" not_found: title: "आपण शोधत असलेले पृष्ठ अस्तित्वात नाही (404)" message_html: "कृपया पुन्हा प्रयत्न करा

ही तात्पुरती समस्या असू शकते. कृपया मागील स्क्रीनवर परत जाण्यासाठी बॅक बटणावर क्लिक करा किंवा होम वर परत जा आणि पुन्हा प्रयत्न करा.

ग्राहकसेवेशी संपर्क साधा

समस्या कायम राहिल्यास किंवा तातडीची असल्यास, कृपया आम्हाला त्याबद्दल सांगा. ग्लोबल ओपन फूड नेटवर्क लोकल पेजवरून आमचे संपर्क तपशील शोधा.

गहाळ पृष्ठ कशाबद्दल आहे याबद्दल आपण शक्य तितके तपशील देऊ शकत असल्यास आम्हाला खूप मदत होईल.

" @@ -4306,13 +4285,10 @@ mr: webhook_endpoints: title: वेबहुक एंडपॉइंट्स description: सिस्टम मधील इव्हेंट्स बाह्य सिस्टम्सवर वेबहुक ट्रिगर करू शकतात. - event_types: - order_cycle_opened: ऑर्डर सायकल उघडली event_type: header: कार्यक्रमाचा प्रकार url: header: एंडपॉइंट URL - create_placeholder: रिमोट वेबहुक एंडपॉइंटची URL एंटर करा developer_settings: title: विकासक सेटिंग्ज form: @@ -4442,3 +4418,6 @@ mr: for_customers_tagged: 'टॅग केलेल्या ग्राहकांसाठी:' add_new_rule: '+ एक नवीन नियम जोडा' no_rules_yet: या टॅगवर अद्याप कोणतेही नियम लागू नाहीत + webhook_endpoint_form: + url: + create_placeholder: रिमोट वेबहुक एंडपॉइंटची URL एंटर करा diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 44f62a82af..7470b69d2b 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -115,27 +115,6 @@ nb: blank: "kan ikke være tomt" too_short: "er for kort (minimum er %{count} tegn)" errors: - messages: - content_type_invalid: "har en ugyldig innholdstype" - file_size_out_of_range: "størrelse %{file_size} er ikke i det nødvendige området" - limit_out_of_range: "totalt antall er utenfor rekkevidde" - image_metadata_missing: "er ikke et gyldig bilde" - dimension_min_inclusion: "må være større enn eller lik %{width} x %{height} piksel." - dimension_max_inclusion: "må være mindre enn eller lik %{width} x %{height} piksel." - dimension_width_inclusion: "bredde er ikke inkludert mellom %{min} og %{max} piksel." - dimension_height_inclusion: "høyde er ikke inkludert mellom %{min} og %{max} piksel." - dimension_width_greater_than_or_equal_to: "bredden må være større enn eller lik %{length} piksel." - dimension_height_greater_than_or_equal_to: "høyden må være større enn eller lik %{length} piksel." - dimension_width_less_than_or_equal_to: "bredden må være mindre enn eller lik %{length} piksel." - dimension_height_less_than_or_equal_to: "høyden må være mindre enn eller lik %{length} piksel." - dimension_width_equal_to: "bredde må være lik %{length} piksel." - dimension_height_equal_to: "høyden må være lik %{length} piksel." - aspect_ratio_not_square: "må være et firkantet bilde" - aspect_ratio_not_portrait: "må være et portrettbilde" - aspect_ratio_not_landscape: "må være et landskapsbilde" - aspect_ratio_is_not: "må ha et størrelsesforhold på %{aspect_ratio}" - aspect_ratio_unknown: "har et ukjent størrelsesforhold" - image_not_processable: "er ikke et gyldig bilde" not_found: title: "Siden du lette etter eksisterer ikke (404)" message_html: "Vennligst prøv på nytt

Dette kan være et midlertidig problem. Klikk tilbake-knappen for å gå tilbake til forrige skjermbilde eller gå tilbake til Hjem og prøv igjen.

Kontakt support

Hvis problemet vedvarer eller haster, vennligst fortell oss om det. Finn kontaktinformasjonen vår fra den globale Open Food Network Local-siden .

Det hjelper oss virkelig hvis du kan gi så mange detaljer som mulig om hva den manglende siden handler om.

" @@ -3942,6 +3921,7 @@ nb: logourl: "Logourl" are_you_sure_delete: "Er du sikker på at du vil slette denne posten?" confirm_delete: "Bekreft Sletting" + voucher: "Kupong" configurations: "Konfigurasjoner" general_settings: "Generelle innstillinger" site_name: "Sidenavn" @@ -4663,13 +4643,10 @@ nb: webhook_endpoints: title: Webhook-endepunkter description: Hendelser i systemet kan utløse webhooks til eksterne systemer. - event_types: - order_cycle_opened: Bestillingsrunde åpnet event_type: header: Hendelsestype url: header: Endepunkt URL - create_placeholder: Skriv inn URL-en til det eksterne webhook-endepunktet developer_settings: title: Utviklerinnstillinger form: @@ -4817,6 +4794,11 @@ nb: add_tag_rule_modal: select_rule_type: "Velg en regeltype:" add_rule: "Legg til Regel" + webhook_endpoint_form: + url: + create_placeholder: Skriv inn URL-en til det eksterne webhook-endepunktet + event_types: + order_cycle_opened: Bestillingsrunde åpnet invisible_captcha: sentence_for_humans: "Vennligst la stå tomt" timestamp_error_message: "Vennligst prøv igjen etter 5 sekunder." diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 187ba7f8a6..17cd2ede1e 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -102,27 +102,6 @@ pa: blank: "ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ" too_short: "ਬਹੁਤ ਛੋਟਾ (ਨਿਊਨਤਮ %{count} ਅੱਖਰ)" errors: - messages: - content_type_invalid: "ਅਵੈਧ ਸਮੱਗਰੀ ਦੀ ਕਿਸਮ ਸ਼ਾਮਲ ਹੈ" - file_size_out_of_range: "ਸਾਈਜ਼ %{file_size} ਲੋੜੀਂਦੀ ਸੀਮਾ ਵਿੱਚਕਾਰ ਨਹੀਂ ਹੈ" - limit_out_of_range: "ਕੁੱਲ ਗਿਣਤੀ ਸੀਮਾ ਤੋਂ ਬਾਹਰ ਹੈ" - image_metadata_missing: "ਇਹ ਇੱਕ ਵੈਧ ਫੋਟੋ ਨਹੀਂ ਹੈ" - dimension_min_inclusion: "%{width} x %{height} ਪਿਕਸਲ ਤੋਂ ਵੱਧ ਜਾਂ ਬਰਾਬਰ ਦਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" - dimension_max_inclusion: "%{width} x %{height} ਪਿਕਸਲ ਤੋਂ ਘੱਟ ਜਾਂ ਬਰਾਬਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।" - dimension_width_inclusion: "ਚੌੜਾਈ %{min} ਅਤੇ %{max} ਪਿਕਸਲਾਂ ਵਿੱਚਕਾਰ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ।" - dimension_height_inclusion: "ਲੰਬਾਈ %{min} ਅਤੇ %{max} ਪਿਕਸਲਾਂ ਵਿੱਚਕਾਰ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ।" - dimension_width_greater_than_or_equal_to: "ਚੌੜਾਈ %{length} ਪਿਕਸਲ ਤੋਂ ਵੱਧ ਜਾਂ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।" - dimension_height_greater_than_or_equal_to: "ਲੰਬਾਈ %{length} ਪਿਕਸਲ ਤੋਂ ਵੱਧ ਜਾਂ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।" - dimension_width_less_than_or_equal_to: "ਚੌੜਾਈ %{length} ਪਿਕਸਲ ਤੋਂ ਘੱਟ ਜਾਂ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।" - dimension_height_less_than_or_equal_to: "ਲੰਬਾਈ %{length} ਪਿਕਸਲ ਤੋਂ ਘੱਟ ਜਾਂ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।" - dimension_width_equal_to: "width must be equal to %{length} pixel." - dimension_height_equal_to: "ਲੰਬਾਈ %{length} ਪਿਕਸਲ ਦੇ ਬਰਾਬਰ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।" - aspect_ratio_not_square: "ਇੱਕ ਚੌਰਸ ਫੋਟੋ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ" - aspect_ratio_not_portrait: "ਇੱਕ ਪੋਰਟਰੇਟ ਫੋਟੋ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ" - aspect_ratio_not_landscape: "ਇੱਕ ਲੈਂਡਸਕੇਪ ਫੋਟੋ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ" - aspect_ratio_is_not: "ਅਸਪੈਕਟ ਅਨੁਪਾਤ %{aspect ratio} ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ" - aspect_ratio_unknown: "ਇੱਕ ਅਗਿਆਤ ਅਸਪੈਕਟ ਅਨੁਪਾਤ ਹੈ" - image_not_processable: "ਇਹ ਇੱਕ ਵੈਧ ਫੋਟੋ ਨਹੀਂ ਹੈ" not_found: title: "ਜਿਹੜਾ ਪੰਨਾ ਤੁਸੀਂ ਲੱਭ ਰਹੇ ਸੀ ਉਹ ਮੌਜੂਦ ਨਹੀਂ ਹੈ (404)" message_html: "ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ

ਇਹ ਇੱਕ ਅਸਥਾਈ ਸਮੱਸਿਆ ਹੋ ਸਕਦੀ ਹੈ। ਪਿਛਲੀ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾਣ ਲਈ ਕਿਰਪਾ ਕਰਕੇ ਬੈਕ ਬਟਨ ਤੇ ਕਲਿੱਕ ਕਰੋ ਜਾਂ ਹੋਮ ਤੇ ਵਾਪਸ ਜਾਓ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।

ਸਹਾਇਤਾ ਨਾਲ ਸੰਪਰਕ ਕਰੋ

ਜੇਕਰ ਸਮੱਸਿਆ ਬਣੀ ਰਹਿੰਦੀ ਹੈ ਜਾਂ ਜ਼ਰੂਰੀ ਹੈ, ਤਾਂ ਕਿਰਪਾ ਕਰਕੇ ਸਾਨੂੰ ਇੱਸ ਦੇ ਬਾਰੇ ਵਿੱਚ ਦੱਸੋ। ਗਲੋਬਲ ਓਪਨ ਫੂਡ ਨੈੱਟਵਰਕ ਦੇ ਲੋਕਲ ਪੰਨੇ ਤੋਂ ਸਾਡੇ ਸੰਪਰਕ ਵੇਰਵੇ ਪ੍ਰਾਪਤ ਕਰੋ

ਤੁਹਾਡਾ ਸਾਨੂੰ ਗੁੰਮ ਹੋਏ ਪੰਨੇ ਬਾਰੇ ਜਿੰਨਾ ਸੰਭਵ ਹੋ ਸਕੇ ਉਨ੍ਹੇਂ ਜਿਆਦਾ ਵੇਰਵੇ ਪ੍ਰਦਾਨ ਕਰਨਾ ਅਸਲ ਵਿੱਚ ਸਾਡੀ ਵਧੇਰੀ ਮਦਦ ਕਰਦਾ ਹੈ।

" @@ -3616,6 +3595,7 @@ pa: logourl: "ਲੋਗੋurl" are_you_sure_delete: "ਕੀ ਤੁਸੀਂ ਵਾਕਈ ਇਸ ਰਿਕਾਰਡ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?" confirm_delete: "ਹਟਾਉਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ" + voucher: "ਵਾਊਚਰ" configurations: "ਕੌਂਫਿਗਰੇਸ਼ਨ" general_settings: "ਆਮ ਸੈਟਿੰਗਾਂ" site_name: "ਸਾਈਟ ਦਾ ਨਾਂ" @@ -4305,13 +4285,10 @@ pa: webhook_endpoints: title: ਵੈਬਹੁੱਕ ਐਂਡਪੁਆਇੰਟ description: ਸਿਸਟਮ ਵਿੱਚ ਇਵੈਂਟਸ ਵੈਬਹੁੱਕ ਨੂੰ ਬਾਹਰੀ ਸਿਸਟਮਾਂ ਲਈ ਟਰਿੱਗਰ ਕਰ ਸਕਦੇ ਹਨ। - event_types: - order_cycle_opened: ਆਰਡਰ ਸਾਈਕਲ ਖੋਲ੍ਹਿਆ ਗਿਆ event_type: header: ਇਵੇੰਟ ਦੀ ਕਿਸਮ url: header: ਐਂਡਪੁਆਇੰਟ URL - create_placeholder: ਰਿਮੋਟ ਵੈਬਹੁੱਕ ਐਂਡਪੁਆਇੰਟ ਦਾ URL ਦਾਖਲ ਕਰੋ developer_settings: title: ਡਿਵੈਲਪਰ ਸੈਟਿੰਗਜ਼ form: @@ -4418,3 +4395,8 @@ pa: add_tag_rule_modal: select_rule_type: "ਇੱਕ ਨਿਯਮ ਕਿਸਮ ਚੁਣੋ:" add_rule: "ਨਿਯਮ ਜੋੜੋ" + webhook_endpoint_form: + url: + create_placeholder: ਰਿਮੋਟ ਵੈਬਹੁੱਕ ਐਂਡਪੁਆਇੰਟ ਦਾ URL ਦਾਖਲ ਕਰੋ + event_types: + order_cycle_opened: ਆਰਡਰ ਸਾਈਕਲ ਖੋਲ੍ਹਿਆ ਗਿਆ diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index cfc3719c49..662e986663 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -68,28 +68,6 @@ pt_BR: limited_stock_but_no_count_on_hand: "deve ser especificado porque está forçando o estoque limitado" messages: blank: "Não pode ser vazio" - errors: - messages: - content_type_invalid: "possui um tipo de conteúdo inválido" - file_size_out_of_range: "o tamanho %{file_size}não está entre os limites válidos. " - limit_out_of_range: "o valor total está fora dos limites." - image_metadata_missing: "não é uma imagem válida" - dimension_min_inclusion: "precisa ser maior ou igual a%{width}x%{height} pixel. " - dimension_max_inclusion: "precisa ser menor ou igual a %{width} x %{height} pixel." - dimension_width_inclusion: "a largura não está inclusa entre %{min} e %{max} pixel. " - dimension_height_inclusion: "a altura não está incluisa entre %{min} e %{max} pixel. " - dimension_width_greater_than_or_equal_to: "a largura precisa ser maior ou igual a %{length} pixel. " - dimension_height_greater_than_or_equal_to: "a altura precisa ser maior ou igual a %{length} pixel. " - dimension_width_less_than_or_equal_to: "a largura precisa ser menor ou igual a %{length} pixel. " - dimension_height_less_than_or_equal_to: "a altura precisa ser menor ou igual a %{length} pixel." - dimension_width_equal_to: "a largura precisa ser igual a %{length} pixel. " - dimension_height_equal_to: "a altura precisa ser igual a %{length} pixel. " - aspect_ratio_not_square: "precisa ser uma imagem quadrada. " - aspect_ratio_not_portrait: "precisa ser uma imagem no formato retrato. " - aspect_ratio_not_landscape: "precisa ser uma imagem no formato paisagem. " - aspect_ratio_is_not: "precisa ter uma proporção de %{aspect_ratio}" - aspect_ratio_unknown: "tem uma proporção desconhecida" - image_not_processable: "não é uma imagem válida" stripe: error_code: incorrect_number: "O número do cartão está incorreto." diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 7296ec0d74..54600c0431 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -109,27 +109,6 @@ ru: blank: "не может быть пустым" too_short: "слишком короткий (минимум %{count} символов)" errors: - messages: - content_type_invalid: "имеет неверный тип контента" - file_size_out_of_range: "размер %{file_size} не входит в требуемый диапазон" - limit_out_of_range: "общее количество вне диапазона" - image_metadata_missing: "недопустимое изображение" - dimension_min_inclusion: "должно быть больше или равно %{width} x %{height} пикселей." - dimension_max_inclusion: "должно быть меньше или равно %{width} x %{height} пикселей." - dimension_width_inclusion: "ширина не включена между %{min} и %{max} пикселей." - dimension_height_inclusion: "высота не включена между %{min} и %{max} пикселями." - dimension_width_greater_than_or_equal_to: "ширина должна быть больше или равна %{length} пикселя." - dimension_height_greater_than_or_equal_to: "высота должна быть больше или равна %{length} пикселя." - dimension_width_less_than_or_equal_to: "ширина должна быть меньше или равна %{length} пикселя." - dimension_height_less_than_or_equal_to: "высота должна быть меньше или равна %{length} пикселя." - dimension_width_equal_to: "ширина должна быть равна %{length} пикселю." - dimension_height_equal_to: "высота должна быть равна %{length} пикселю." - aspect_ratio_not_square: "должно быть квадратное изображение" - aspect_ratio_not_portrait: "должно быть портретное изображение" - aspect_ratio_not_landscape: "должно быть пейзажное изображение" - aspect_ratio_is_not: "должен иметь соотношение сторон %{aspect_ratio}" - aspect_ratio_unknown: "имеет неизвестное соотношение сторон" - image_not_processable: "недопустимое изображение" not_found: title: "Страница не существует (404)" message_html: "Пожалуйста, попробуйте еще раз

Это может быть временной проблемой. Нажмите кнопку «Назад», чтобы вернуться к предыдущему экрану, или вернитесь на Главную страницу и повторите попытку.

Свяжитесь с поддержкой

Если проблема сохраняется или срочная, пожалуйста, сообщите нам об этом. Найдите наши контактные данные на глобальной странице Open Food Network Local .

Нам очень поможет, если вы сможете дать как можно больше подробностей о том, о чем пропавшая страница.

" @@ -3848,6 +3827,7 @@ ru: logourl: "URL логотипа" are_you_sure_delete: "Вы уверены, что хотите удалить эту запись?" confirm_delete: "Подтвердить Удаление" + voucher: "Ваучер" configurations: "Настройки" general_settings: "Основные Настройки" site_name: "Имя Сайта" @@ -4551,13 +4531,10 @@ ru: webhook_endpoints: title: Конечные точки веб-хука description: События в системе могут запускать веб-хуки к внешним системам. - event_types: - order_cycle_opened: Цикл Заказа Открыт event_type: header: Тип события url: header: URL-адрес конечной точки - create_placeholder: Введите URL-адрес конечной точки удаленного веб-хука. developer_settings: title: Настройки Разработчика form: @@ -4731,3 +4708,8 @@ ru: add_tag_rule_modal: select_rule_type: "Выберите тип правила:" add_rule: "Добавить Правило" + webhook_endpoint_form: + url: + create_placeholder: Введите URL-адрес конечной точки удаленного веб-хука. + event_types: + order_cycle_opened: Цикл Заказа Открыт diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 22c2343dcb..2a2158afed 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -115,27 +115,6 @@ sr: blank: "не може бити празно" too_short: "је прекратак (минимум је %{count} знакова)" errors: - messages: - content_type_invalid: "има неважећи тип садржаја" - file_size_out_of_range: "величина %{file_size} није између захтеваног опсега" - limit_out_of_range: "укупан број је ван опсега" - image_metadata_missing: "није важећа слика" - dimension_min_inclusion: "мора бити већи или једнак %{width} к %{height} пиксела." - dimension_max_inclusion: "мора бити мањи или једнак %{width} к %{height} пиксела." - dimension_width_inclusion: "ширина није укључена између %{min} и %{max} пиксела." - dimension_height_inclusion: "висина није укључена између %{min} и %{max} пиксела." - dimension_width_greater_than_or_equal_to: "ширина мора бити већа или једнака %{length} пиксела." - dimension_height_greater_than_or_equal_to: "висина мора бити већа или једнака %{length} пиксела." - dimension_width_less_than_or_equal_to: "ширина мора бити мања или једнака %{length} пиксела." - dimension_height_less_than_or_equal_to: "висина мора бити мања или једнака %{length} пиксела." - dimension_width_equal_to: "ширина мора бити једнака %{length} пиксела." - dimension_height_equal_to: "висина мора бити једнака %{length} пиксела." - aspect_ratio_not_square: "мора бити квадратна слика" - aspect_ratio_not_portrait: "мора бити портретна слика" - aspect_ratio_not_landscape: "мора бити пејзажна слика" - aspect_ratio_is_not: "мора имати однос ширине и висине %{aspect_ratio}" - aspect_ratio_unknown: "има непознати однос ширине и висине" - image_not_processable: "није важећа слика" not_found: title: "Страница коју сте тражили не постоји (404)" message_html: "Молим вас, покушајте поново

Ово може бити привремени проблем. Кликните на дугме за повратак да бисте се вратили на претходни екран или се вратите на почетну страницу и покушајте поново.

Контактирајте подршку

Ако проблем и даље постоји или је хитан, реците нам о томе. Пронађите наше контакт податке на глобалној локалној страници Опен Фоод Нетворк .

Заиста нам помаже ако можете дати што више детаља о томе о чему се ради на страници која недостаје.

" @@ -4602,13 +4581,10 @@ sr: webhook_endpoints: title: Вебхоок Ендпоинтс description: Догађаји у систему могу покренути веб-хукове ка спољним системима. - event_types: - order_cycle_opened: Отворен циклус наруџби event_type: header: Тип догађаја url: header: УРЛ крајње тачке - create_placeholder: Унесите УРЛ крајње тачке удаљеног веб-хука developer_settings: title: Подешавања програмера form: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 4985ad4b94..edb5b63482 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -72,28 +72,6 @@ uk: limited_stock_but_no_count_on_hand: "необхідно вказати, оскільки запаси обмежені" messages: blank: "не може бути порожнім" - errors: - messages: - content_type_invalid: "має невірний тип контенту" - file_size_out_of_range: "розмір %{file_size} не знаходиться в необхідному діапазоні" - limit_out_of_range: "загальна кількість виходить за межі діапазону" - image_metadata_missing: "не є дійсним зображенням" - dimension_min_inclusion: "має бути більшим або дорівнювати %{width} x %{height} пікселям." - dimension_max_inclusion: "має бути меншим або дорівнювати %{width} x %{height} пікселям." - dimension_width_inclusion: "ширина не включається між %{min} та %{max} пікселями." - dimension_height_inclusion: "висота не включається між %{min} та %{max} пікселями." - dimension_width_greater_than_or_equal_to: "ширина має бути більшою або дорівнювати %{length} пікселю." - dimension_height_greater_than_or_equal_to: "висота має бути більшою або дорівнювати %{length} пікселям." - dimension_width_less_than_or_equal_to: "ширина має бути меншою або дорівнювати %{length} пікселям." - dimension_height_less_than_or_equal_to: "висота має бути меншою або дорівнювати %{length} пікселю." - dimension_width_equal_to: "ширина має дорівнювати %{length} пікселям." - dimension_height_equal_to: "висота має дорівнювати %{length} пікселям." - aspect_ratio_not_square: "має бути квадратне зображення" - aspect_ratio_not_portrait: "має бути портретне зображення" - aspect_ratio_not_landscape: "має бути пейзажним зображенням" - aspect_ratio_is_not: "має мати співвідношення сторін %{aspect_ratio}" - aspect_ratio_unknown: "має невідоме співвідношення сторін" - image_not_processable: "не є дійсним зображенням" stripe: error_code: incorrect_number: "Номер картки неправильний." From 476daf0d3047aebcb3bca076fe9d178e0fe138c4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 13:47:41 +1100 Subject: [PATCH 068/270] Add instructions how to install nodenv --- script/nodenv-install.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/script/nodenv-install.sh b/script/nodenv-install.sh index b041111df5..df7110b6c2 100755 --- a/script/nodenv-install.sh +++ b/script/nodenv-install.sh @@ -10,6 +10,12 @@ set -e if ! command -v nodenv > /dev/null; then printf "Please install https://github.com/nodenv/nodenv.\n" + printf '```'"\n" + printf "git clone https://github.com/nodenv/nodenv.git ~/.nodenv\n" + printf "git clone https://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build\n" + printf "nodenv init\n" + printf 'eval "$(nodenv init -)"'"\n" + printf '```'"\n" exit 1 fi From 1adf94093efa1724fcfbfcc87c0c704ef6370ab8 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 15:34:24 +1100 Subject: [PATCH 069/270] Merge related initializer code The division came likely from Spree times. --- config/application.rb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/config/application.rb b/config/application.rb index 5071eab71b..a91177cc49 100644 --- a/config/application.rb +++ b/config/application.rb @@ -79,7 +79,9 @@ module Openfoodnetwork initializer "spree.register.payment_methods" do |app| Rails.application.reloader.to_prepare do app.config.spree.payment_methods = [ - Spree::PaymentMethod::Check + Spree::PaymentMethod::Check, + Spree::Gateway::StripeSCA, + Spree::Gateway::PayPalExpress, ] end end @@ -131,14 +133,6 @@ module Openfoodnetwork end end - # Register Spree payment methods - initializer "spree.gateway.payment_methods", :after => "spree.register.payment_methods" do |app| - Rails.application.reloader.to_prepare do - app.config.spree.payment_methods << Spree::Gateway::StripeSCA - app.config.spree.payment_methods << Spree::Gateway::PayPalExpress - end - end - initializer "ofn.reports" do |app| module ::Reporting; end Rails.application.reloader.to_prepare do From a1bdfa0a20107e58a9971b3014b97f382494c1f9 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 16:57:22 +1100 Subject: [PATCH 070/270] Move list of payment methods to where it is used --- .../spree/admin/payment_methods_controller.rb | 2 +- app/models/spree/payment_method.rb | 6 +++++- config/application.rb | 10 ---------- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 97f77420fd..4e74e11247 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = Rails.application.config.spree.payment_methods.map(&:to_s) + valid_payment_methods = Spree::PaymentMethod.providers.map(&:to_s) return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index b66d8d239b..d8c63d9746 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -53,7 +53,11 @@ module Spree } def self.providers - Rails.application.config.spree.payment_methods + [ + Spree::PaymentMethod::Check, + Spree::Gateway::StripeSCA, + Spree::Gateway::PayPalExpress, + ] end def configured? diff --git a/config/application.rb b/config/application.rb index a91177cc49..37961e5757 100644 --- a/config/application.rb +++ b/config/application.rb @@ -76,16 +76,6 @@ module Openfoodnetwork end end - initializer "spree.register.payment_methods" do |app| - Rails.application.reloader.to_prepare do - app.config.spree.payment_methods = [ - Spree::PaymentMethod::Check, - Spree::Gateway::StripeSCA, - Spree::Gateway::PayPalExpress, - ] - end - end - initializer "spree.mail.settings" do |_app| Rails.application.reloader.to_prepare do Spree::Core::MailSettings.init From a957df1205b64d64da231fbe68778a9506e51f5c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 17:11:55 +1100 Subject: [PATCH 071/270] Use I18n API for readability --- app/models/spree/payment_method.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index d8c63d9746..f12d8efafc 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -122,8 +122,8 @@ module Spree end def self.clean_name - i18n_key = "spree.admin.payment_methods.providers.#{name.demodulize.downcase}" - I18n.t(i18n_key) + scope = "spree.admin.payment_methods.providers" + I18n.t(name.demodulize.downcase, scope:) end private From 41a8d06326ba223e4457e9b7c78634638fd42015 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 17:34:25 +1100 Subject: [PATCH 072/270] Remove duplicate definition of payment providers --- app/controllers/spree/admin/payment_methods_controller.rb | 4 ++-- app/models/spree/payment_method.rb | 8 -------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 4e74e11247..069b0ad1cc 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = Spree::PaymentMethod.providers.map(&:to_s) + valid_payment_methods = PAYMENT_METHODS.keys return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) @@ -133,7 +133,7 @@ module Spree end def load_providers - providers = Gateway.providers.sort_by(&:name) + providers = PAYMENT_METHODS.values.sort_by(&:name) unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index f12d8efafc..fbd379e6b6 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -52,14 +52,6 @@ module Spree .where(environment: [Rails.env, "", nil]) } - def self.providers - [ - Spree::PaymentMethod::Check, - Spree::Gateway::StripeSCA, - Spree::Gateway::PayPalExpress, - ] - end - def configured? !stripe? || stripe_configured? end From cb7a4b67ce5894c66f801803e8bc4a75374d5d6c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 14:33:39 +1100 Subject: [PATCH 073/270] Replace custom lookup with default Rails feature Rails renders an error when you try to supply an invalid value. Our code is safe without an allow-list and the UX doesn't allow you to select an invalid value. --- .../spree/admin/payment_methods_controller.rb | 2 +- .../spree/admin/payment_methods_controller_spec.rb | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 069b0ad1cc..08c0e600b6 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -95,7 +95,7 @@ module Spree @payment_method = PaymentMethod.find(params[:pm_id]) end else - @payment_method = PAYMENT_METHODS.fetch(params[:provider_type], PaymentMethod).new + @payment_method = PaymentMethod.new(type: params[:provider_type]) end render partial: 'provider_settings' diff --git a/spec/controllers/spree/admin/payment_methods_controller_spec.rb b/spec/controllers/spree/admin/payment_methods_controller_spec.rb index 7827705283..398389bf24 100644 --- a/spec/controllers/spree/admin/payment_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/payment_methods_controller_spec.rb @@ -296,17 +296,6 @@ RSpec.describe Spree::Admin::PaymentMethodsController do expect(assigns(:payment_method)).to be_a_new Spree::Gateway::PayPalExpress expect(response).to render_template partial: '_provider_settings' end - - context "with a non valid payment method" do - it "renders provider settings with a new generic payment method" do - spree_get :show_provider_preferences, - pm_id: "", - provider_type: "Spree::Gateway::Hacked" - - expect(assigns(:payment_method)).to be_a_new Spree::PaymentMethod - expect(response).to render_template partial: '_provider_settings' - end - end end end end From 93f2af7e7d074905eacbc8a71511f94ae6f57a75 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 14:36:56 +1100 Subject: [PATCH 074/270] Lazy load payment method classes This avoids any class reloading issues in dev, simplifies most of the code path and opens up for refactoring. The only reason we still load the class is to call `clean_name` on it for the translation key. We can probably do better. --- .../spree/admin/payment_methods_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 08c0e600b6..296db04548 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -14,7 +14,7 @@ module Spree Spree::PaymentMethod::Check Spree::Gateway::PayPalExpress Spree::Gateway::StripeSCA - }.index_with(&:constantize).freeze + }.freeze def create force_environment @@ -117,7 +117,7 @@ module Spree end def validate_payment_method_provider - valid_payment_methods = PAYMENT_METHODS.keys + valid_payment_methods = PAYMENT_METHODS return if valid_payment_methods.include?(params[:payment_method][:type]) flash[:error] = Spree.t(:invalid_payment_provider) @@ -133,13 +133,13 @@ module Spree end def load_providers - providers = PAYMENT_METHODS.values.sort_by(&:name) + providers = PAYMENT_METHODS.sort unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } end - providers + providers.map(&:constantize) end # Show Stripe as an option if enabled, or if the @@ -165,7 +165,7 @@ module Spree end def stripe_provider?(provider) - provider.name.ends_with?("StripeSCA") + provider.ends_with?("StripeSCA") end def base_params From 2e08c9c44e0baf29702b7e7ce5408f82cfe7d58f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 15:44:14 +1100 Subject: [PATCH 075/270] Simplify with defined order of payment methods --- app/controllers/spree/admin/payment_methods_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 296db04548..93b5bc08cf 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -11,9 +11,9 @@ module Spree respond_to :html PAYMENT_METHODS = %w{ - Spree::PaymentMethod::Check Spree::Gateway::PayPalExpress Spree::Gateway::StripeSCA + Spree::PaymentMethod::Check }.freeze def create @@ -133,7 +133,7 @@ module Spree end def load_providers - providers = PAYMENT_METHODS.sort + providers = PAYMENT_METHODS.dup unless show_stripe? providers.reject! { |provider| stripe_provider?(provider) } From f3c60148c14c662c778e0e3d8f96ee831495c050 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 9 Jan 2026 15:53:03 +1100 Subject: [PATCH 076/270] Simplify filtering of Stripe --- app/controllers/spree/admin/payment_methods_controller.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 93b5bc08cf..6584dd87ce 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -135,9 +135,7 @@ module Spree def load_providers providers = PAYMENT_METHODS.dup - unless show_stripe? - providers.reject! { |provider| stripe_provider?(provider) } - end + providers.delete("Spree::Gateway::StripeSCA") unless show_stripe? providers.map(&:constantize) end @@ -164,10 +162,6 @@ module Spree @payment_method.try(:type) == "Spree::Gateway::StripeSCA" end - def stripe_provider?(provider) - provider.ends_with?("StripeSCA") - end - def base_params @base_params ||= PermittedAttributes::PaymentMethod.new(params[:payment_method]). call.to_h.with_indifferent_access From c799f15067acb3301d52b9b6375364076c4688d4 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 12 Jan 2026 15:09:49 +1100 Subject: [PATCH 077/270] Update ruby-build with homebrew if installed This is commonly used on Mac. --- script/rbenv-install.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/script/rbenv-install.sh b/script/rbenv-install.sh index a6d37c8977..f92c8a1fb0 100755 --- a/script/rbenv-install.sh +++ b/script/rbenv-install.sh @@ -24,7 +24,13 @@ if rbenv install --skip-existing; then echo "Ruby is installed." else echo "Upgrading rbenv's ruby-build:" - git -C "$(rbenv root)"/plugins/ruby-build pull + # If installed with homebrew, use that to update + if (command -v brew && brew list --versions ruby-build); then + brew update && brew upgrade ruby-build + else + # Update with git + git -C "$(rbenv root)"/plugins/ruby-build pull + fi rbenv install fi From fe8200b7e83904db475b3ee2d63c9f1b58787a62 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 6 Jan 2026 14:04:55 +1100 Subject: [PATCH 078/270] Move babel config back to it's own file It's need for jest to work properly. --- babel.config.js | 6 ++++++ jest.config.js | 2 +- package.json | 5 ----- 3 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 babel.config.js diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000000..eb9931d1d1 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,6 @@ +module.exports = function (api) { + const defaultConfigFunc = require("shakapacker/package/babel/preset.js"); + const resultConfig = defaultConfigFunc(api); + + return resultConfig; +}; diff --git a/jest.config.js b/jest.config.js index df6f89cec9..99c9c31e3b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -179,7 +179,7 @@ module.exports = { // transform: { "\\.[jt]sx?$": "babel-jest" }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: ["/node_modules/(?!(stimulus.+)/)"], + transformIgnorePatterns: ["/node_modules/(?!stimulus)/"], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/package.json b/package.json index 3dcf9776df..6cafd278b6 100644 --- a/package.json +++ b/package.json @@ -60,11 +60,6 @@ "webpack-merge": "^5.8.0", "webpack-sources": "^3.3.3" }, - "babel": { - "presets": [ - "./node_modules/shakapacker/package/babel/preset.js" - ] - }, "browserslist": [ "defaults", "not IE 11" From 39245d55e2b8560e5ae1f5230a5cb4e5df9a2037 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 9 Jan 2026 11:07:07 +1100 Subject: [PATCH 079/270] Turn defer off when loading javascript script It seems that we have functionality that depends on the order the scripts are executed. Using defer breaks that. Using defer is better performance wise so we should try to address this eventually, might need to wait till we get rid of angular. --- app/views/layouts/darkswarm.html.haml | 2 +- app/views/layouts/registration.html.haml | 2 +- app/views/spree/admin/shared/_head.html.haml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index 475cb45bff..0ea508a490 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -18,7 +18,7 @@ = language_meta_tags = stylesheet_pack_tag "darkswarm", "data-turbo-track": "reload", media: "screen" - = javascript_pack_tag "application", "data-turbo-track": "reload" + = javascript_pack_tag "application", "data-turbo-track": "reload", defer: false = render "layouts/shopfront_script" if @shopfront_layout = render "layouts/bugsnag_js" diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index 07f8a84ef4..38caee638b 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -16,7 +16,7 @@ = stylesheet_pack_tag "darkswarm", media: "screen" = javascript_include_tag "darkswarm/all" - = javascript_pack_tag "application" + = javascript_pack_tag "application", defer: false = csrf_meta_tags diff --git a/app/views/spree/admin/shared/_head.html.haml b/app/views/spree/admin/shared/_head.html.haml index 5da4963871..0b0b7ccad6 100644 --- a/app/views/spree/admin/shared/_head.html.haml +++ b/app/views/spree/admin/shared/_head.html.haml @@ -25,7 +25,7 @@ = render "spree/admin/shared/translations" = render "spree/admin/shared/routes" -= javascript_pack_tag "admin", "data-turbo-track": "reload" += javascript_pack_tag "admin", "data-turbo-track": "reload", defer: false %script = raw "var AUTH_TOKEN = \"#{form_authenticity_token}\";" From 419f4490d6280c0e00fd2c336f0c7903d5c75e92 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 9 Sep 2025 15:55:23 +1000 Subject: [PATCH 080/270] Recognise certain voucher errors I considered using the vine error message as the translation key (ie I18n.t(vine_voucher_validator_service.errors.#{message.parameterize.underscore}), but thought it might be more predictable to have keys explicitly defined and whitelisted like this. These error message are still squashed by the controller, we'll deal with that next. --- .../vine/voucher_validator_service.rb | 9 +++- config/locales/en.yml | 1 + .../vine/voucher_validator_service_spec.rb | 41 ++++++++++++++++++- 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/app/services/vine/voucher_validator_service.rb b/app/services/vine/voucher_validator_service.rb index 8311a5fc9f..57af49718d 100644 --- a/app/services/vine/voucher_validator_service.rb +++ b/app/services/vine/voucher_validator_service.rb @@ -2,6 +2,11 @@ module Vine class VoucherValidatorService + VINE_ERRORS = { + # https://github.com/openfoodfoundation/vine/blob/main/app/Enums/ApiResponse.php + "This voucher has expired." => :expired, + }.freeze + attr_reader :voucher_code, :errors def initialize(voucher_code:, enterprise:) @@ -43,7 +48,9 @@ module Vine def handle_errors(response) if response[:status] == 400 - errors[:invalid_voucher] = I18n.t("vine_voucher_validator_service.errors.invalid_voucher") + message = response[:body] && JSON.parse(response[:body]).dig("meta", "message") + key = VINE_ERRORS.fetch(message, :invalid_voucher) + errors[:invalid_voucher] = I18n.t("vine_voucher_validator_service.errors.#{key}") elsif response[:status] == 404 errors[:not_found_voucher] = I18n.t("vine_voucher_validator_service.errors.not_found_voucher") diff --git a/config/locales/en.yml b/config/locales/en.yml index d3fe23123d..80094f4582 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -587,6 +587,7 @@ en: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "The voucher has expired" not_found_voucher: "Sorry, we couldn't find that voucher, please check the code." vine_voucher_redeemer_service: errors: diff --git a/spec/services/vine/voucher_validator_service_spec.rb b/spec/services/vine/voucher_validator_service_spec.rb index 2c263d3f97..68cd1f0a03 100644 --- a/spec/services/vine/voucher_validator_service_spec.rb +++ b/spec/services/vine/voucher_validator_service_spec.rb @@ -270,11 +270,12 @@ RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do enterprise: distributor, data: { api_key: "1234568", secret: "my_secret" } ) } + # Faraday returns un-parsed json let(:data) { { meta: { responseCode: 400, limit: 50, offset: 0, message: "Invalid merchant team." }, data: [] - }.deep_stringify_keys + }.to_json } before do @@ -285,7 +286,7 @@ RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do expect_validate_to_be_nil end - it "adds an error message" do + it "adds a general error message" do validate_voucher_service.validate expect(validate_voucher_service.errors).to include( @@ -293,6 +294,23 @@ RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do ) end + context "it is expired" do + let(:data) { + { + meta: { responseCode: 400, limit: 50, offset: 0, message: "This voucher has expired." }, + data: [] + }.to_json + } + + it "adds a specific error message" do + validate_voucher_service.validate + + expect(validate_voucher_service.errors).to include( + { invalid_voucher: "The voucher has expired" } + ) + end + end + it "doesn't creates a new VINE voucher" do expect_voucher_count_not_to_change end @@ -420,6 +438,25 @@ RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do }.not_to change { voucher.reload.amount } end end + + context "it is expired" do + let(:data) { + { + meta: { responseCode: 400, limit: 50, offset: 0, message: "This voucher has expired." }, + data: [] + }.to_json + } + + it "adds a specific error message" do + mock_api_exception(type: Faraday::BadRequestError, status: 400, body: data) + + validate_voucher_service.validate + + expect(validate_voucher_service.errors).to include( + { invalid_voucher: "The voucher has expired" } + ) + end + end end end From 368da1999390cff0690f4ad98fe316cc65d48aed Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 9 Sep 2025 16:08:58 +1000 Subject: [PATCH 081/270] Display more specific invalid_voucher message to customer It was implemented with error code 409 in https://github.com/openfoodfoundation/vine/pull/112 --- .../voucher_adjustments_controller.rb | 8 ++++-- .../vine/voucher_validator_service.rb | 2 +- spec/requests/voucher_adjustments_spec.rb | 28 ++++++++++++++++++- .../vine/voucher_validator_service_spec.rb | 2 +- spec/system/consumer/checkout/payment_spec.rb | 2 +- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/app/controllers/voucher_adjustments_controller.rb b/app/controllers/voucher_adjustments_controller.rb index 857e7c5e6f..8b8928944b 100644 --- a/app/controllers/voucher_adjustments_controller.rb +++ b/app/controllers/voucher_adjustments_controller.rb @@ -90,11 +90,13 @@ class VoucherAdjustmentsController < BaseController voucher_code: voucher_params[:voucher_code], enterprise: @order.distributor ) voucher = vine_voucher_validator.validate + errors = vine_voucher_validator.errors - return nil if vine_voucher_validator.errors[:not_found_voucher].present? + return nil if errors[:not_found_voucher].present? - if vine_voucher_validator.errors.present? - @order.errors.add(:voucher_code, I18n.t('checkout.errors.add_voucher_error')) + if errors.present? + message = errors[:invalid_voucher] || I18n.t('checkout.errors.add_voucher_error') + @order.errors.add(:voucher_code, message) return nil end diff --git a/app/services/vine/voucher_validator_service.rb b/app/services/vine/voucher_validator_service.rb index 57af49718d..259f52e84e 100644 --- a/app/services/vine/voucher_validator_service.rb +++ b/app/services/vine/voucher_validator_service.rb @@ -47,7 +47,7 @@ module Vine end def handle_errors(response) - if response[:status] == 400 + if [400, 409].include?(response[:status]) message = response[:body] && JSON.parse(response[:body]).dig("meta", "message") key = VINE_ERRORS.fetch(message, :invalid_voucher) errors[:invalid_voucher] = I18n.t("vine_voucher_validator_service.errors.#{key}") diff --git a/spec/requests/voucher_adjustments_spec.rb b/spec/requests/voucher_adjustments_spec.rb index 4fcb382f5b..352d20c14f 100644 --- a/spec/requests/voucher_adjustments_spec.rb +++ b/spec/requests/voucher_adjustments_spec.rb @@ -161,7 +161,19 @@ RSpec.describe VoucherAdjustmentsController do post("/voucher_adjustments", params:) expect(response).to be_unprocessable - expect(flash[:error]).to match "There was an error while adding the voucher" + expect(flash[:error]).to match "The voucher is not valid" + end + end + + context "when voucher has expired" do + it "returns 422 and an error message" do + mock_vine_voucher_validator(voucher: nil, + errors: { invalid_voucher: "The voucher has expired" }) + + post("/voucher_adjustments", params:) + + expect(response).to be_unprocessable + expect(flash[:error]).to match "The voucher has expired" end end @@ -219,6 +231,20 @@ RSpec.describe VoucherAdjustmentsController do ) end end + + context "when voucher has expired" do + it "returns 422 and an error message" do + vine_voucher = build(:vine_voucher, code: vine_voucher_code, + enterprise: distributor) + mock_vine_voucher_validator(voucher: vine_voucher, + errors: { invalid_voucher: "The voucher has expired" }) + + post("/voucher_adjustments", params:) + + expect(response).to be_unprocessable + expect(flash[:error]).to match "The voucher has expired" + end + end end end end diff --git a/spec/services/vine/voucher_validator_service_spec.rb b/spec/services/vine/voucher_validator_service_spec.rb index 68cd1f0a03..686d95c09c 100644 --- a/spec/services/vine/voucher_validator_service_spec.rb +++ b/spec/services/vine/voucher_validator_service_spec.rb @@ -448,7 +448,7 @@ RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do } it "adds a specific error message" do - mock_api_exception(type: Faraday::BadRequestError, status: 400, body: data) + mock_api_exception(type: Faraday::BadRequestError, status: 409, body: data) validate_voucher_service.validate diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index 7daff49b42..81c26225bd 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -198,7 +198,7 @@ RSpec.describe "As a consumer, I want to checkout my order" do fill_in "Enter voucher code", with: "KM1891" click_button("Apply") - expect(page).to have_content("There was an error while adding the voucher") + expect(page).to have_content("The voucher is not valid") expect(Vouchers::Vine.find_by(code: "KM1891", enterprise: distributor)).to be_nil end end From fd3c1c1343ef16fe34fa2e7961d192e1c244cfd5 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 13 Jan 2026 02:13:51 +0500 Subject: [PATCH 082/270] Add "None" option to tags filter in product search --- app/controllers/admin/products_v3_controller.rb | 14 ++++++++------ app/views/admin/products_v3/_filters.html.haml | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index db600e2c5b..95083ad421 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -7,6 +7,7 @@ module Admin before_action :init_filters_params before_action :init_pagination_params + before_action :init_none_tag def index fetch_products @@ -242,11 +243,8 @@ module Admin def apply_tags_filter(base_query) return base_query if @tags.blank? - tags = Array(@tags) - none_key = I18n.t('admin.products_v3.filters.tags.none') - - has_none = tags.include?(none_key) - tag_names = tags.reject { |t| t == none_key } + tag_names = Array(@tags).dup + has_none_tag = (tag_names.delete(@none_tag_value) == @none_tag_value) queries = [] @@ -260,7 +258,7 @@ module Admin queries << base_query.where(id: tagged_product_ids) end - if has_none + if has_none_tag # Products where no variants have any tags tagged_product_ids = Spree::Variant .joins(:taggings) @@ -333,6 +331,10 @@ module Admin t('.error') end end + + def init_none_tag + @none_tag_value = "without_any_tag" + end end end # rubocop:enable Metrics/ClassLength diff --git a/app/views/admin/products_v3/_filters.html.haml b/app/views/admin/products_v3/_filters.html.haml index a3e30e53b1..68e0c88ebb 100644 --- a/app/views/admin/products_v3/_filters.html.haml +++ b/app/views/admin/products_v3/_filters.html.haml @@ -23,7 +23,7 @@ - select_tag_options = { class: "fullwidth", multiple: true , data: { controller: "tom-select", "tom-select-placeholder-value": t(".select_tag"), "tom-select-options-value": '{ "maxItems": 5 , "plugins": { "remove_button": {} , "no_active_items": {}, "checkbox_options": { "checkedClassNames": ["ts-checked"], "uncheckedClassNames": ["ts-unchecked"] } } }' } } - = select_tag :tags_name_in, options_for_select(available_tags.unshift(t('.tags.none')), tags), select_tag_options + = select_tag :tags_name_in, options_for_select(available_tags.unshift([t('.tags.none'), @none_tag_value]), tags), select_tag_options .submit .search-button = button_tag t(".search"), class: "secondary icon-search relaxed", name: nil From 23ab6bb4890814f3b7ab169a7198bc1ba2fcaf7e Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 13 Jan 2026 10:44:54 +1100 Subject: [PATCH 083/270] Create seed admin user without prompting for details We don't really need it. In development, we use default values. And when preparing a new server, we set env vars. This fixes a broken dependency on HighLine. I found removal easier than fixing something we don't use. --- db/default/users.rb | 55 +++++++++------------------------------------ 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/db/default/users.rb b/db/default/users.rb index a56ac58bad..e2255fe1bb 100644 --- a/db/default/users.rb +++ b/db/default/users.rb @@ -1,45 +1,12 @@ # frozen_string_literal: true -# see last line where we create an admin if there is none, asking for email and password -def prompt_for_admin_password - if ENV['ADMIN_PASSWORD'] - password = ENV['ADMIN_PASSWORD'].dup - say "Admin Password #{password}" - else - password = ask('Password [ofn123]: ') do |q| - q.echo = false - q.validate = /^(|.{5,40})$/ - q.responses[:not_valid] = 'Invalid password. Must be at least 5 characters long.' - q.whitespace = :strip - end - password = 'ofn123' if password.blank? - end - - password -end - -def prompt_for_admin_email - if ENV['ADMIN_EMAIL'] - email = ENV['ADMIN_EMAIL'].dup - say "Admin User #{email}" - else - email = ask('Email [ofn@example.com]: ') do |q| - q.echo = true - q.whitespace = :strip - end - email = 'ofn@example.com' if email.blank? - end - - email -end - def create_admin_user attributes = read_user_attributes load 'spree/user.rb' if Spree::User.find_by(email: attributes[:email]) - say <<~TEXT + printf <<~TEXT WARNING: There is already a user with the email: #{email}, so no account changes were made. If you wish to create an additional admin @@ -58,24 +25,22 @@ def create_admin_user ValidEmail2::Address.define_method(:valid_mx?) { true } if admin.save - say "New admin user persisted!" + printf <<~TEXT + New admin user persisted! + Username: #{admin.email} + Password: #{admin.password} + TEXT else - say "There was some problems with persisting new admin user:" + printf "There was some problems with persisting new admin user:\n" admin.errors.full_messages.each do |error| - say error + printf "#{error}\n" end end end def read_user_attributes - if ENV.fetch("AUTO_ACCEPT", true) - password = ENV.fetch("ADMIN_PASSWORD", "ofn123") - email = ENV.fetch("ADMIN_EMAIL", "ofn@example.com") - else - say 'Create the admin user (press enter for defaults).' - email = prompt_for_admin_email - password = prompt_for_admin_password - end + password = ENV.fetch("ADMIN_PASSWORD", "ofn123") + email = ENV.fetch("ADMIN_EMAIL", "ofn@example.com") { admin: true, From 76a3e913dfa4a7cbbfe7e71151884ccdc8a5dc53 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 13 Jan 2026 11:00:02 +1100 Subject: [PATCH 084/270] Remove unnecessary load --- db/default/users.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/db/default/users.rb b/db/default/users.rb index e2255fe1bb..945f719c5c 100644 --- a/db/default/users.rb +++ b/db/default/users.rb @@ -3,8 +3,6 @@ def create_admin_user attributes = read_user_attributes - load 'spree/user.rb' - if Spree::User.find_by(email: attributes[:email]) printf <<~TEXT From 92382ca4733f9b9e161d46aef43c69b4bd76a392 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 13 Jan 2026 11:02:49 +1100 Subject: [PATCH 085/270] Remove outdated warning We only create a user when seeding the database and we check that there's no user already. We don't have a use case for adding an admin user to a database with user data. It also referred to a spree task that doesn't exist in our code base. --- db/default/users.rb | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/db/default/users.rb b/db/default/users.rb index 945f719c5c..2a64eac41d 100644 --- a/db/default/users.rb +++ b/db/default/users.rb @@ -3,18 +3,6 @@ def create_admin_user attributes = read_user_attributes - if Spree::User.find_by(email: attributes[:email]) - printf <<~TEXT - - WARNING: There is already a user with the email: #{email}, - so no account changes were made. If you wish to create an additional admin - user, please run rake spree_auth:admin:create again with a different email. - - TEXT - - return - end - admin = Spree::User.new(attributes) admin.skip_confirmation! admin.skip_confirmation_notification! @@ -49,4 +37,4 @@ def read_user_attributes } end -create_admin_user if Spree::User.admin.empty? +create_admin_user if Spree::User.none? From a934b60f6761c1d1e9bbcccc38ffbb9495fd8f45 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 12 Jan 2026 11:52:18 +1100 Subject: [PATCH 086/270] Make sure shipping modal gets closed Also check the modal is not showing instead of checking it's hidden --- app/components/ship_order_component.html.haml | 2 +- spec/system/admin/fees_on_orders_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/components/ship_order_component.html.haml b/app/components/ship_order_component.html.haml index be05f354e1..16490e5c88 100644 --- a/app/components/ship_order_component.html.haml +++ b/app/components/ship_order_component.html.haml @@ -1,4 +1,4 @@ -= render ConfirmModalComponent.new(id: dom_id(@order, :ship), confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do += render ConfirmModalComponent.new(id: dom_id(@order, :ship), confirm_actions: "click->modal#close", confirm_reflexes: "click->Admin::OrdersReflex#ship", controller: "orders", reflex: "Admin::Orders#ship") do %div{class: "margin-bottom-30"} %p= t('spree.admin.orders.shipment.mark_as_shipped_message_html') %div{class: "margin-bottom-30"} diff --git a/spec/system/admin/fees_on_orders_spec.rb b/spec/system/admin/fees_on_orders_spec.rb index 7e66888800..94c4dcb57a 100644 --- a/spec/system/admin/fees_on_orders_spec.rb +++ b/spec/system/admin/fees_on_orders_spec.rb @@ -555,7 +555,7 @@ RSpec.describe ' find_button("Confirm").click end - expect(page).to have_selector('.reveal-modal', visible: false) + expect(page).not_to have_content("This will mark the order as Shipped.") expect(page).to have_content "SHIPPED" click_link('Order Details') unless subpage == 'Order Details' @@ -578,7 +578,7 @@ RSpec.describe ' find_button("Confirm").click end - expect(page).to have_selector('.reveal-modal', visible: false) + expect(page).not_to have_content("This will mark the order as Shipped.") click_link('Order Details') unless subpage == 'Order Details' expect(page).to have_content "SHIPPED" From 8cd9e941489c098ffb9a929f0865095962efba21 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 14:06:15 +1100 Subject: [PATCH 087/270] Use a separate config for webpacker on CI For some reason having webpack compile turned on for the test environment makes system test slow, resulting in lots of failure. Assets are precompiled for system test, so there isn't any compilation on each request, but still test are slow. To fix the issue, we use a separate config file for CI where webpack compile is set turned off. --- .github/workflows/build.yml | 1 + config/ci_webpacker.yml | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 config/ci_webpacker.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6711bb01a..d76df41de0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -148,6 +148,7 @@ jobs: - name: Run tests env: + WEBPACKER_CONFIG: "config/ci_webpacker.yml" KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: ff2456e64c9f2aa5157eb0daf711d3c3 KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} diff --git a/config/ci_webpacker.yml b/config/ci_webpacker.yml new file mode 100644 index 0000000000..425e975f13 --- /dev/null +++ b/config/ci_webpacker.yml @@ -0,0 +1,34 @@ +# Note: You must restart bin/webpack-dev-server for changes to take effect + +default: &default + source_path: app/webpacker + source_entry_path: packs + public_root_path: public + public_output_path: packs + cache_path: tmp/cache/webpacker + webpack_compile_output: true + + # Additional paths webpack should look up modules + # ['app/assets', 'engine/foo/app/assets'] + additional_paths: [ + 'vendor', + 'app/webpacker/css', + 'app/webpacker/fonts', + 'app/webpacker/images', + 'engines/web/app/assets/stylesheets', + 'app/components' + ] + + # Reload manifest.json on all requests so we reload latest compiled packs + cache_manifest: false + + # Extract and emit a css file + extract_css: true + +test: + <<: *default + # Asset are precomiled on CI, so no need to compile here + compile: false + + # Compile test packs to a separate directory + public_output_path: packs-test From 26702e6f0d68dc38d5a2d2cbb2b6d4454d266cd4 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 13 Jan 2026 14:59:26 +1100 Subject: [PATCH 088/270] Remove unused file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Low-hanging fruit 🍇 --- .../javascripts/darkswarm/controllers/tmp_controller.js.coffee | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 app/assets/javascripts/darkswarm/controllers/tmp_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/tmp_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/tmp_controller.js.coffee deleted file mode 100644 index 76b4d6cb3f..0000000000 --- a/app/assets/javascripts/darkswarm/controllers/tmp_controller.js.coffee +++ /dev/null @@ -1,2 +0,0 @@ -angular.module('Darkswarm').controller "TmpCtrl", ($scope)-> - $scope.test = {foo: "bar"} From e8e48f7c640d3074b437fc9e64042126a4d2ce23 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 13 Jan 2026 12:59:28 +0500 Subject: [PATCH 089/270] use double quotes for the string value --- app/controllers/admin/products_v3_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index 95083ad421..0f4dc4ad3f 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -333,7 +333,7 @@ module Admin end def init_none_tag - @none_tag_value = "without_any_tag" + @none_tag_value = '""' end end end From 282fb44da4f778c1f4bd53252cbb476e41c40e59 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 10:05:27 +1100 Subject: [PATCH 090/270] Update all locales with the latest Transifex translations --- config/locales/hu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/locales/hu.yml b/config/locales/hu.yml index e1908a1b36..b6a77a9971 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1616,7 +1616,7 @@ hu: has_no_shipping_methods: "%{enterprise} nem rendelkezik szállítási móddal" has_no_enterprise_fees: "A %{enterprise}-nek nincsenek vállalkozási díjai" flashes: - dismiss: Elutasítás + dismiss: Bezárás side_menu: enterprise: primary_details: "Főbb adatok" @@ -2620,7 +2620,7 @@ hu: failed_to_create_enterprise: "Nem sikerült létrehozni a vállalkozást." failed_to_create_enterprise_unknown: "Nem sikerült létrehozni a vállalkozást. Győződj meg arról, hogy minden mezőt hiánytalanul kitöltöttél." failed_to_update_enterprise_unknown: "Nem sikerült frissíteni a vállalkozást. Győződj meg arról, hogy minden mezőt hiánytalanul kitöltöttél." - enterprise_confirm_delete_message: "Ezzel a vállalkozás által szállított %{product} is törlődik. Biztos, hogy akarod folytatni?" + enterprise_confirm_delete_message: "Ezzel a vállalkozás %{product} terméke is törlődik. Biztos, hogy akarod folytatni?" order_not_saved_yet: "Megrendelésed még nem lett elmentve. Adj nekünk néhány másodpercet, hogy befejezzük!" filter_by: "Szűrés" hide_filters: "Szűrők elrejtése" @@ -2782,7 +2782,7 @@ hu: instagram: "Instagram" instagram_placeholder: "pl. @instagram_handle" limit_reached: - headline: "Ó ne!" + headline: "Ó, ne!" message: "Elérted a korlátot!" text: "Elérted a vállalkozások számának korlátját, amelyeknek a tulajdonosa lehetsz" action: "Vissza a kezdőlapra" From 82f6484031d7329d8e213583c823a57790b9c3c9 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 12:30:57 +1100 Subject: [PATCH 091/270] Add comment explaning why defer loading is disabled --- app/views/layouts/darkswarm.html.haml | 2 +- app/views/layouts/registration.html.haml | 2 +- app/views/spree/admin/shared/_head.html.haml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index 0ea508a490..0d048daaa7 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -18,7 +18,7 @@ = language_meta_tags = stylesheet_pack_tag "darkswarm", "data-turbo-track": "reload", media: "screen" - = javascript_pack_tag "application", "data-turbo-track": "reload", defer: false + = javascript_pack_tag "application", "data-turbo-track": "reload", defer: false # do not use defer because our javascript currently depend on order of execution of loaded script. = render "layouts/shopfront_script" if @shopfront_layout = render "layouts/bugsnag_js" diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index 38caee638b..a89f6f8857 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -16,7 +16,7 @@ = stylesheet_pack_tag "darkswarm", media: "screen" = javascript_include_tag "darkswarm/all" - = javascript_pack_tag "application", defer: false + = javascript_pack_tag "application", defer: false # do not use defer because our javascript currently depend on order of execution of loaded script. = csrf_meta_tags diff --git a/app/views/spree/admin/shared/_head.html.haml b/app/views/spree/admin/shared/_head.html.haml index 0b0b7ccad6..0cf4946406 100644 --- a/app/views/spree/admin/shared/_head.html.haml +++ b/app/views/spree/admin/shared/_head.html.haml @@ -25,7 +25,7 @@ = render "spree/admin/shared/translations" = render "spree/admin/shared/routes" -= javascript_pack_tag "admin", "data-turbo-track": "reload", defer: false += javascript_pack_tag "admin", "data-turbo-track": "reload", defer: false # do not use defer because our javascript currently depend on order of execution of loaded script. %script = raw "var AUTH_TOKEN = \"#{form_authenticity_token}\";" From 90f962a886ecec6135f6d38656cb3f25fa46d949 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 13:47:23 +1100 Subject: [PATCH 092/270] Use compiler_strategy mtime for test environment It fixes the issue for CI as it's faster than the digest strategy: https://github.com/shakacode/shakapacker/blob/main/docs/configuration.md#compiler_strategy --- .github/workflows/build.yml | 1 - config/ci_webpacker.yml | 34 ---------------------------------- config/webpacker.yml | 1 + 3 files changed, 1 insertion(+), 35 deletions(-) delete mode 100644 config/ci_webpacker.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d76df41de0..c6711bb01a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -148,7 +148,6 @@ jobs: - name: Run tests env: - WEBPACKER_CONFIG: "config/ci_webpacker.yml" KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: ff2456e64c9f2aa5157eb0daf711d3c3 KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} diff --git a/config/ci_webpacker.yml b/config/ci_webpacker.yml deleted file mode 100644 index 425e975f13..0000000000 --- a/config/ci_webpacker.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Note: You must restart bin/webpack-dev-server for changes to take effect - -default: &default - source_path: app/webpacker - source_entry_path: packs - public_root_path: public - public_output_path: packs - cache_path: tmp/cache/webpacker - webpack_compile_output: true - - # Additional paths webpack should look up modules - # ['app/assets', 'engine/foo/app/assets'] - additional_paths: [ - 'vendor', - 'app/webpacker/css', - 'app/webpacker/fonts', - 'app/webpacker/images', - 'engines/web/app/assets/stylesheets', - 'app/components' - ] - - # Reload manifest.json on all requests so we reload latest compiled packs - cache_manifest: false - - # Extract and emit a css file - extract_css: true - -test: - <<: *default - # Asset are precomiled on CI, so no need to compile here - compile: false - - # Compile test packs to a separate directory - public_output_path: packs-test diff --git a/config/webpacker.yml b/config/webpacker.yml index 19c3eeb903..565596797b 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -65,6 +65,7 @@ development: test: <<: *default compile: true + compiler_strategy: mtime # Compile test packs to a separate directory public_output_path: packs-test From 1c703905fe3c45a935dd7a9d4e776bdf8faeec3a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 12:44:28 +1100 Subject: [PATCH 093/270] Remove now redundant install of bundler --- bin/setup | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/setup b/bin/setup index 52411f7240..ab04dc5d62 100755 --- a/bin/setup +++ b/bin/setup @@ -16,7 +16,10 @@ FileUtils.chdir APP_ROOT do # Add necessary setup steps to this file. puts "== Installing dependencies ==" - system! "script/install-bundler" + + # Bundler comes as default gem these days. + # system! "script/install-bundler" + # # Check first (it's quicker), then install new gems if necessary system("bundle check 2> /dev/null") || system!(BUNDLE_ENV, "bundle install") From 1ce76a31668b706116eee2a54b1ebeae3e7e15e4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 13:05:18 +1100 Subject: [PATCH 094/270] Bump Ruby from 3.3.10p183 to 3.4.8p72 --- .ruby-version | 2 +- Dockerfile | 2 +- Gemfile.lock | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ruby-version b/.ruby-version index 5f6fc5edc2..7921bd0c89 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.10 +3.4.8 diff --git a/Dockerfile b/Dockerfile index 2c7ed56f58..5af71e90e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:3.3.10-alpine3.19 AS base +FROM ruby:3.4.8-alpine3.19 AS base ENV LANG=C.UTF-8 \ LC_ALL=C.UTF-8 \ TZ=Europe/London \ diff --git a/Gemfile.lock b/Gemfile.lock index c81e0fd26f..e86a88289b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1114,7 +1114,7 @@ DEPENDENCIES wkhtmltopdf-binary RUBY VERSION - ruby 3.3.10p183 + ruby 3.4.8p72 BUNDLED WITH - 2.5.22 + 4.0.3 From 8953e8481da67c9a8c21f1ff1e7da5fb0d7c3775 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 13:11:36 +1100 Subject: [PATCH 095/270] Remove unnecessary bundler install script Bundler does the same already. --- .gitattributes | 1 - Dockerfile.ubuntu | 5 +---- bin/setup | 3 --- script/install-bundler | 42 ------------------------------------------ 4 files changed, 1 insertion(+), 50 deletions(-) delete mode 100755 script/install-bundler diff --git a/.gitattributes b/.gitattributes index dc15ed793c..bb040f9a84 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,4 +8,3 @@ # Same thing for following files, but they don't have an sh extension pre-commit eol=lf webpack-dev-server eol=lf -install-bundler eol=lf \ No newline at end of file diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu index 4d67450b24..5900b7156a 100644 --- a/Dockerfile.ubuntu +++ b/Dockerfile.ubuntu @@ -83,11 +83,8 @@ RUN wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.z # Copy code and install app dependencies COPY . /usr/src/app/ -# Install Bundler -RUN ./script/install-bundler - # Install front-end dependencies RUN yarn install # Run bundler install in parallel with the amount of available CPUs -RUN bundle install --jobs="$(nproc)" \ No newline at end of file +RUN bundle install --jobs="$(nproc)" diff --git a/bin/setup b/bin/setup index ab04dc5d62..1f75470d94 100755 --- a/bin/setup +++ b/bin/setup @@ -17,9 +17,6 @@ FileUtils.chdir APP_ROOT do puts "== Installing dependencies ==" - # Bundler comes as default gem these days. - # system! "script/install-bundler" - # # Check first (it's quicker), then install new gems if necessary system("bundle check 2> /dev/null") || system!(BUNDLE_ENV, "bundle install") diff --git a/script/install-bundler b/script/install-bundler deleted file mode 100755 index 1fb3e7d945..0000000000 --- a/script/install-bundler +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -# This shell script looks for the last used Bundler version in Gemfile.lock and -# installs exactly that version, removing all other versions. - -# Command line arguments are passed on to `gem install`. So you can call this -# script with with arguments: -# -# ./script/install-bundler --no-ri --no-rdoc - -# This script is used by ofn-install and can by handy in your development -# environment. - -# Fail if a single command fails. -set -e - -# `grep`: find the occurrences of "BUNDLED WITH" (-m is unnecessary and behaves different on macOS) -# `-A`: print the next line after "BUNDLED WITH" as well -# `-F`: find exactly that string -# `tail -n 1`: take the last line, the version line -# `tr -d`: delete all spaces, the indent before the version -version="$(grep -A 1 -F "BUNDLED WITH" Gemfile.lock | tail -n 1 | tr -d '[:space:]')" - -# if the length of $version is zero -if [ -z "$version" ]; then - echo >&2 "No bundler version in Gemfile.lock." - exit 1 -fi - -# Get the currently used bundler version. -# We ignore all errors with `2>/dev/null || true` in case there is no bundler -# or only an orphaned shim installed. -current="$(bundler --version 2>/dev/null || true)" - -if [ "$current" = "Bundler version $version" ]; then - echo >&2 "Already up-to-date: $current" - exit 0 -fi - -# Passing on all arguments of this script with "$@". -gem install bundler -v "$version" "$@" -gem uninstall bundler -v "!= $version" 2>/dev/null || true From 26b39d6626da36c94be4b173664efe2458b688e7 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 7 Jan 2026 13:28:45 +1100 Subject: [PATCH 096/270] Add convenience script to bump ruby version --- script/bump-ruby.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 script/bump-ruby.sh diff --git a/script/bump-ruby.sh b/script/bump-ruby.sh new file mode 100755 index 0000000000..337f23cb2a --- /dev/null +++ b/script/bump-ruby.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env sh + +if [ "$#" -lt 1 ]; then + echo "Usage: $0 " + echo "Example: $0 3.4.8" + exit 1 +fi + +set -ex + +OLD_VERSION=$(cat .ruby-version) +NEW_VERSION=$1 +PATTERN="$(echo "$OLD_VERSION" | sed 's:[]\[^$.*/]:\\&:g')" + +sed -i "s/\<$PATTERN\>/$NEW_VERSION/" .ruby-version Dockerfile + +script/rbenv-install.sh + +# Update bundler to the version shipped with Ruby: +bundle update --bundler + +git commit -a -m "Bump Ruby from $OLD_VERSION to $NEW_VERSION" From fdc775ae6d404bc2291282d0ebd84a62ede92dcf Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 19 Jan 2026 10:55:24 +1100 Subject: [PATCH 097/270] Style arguments forwarding --- app/models/spree/payment_method.rb | 4 ++-- lib/reporting/reports/enterprise_fee_summary/scope.rb | 4 ++-- spec/support/performance_helper.rb | 4 ++-- spec/system/admin/enterprises/dfc_permissions_spec.rb | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index b66d8d239b..50fbb69158 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -93,8 +93,8 @@ module Spree type.demodulize.downcase end - def self.find_with_destroyed(*args) - unscoped { find(*args) } + def self.find_with_destroyed(*) + unscoped { find(*) } end def payment_profiles_supported? diff --git a/lib/reporting/reports/enterprise_fee_summary/scope.rb b/lib/reporting/reports/enterprise_fee_summary/scope.rb index 5aa518f5c4..f678a5750b 100644 --- a/lib/reporting/reports/enterprise_fee_summary/scope.rb +++ b/lib/reporting/reports/enterprise_fee_summary/scope.rb @@ -392,9 +392,9 @@ module Reporting end end - def filter_scope(*args) + def filter_scope(*) chain_to_scope do - where(*args) + where(*) end end end diff --git a/spec/support/performance_helper.rb b/spec/support/performance_helper.rb index f0236997fb..8967258717 100644 --- a/spec/support/performance_helper.rb +++ b/spec/support/performance_helper.rb @@ -2,12 +2,12 @@ module OpenFoodNetwork module PerformanceHelper - def multi_benchmark(num_samples, cache_key_patterns: [], &block) + def multi_benchmark(num_samples, cache_key_patterns: [], &) results = (0..num_samples).map do |_i| ActiveRecord::Base.connection.query_cache.clear delete_cache_keys(cache_key_patterns) - result = Benchmark.measure(&block) + result = Benchmark.measure(&) puts result diff --git a/spec/system/admin/enterprises/dfc_permissions_spec.rb b/spec/system/admin/enterprises/dfc_permissions_spec.rb index 7c86f6ed0f..b88c4e0d48 100644 --- a/spec/system/admin/enterprises/dfc_permissions_spec.rb +++ b/spec/system/admin/enterprises/dfc_permissions_spec.rb @@ -68,9 +68,9 @@ RSpec.describe "DFC Permissions", feature: "cqcm-dev", vcr: true do end end - def within_platform_list(variant, &block) + def within_platform_list(variant, &) retry_expectations(on: Ferrum::JavaScriptError) do - within(platform_list(variant), &block) + within(platform_list(variant), &) end end From bac123f223452fe8212762bd1d54118b382bc9cc Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 19 Jan 2026 14:35:54 +1100 Subject: [PATCH 098/270] Remove unused switch to allow checkout on failures The inherited payment logic is complicated enough. Removing this dead code makes it slightly simpler. --- app/models/spree/app_configuration.rb | 1 - app/models/spree/order.rb | 9 ++------- spec/models/spree/order_spec.rb | 8 +------- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/app/models/spree/app_configuration.rb b/app/models/spree/app_configuration.rb index a3069b3b02..ee10ba1b74 100644 --- a/app/models/spree/app_configuration.rb +++ b/app/models/spree/app_configuration.rb @@ -31,7 +31,6 @@ module Spree preference :admin_products_per_page, :integer, default: 10 # Should only be true if you don't need to track inventory preference :allow_backorder_shipping, :boolean, default: false - preference :allow_checkout_on_gateway_error, :boolean, default: false preference :allow_guest_checkout, :boolean, default: true preference :currency_decimal_mark, :string, default: "." preference :currency_symbol_position, :string, default: "before" diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 160041bfff..70e568b867 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -437,18 +437,13 @@ module Spree # # Returns: # - true if all pending_payments processed successfully - # - true if a payment failed, ie. raised a GatewayError - # which gets rescued and converted to TRUE when - # :allow_checkout_gateway_error is set to true # - false if a payment failed, ie. raised a GatewayError - # which gets rescued and converted to FALSE when - # :allow_checkout_on_gateway_error is set to false + # which gets rescued and converted to FALSE # def process_payments! process_each_payment(&:process!) rescue Core::GatewayError => e - result = !!Spree::Config[:allow_checkout_on_gateway_error] - errors.add(:base, e.message) && (return result) + errors.add(:base, e.message) && (return false) end def process_payments_offline! diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 1baabc5878..be8bf6019c 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -299,13 +299,7 @@ RSpec.describe Spree::Order do context "when a payment raises a GatewayError" do before { expect(payment).to receive(:process!).and_raise(Spree::Core::GatewayError) } - it "returns true when configured to allow checkout on gateway failures" do - Spree::Config.set allow_checkout_on_gateway_error: true - expect(order.process_payments!).to be_truthy - end - - it "returns false when not configured to allow checkout on gateway failures" do - Spree::Config.set allow_checkout_on_gateway_error: false + it "returns false" do expect(order.process_payments!).to be_falsy end end From 3ebacbc31a7e67bc3cb52daf775a83fcf13f7026 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 20 Jan 2026 16:28:20 +1100 Subject: [PATCH 099/270] Move require statement to the right file --- spec/base_spec_helper.rb | 1 + spec/spec_helper.rb | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index b969b9af2b..4f06f874b0 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -16,6 +16,7 @@ require 'rspec/retry' require 'capybara' require 'paper_trail/frameworks/rspec' require "factory_bot_rails" +require 'database_cleaner' require 'shoulda/matchers' Shoulda::Matchers.configure do |config| diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ef36599bbe..3ec6ea3cf2 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'base_spec_helper' -require 'database_cleaner' RSpec.configure do |config| # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. From 7361b2da0b2412b0113199630cd543a8a91c1a36 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 20 Jan 2026 16:29:53 +1100 Subject: [PATCH 100/270] Move related rspec config to one place --- spec/base_spec_helper.rb | 3 +++ spec/spec_helper.rb | 5 ----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb index 4f06f874b0..2078c0a3ca 100644 --- a/spec/base_spec_helper.rb +++ b/spec/base_spec_helper.rb @@ -156,6 +156,9 @@ RSpec.configure do |config| I18n.with_locale(locale) { example.run } end + # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. + config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } + # Reset all feature toggles to prevent leaking. config.before(:each) do Flipper.features.each(&:remove) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 3ec6ea3cf2..7cbb05ea10 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,8 +1,3 @@ # frozen_string_literal: true require 'base_spec_helper' - -RSpec.configure do |config| - # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. - config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } -end From 3455ceb722b9aaa32c126e6f556bb090f99ce74f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 20 Jan 2026 16:32:48 +1100 Subject: [PATCH 101/270] Use standard spec_helper filename --- .rspec | 2 +- spec/base_spec_helper.rb | 291 --------------------------------------- spec/reflex_helper.rb | 1 - spec/spec_helper.rb | 290 +++++++++++++++++++++++++++++++++++++- spec/system_helper.rb | 2 - 5 files changed, 290 insertions(+), 296 deletions(-) delete mode 100644 spec/base_spec_helper.rb diff --git a/.rspec b/.rspec index eb81da86cf..c99d2e7396 100644 --- a/.rspec +++ b/.rspec @@ -1 +1 @@ ---require base_spec_helper +--require spec_helper diff --git a/spec/base_spec_helper.rb b/spec/base_spec_helper.rb deleted file mode 100644 index 2078c0a3ca..0000000000 --- a/spec/base_spec_helper.rb +++ /dev/null @@ -1,291 +0,0 @@ -# frozen_string_literal: true - -# This file defines configurations that are universal to all spec types (feature, system, etc) - -ENV["RAILS_ENV"] ||= 'test' - -# for full configuration, see .simplecov -require 'simplecov' if ENV["COVERAGE"] - -require 'pry' unless ENV['CI'] -require 'view_component/test_helpers' - -require_relative "../config/environment" -require 'rspec/rails' -require 'rspec/retry' -require 'capybara' -require 'paper_trail/frameworks/rspec' -require "factory_bot_rails" -require 'database_cleaner' - -require 'shoulda/matchers' -Shoulda::Matchers.configure do |config| - config.integrate do |with| - with.test_framework :rspec - with.library :rails - end -end - -require 'knapsack_pro' -KnapsackPro::Adapters::RSpecAdapter.bind - -if ENV["COVERAGE"] && defined?(SimpleCov) - KnapsackPro::Hooks::Queue.before_queue do - SimpleCov.command_name("rspec_ci_node_#{KnapsackPro::Config::Env.ci_node_index}") - end -end - -# Allow connections to selenium whilst raising errors when connecting to external sites -require 'webmock/rspec' -WebMock.enable! -WebMock.disable_net_connect!( - allow_localhost: true, - allow: ['chromedriver.storage.googleapis.com'] -) - -# Requires supporting ruby files with custom matchers and macros, etc, -# in spec/support/ and its subdirectories. -Rails.root.glob("spec/support/**/*.rb").sort.each { |f| require f } - -Capybara.server = :puma, { Silent: true } -Capybara.disable_animation = true - -Capybara.configure do |config| - config.match = :prefer_exact - config.ignore_hidden_elements = true -end - -FactoryBot.use_parent_strategy = false -FactoryBot::SyntaxRunner.include FileHelper - -# raise I18n exception handler -I18n.exception_handler = proc do |exception, *_| - raise exception.to_exception -end - -# Disable timestamp check for test environment -InvisibleCaptcha.timestamp_enabled = false - -InvisibleCaptcha.spinner_enabled = false - -RSpec.configure do |config| - # If you're not using ActiveRecord, or you'd prefer not to run each of your - # examples within a transaction, remove the following line or assign false - # instead of true. - # - # Setting this to true keeps the database clean by rolling back any changes. - config.use_transactional_fixtures = true - - # Some tests don't work within a transaction. Then we use DatabaseCleaner. - config.before(:each, concurrency: true) do - config.use_transactional_fixtures = false - DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } - DatabaseCleaner.start - end - config.append_after(:each, concurrency: true) do - DatabaseCleaner.clean - config.use_transactional_fixtures = true - end - - # If true, the base class of anonymous controllers will be inferred - # automatically. This will be the default behavior in future versions of - # rspec-rails. - config.infer_base_class_for_anonymous_controllers = false - - # Show retries in test output - config.verbose_retry = true - - # Force colored output, whether or not the output is a TTY - config.color_mode = :on - - # Force use of expect (over should) - config.expect_with :rspec do |expectations| - expectations.syntax = :expect - - # This option will default to `true` in RSpec 4. It makes the `description` - # and `failure_message` of custom matchers include text for helper methods - # defined using `chain`, e.g.: - # be_bigger_than(2).and_smaller_than(4).description - # # => "be bigger than 2 and smaller than 4" - # ...rather than: - # # => "be bigger than 2" - expectations.include_chain_clauses_in_custom_matcher_descriptions = true - end - - # rspec-mocks config goes here. You can use an alternate test double - # library (such as bogus or mocha) by changing the `mock_with` option here. - config.mock_with :rspec do |mocks| - # We use too many mocks at the moment. Activating the following - # feature fails a lot of specs. We should clean it up over time. - # - # Prevents you from mocking or stubbing a method that does not exist on - # a real object. This is generally recommended, and will default to - # `true` in RSpec 4. - # mocks.verify_partial_doubles = true - end - - # This option will default to `:apply_to_host_groups` in RSpec 4 (and will - # have no way to turn it off -- the option exists only for backwards - # compatibility in RSpec 3). It causes shared context metadata to be - # inherited by the metadata hash of host groups and examples, rather than - # triggering implicit auto-inclusion in groups with matching metadata. - config.shared_context_metadata_behavior = :apply_to_host_groups - - # Limits the available syntax to the non-monkey patched syntax that is - # recommended. For more details, see: - # https://rspec.info/features/3-12/rspec-core/configuration/zero-monkey-patching-mode/ - config.disable_monkey_patching! - - # Many RSpec users commonly either run the entire suite or an individual - # file, and it's useful to allow more verbose output when running an - # individual spec file. - if config.files_to_run.one? - # Use the documentation formatter for detailed output, - # unless a formatter has already been configured - # (e.g. via a command-line flag). - config.default_formatter = "doc" - end - - config.define_derived_metadata(file_path: %r{/spec/lib/tasks/}) do |metadata| - metadata[:type] = :rake - end - - # Reset locale for all specs. - config.around(:each) do |example| - locale = ENV.fetch('LOCALE', 'en_TST') - I18n.with_locale(locale) { example.run } - end - - # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. - config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } - - # Reset all feature toggles to prevent leaking. - config.before(:each) do - Flipper.features.each(&:remove) - OpenFoodNetwork::FeatureToggle.setup! - end - - config.before(:each, :feature) do |example| - feature = example.metadata[:feature].to_s - - unless OpenFoodNetwork::FeatureToggle::CURRENT_FEATURES.key?(feature) - raise "Unkown feature: #{feature}" - end - - Flipper.enable(feature) - end - - # Enable caching in any specs tagged with `caching: true`. - config.around(:each, :caching) do |example| - caching = ActionController::Base.perform_caching - ActionController::Base.perform_caching = example.metadata[:caching] - example.run - ActionController::Base.perform_caching = caching - end - - # Show javascript errors in test output with `js_debug: true` - config.after(:each, :js_debug) do - errors = page.driver.browser.manage.logs.get(:browser) - if errors.present? - message = errors.map(&:message).join("\n") - puts message - end - end - - # Appends Stripe gem version to VCR cassette directory with ':stripe_version' flag - # - # When the Stripe gem is updated, we should re-record these cassettes: - # - # ./script/test-stripe-live - # - config.around(:each, :stripe_version) do |example| - stripe_version = "Stripe-v#{Stripe::VERSION}" - cassette_library_dir, default_cassette_options = nil, nil - - VCR.configure do |vcr_config| - cassette_library_dir = vcr_config.cassette_library_dir - default_cassette_options = vcr_config.default_cassette_options - vcr_config.cassette_library_dir += "/#{stripe_version}" - vcr_config.default_cassette_options = { record: :none } if ENV["CI"] - end - - example.run - - VCR.configure do |vcr_config| - vcr_config.cassette_library_dir = cassette_library_dir - vcr_config.default_cassette_options = default_cassette_options - end - end - - # Ensure we start with consistent config settings - config.before(:each) do - reset_spree_preferences do |spree_config| - # These are all settings that differ from Spree's defaults - spree_config.shipping_instructions = true - end - CurrentConfig.clear_all - end - - # Don't validate our invalid test data with expensive network requests. - config.before(:each) do - allow_any_instance_of(ValidEmail2::Address).to receive_messages( - valid_mx?: true, - valid_strict_mx?: true, - mx_server_is_in?: false - ) - end - - # Webmock raises errors that inherit directly from Exception (not StandardError). - # The messages contain useful information for debugging stubbed requests to external - # services (in tests), but they normally don't appear in the test output. - config.before(:all) do - ApplicationController.class_eval do - rescue_from WebMock::NetConnectNotAllowedError, with: :handle_webmock_error - - def handle_webmock_error(exception) - raise exception.message - end - end - end - - config.infer_spec_type_from_file_location! - - # You can use `rspec -n` to run only failed specs. - config.example_status_persistence_file_path = "tmp/rspec-status.txt" - - config.include_context "rake", type: :rake - - # Helpers - config.include FactoryBot::Syntax::Methods - config.include JsonSpec::Helpers - - config.include Rails.application.routes.url_helpers - config.include Spree::UrlHelpers - config.include Spree::MoneyHelper - config.include Spree::PaymentHelper - config.include PreferencesHelper - config.include OpenFoodNetwork::FiltersHelper - config.include OpenFoodNetwork::EnterpriseGroupsHelper - config.include OpenFoodNetwork::HtmlHelper - config.include ActiveSupport::Testing::TimeHelpers - config.include ActionView::Helpers::DateHelper - config.include OpenFoodNetwork::PerformanceHelper - config.include ActiveJob::TestHelper - config.include ReportsHelper - config.include TomSelectHelper, type: :system - - config.include ViewComponent::TestHelpers, type: :component - - config.include ControllerRequestsHelper, type: :controller - config.include Devise::Test::ControllerHelpers, type: :controller - config.include OpenFoodNetwork::ApiHelper, type: :controller - config.include OpenFoodNetwork::ControllerHelper, type: :controller - - config.include Devise::Test::IntegrationHelpers, type: :request - - config.include Features::DatepickerHelper, type: :system - config.include Features::TrixEditorHelper, type: :system - config.include DownloadsHelper, type: :system - config.include ReportsHelper, type: :system - config.include ProductsHelper, type: :system -end diff --git a/spec/reflex_helper.rb b/spec/reflex_helper.rb index 4f36f3b6f8..9550f27f46 100644 --- a/spec/reflex_helper.rb +++ b/spec/reflex_helper.rb @@ -1,4 +1,3 @@ # frozen_string_literal: true -require "base_spec_helper" require "stimulus_reflex_testing/rspec" diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 7cbb05ea10..2078c0a3ca 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,291 @@ # frozen_string_literal: true -require 'base_spec_helper' +# This file defines configurations that are universal to all spec types (feature, system, etc) + +ENV["RAILS_ENV"] ||= 'test' + +# for full configuration, see .simplecov +require 'simplecov' if ENV["COVERAGE"] + +require 'pry' unless ENV['CI'] +require 'view_component/test_helpers' + +require_relative "../config/environment" +require 'rspec/rails' +require 'rspec/retry' +require 'capybara' +require 'paper_trail/frameworks/rspec' +require "factory_bot_rails" +require 'database_cleaner' + +require 'shoulda/matchers' +Shoulda::Matchers.configure do |config| + config.integrate do |with| + with.test_framework :rspec + with.library :rails + end +end + +require 'knapsack_pro' +KnapsackPro::Adapters::RSpecAdapter.bind + +if ENV["COVERAGE"] && defined?(SimpleCov) + KnapsackPro::Hooks::Queue.before_queue do + SimpleCov.command_name("rspec_ci_node_#{KnapsackPro::Config::Env.ci_node_index}") + end +end + +# Allow connections to selenium whilst raising errors when connecting to external sites +require 'webmock/rspec' +WebMock.enable! +WebMock.disable_net_connect!( + allow_localhost: true, + allow: ['chromedriver.storage.googleapis.com'] +) + +# Requires supporting ruby files with custom matchers and macros, etc, +# in spec/support/ and its subdirectories. +Rails.root.glob("spec/support/**/*.rb").sort.each { |f| require f } + +Capybara.server = :puma, { Silent: true } +Capybara.disable_animation = true + +Capybara.configure do |config| + config.match = :prefer_exact + config.ignore_hidden_elements = true +end + +FactoryBot.use_parent_strategy = false +FactoryBot::SyntaxRunner.include FileHelper + +# raise I18n exception handler +I18n.exception_handler = proc do |exception, *_| + raise exception.to_exception +end + +# Disable timestamp check for test environment +InvisibleCaptcha.timestamp_enabled = false + +InvisibleCaptcha.spinner_enabled = false + +RSpec.configure do |config| + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + # + # Setting this to true keeps the database clean by rolling back any changes. + config.use_transactional_fixtures = true + + # Some tests don't work within a transaction. Then we use DatabaseCleaner. + config.before(:each, concurrency: true) do + config.use_transactional_fixtures = false + DatabaseCleaner.strategy = :deletion, { except: ['spree_countries', 'spree_states'] } + DatabaseCleaner.start + end + config.append_after(:each, concurrency: true) do + DatabaseCleaner.clean + config.use_transactional_fixtures = true + end + + # If true, the base class of anonymous controllers will be inferred + # automatically. This will be the default behavior in future versions of + # rspec-rails. + config.infer_base_class_for_anonymous_controllers = false + + # Show retries in test output + config.verbose_retry = true + + # Force colored output, whether or not the output is a TTY + config.color_mode = :on + + # Force use of expect (over should) + config.expect_with :rspec do |expectations| + expectations.syntax = :expect + + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # We use too many mocks at the moment. Activating the following + # feature fails a lot of specs. We should clean it up over time. + # + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + # mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # https://rspec.info/features/3-12/rspec-core/configuration/zero-monkey-patching-mode/ + config.disable_monkey_patching! + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + + config.define_derived_metadata(file_path: %r{/spec/lib/tasks/}) do |metadata| + metadata[:type] = :rake + end + + # Reset locale for all specs. + config.around(:each) do |example| + locale = ENV.fetch('LOCALE', 'en_TST') + I18n.with_locale(locale) { example.run } + end + + # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. + config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } + + # Reset all feature toggles to prevent leaking. + config.before(:each) do + Flipper.features.each(&:remove) + OpenFoodNetwork::FeatureToggle.setup! + end + + config.before(:each, :feature) do |example| + feature = example.metadata[:feature].to_s + + unless OpenFoodNetwork::FeatureToggle::CURRENT_FEATURES.key?(feature) + raise "Unkown feature: #{feature}" + end + + Flipper.enable(feature) + end + + # Enable caching in any specs tagged with `caching: true`. + config.around(:each, :caching) do |example| + caching = ActionController::Base.perform_caching + ActionController::Base.perform_caching = example.metadata[:caching] + example.run + ActionController::Base.perform_caching = caching + end + + # Show javascript errors in test output with `js_debug: true` + config.after(:each, :js_debug) do + errors = page.driver.browser.manage.logs.get(:browser) + if errors.present? + message = errors.map(&:message).join("\n") + puts message + end + end + + # Appends Stripe gem version to VCR cassette directory with ':stripe_version' flag + # + # When the Stripe gem is updated, we should re-record these cassettes: + # + # ./script/test-stripe-live + # + config.around(:each, :stripe_version) do |example| + stripe_version = "Stripe-v#{Stripe::VERSION}" + cassette_library_dir, default_cassette_options = nil, nil + + VCR.configure do |vcr_config| + cassette_library_dir = vcr_config.cassette_library_dir + default_cassette_options = vcr_config.default_cassette_options + vcr_config.cassette_library_dir += "/#{stripe_version}" + vcr_config.default_cassette_options = { record: :none } if ENV["CI"] + end + + example.run + + VCR.configure do |vcr_config| + vcr_config.cassette_library_dir = cassette_library_dir + vcr_config.default_cassette_options = default_cassette_options + end + end + + # Ensure we start with consistent config settings + config.before(:each) do + reset_spree_preferences do |spree_config| + # These are all settings that differ from Spree's defaults + spree_config.shipping_instructions = true + end + CurrentConfig.clear_all + end + + # Don't validate our invalid test data with expensive network requests. + config.before(:each) do + allow_any_instance_of(ValidEmail2::Address).to receive_messages( + valid_mx?: true, + valid_strict_mx?: true, + mx_server_is_in?: false + ) + end + + # Webmock raises errors that inherit directly from Exception (not StandardError). + # The messages contain useful information for debugging stubbed requests to external + # services (in tests), but they normally don't appear in the test output. + config.before(:all) do + ApplicationController.class_eval do + rescue_from WebMock::NetConnectNotAllowedError, with: :handle_webmock_error + + def handle_webmock_error(exception) + raise exception.message + end + end + end + + config.infer_spec_type_from_file_location! + + # You can use `rspec -n` to run only failed specs. + config.example_status_persistence_file_path = "tmp/rspec-status.txt" + + config.include_context "rake", type: :rake + + # Helpers + config.include FactoryBot::Syntax::Methods + config.include JsonSpec::Helpers + + config.include Rails.application.routes.url_helpers + config.include Spree::UrlHelpers + config.include Spree::MoneyHelper + config.include Spree::PaymentHelper + config.include PreferencesHelper + config.include OpenFoodNetwork::FiltersHelper + config.include OpenFoodNetwork::EnterpriseGroupsHelper + config.include OpenFoodNetwork::HtmlHelper + config.include ActiveSupport::Testing::TimeHelpers + config.include ActionView::Helpers::DateHelper + config.include OpenFoodNetwork::PerformanceHelper + config.include ActiveJob::TestHelper + config.include ReportsHelper + config.include TomSelectHelper, type: :system + + config.include ViewComponent::TestHelpers, type: :component + + config.include ControllerRequestsHelper, type: :controller + config.include Devise::Test::ControllerHelpers, type: :controller + config.include OpenFoodNetwork::ApiHelper, type: :controller + config.include OpenFoodNetwork::ControllerHelper, type: :controller + + config.include Devise::Test::IntegrationHelpers, type: :request + + config.include Features::DatepickerHelper, type: :system + config.include Features::TrixEditorHelper, type: :system + config.include DownloadsHelper, type: :system + config.include ReportsHelper, type: :system + config.include ProductsHelper, type: :system +end diff --git a/spec/system_helper.rb b/spec/system_helper.rb index 2acb7f6534..1c782bb37b 100644 --- a/spec/system_helper.rb +++ b/spec/system_helper.rb @@ -1,6 +1,4 @@ # frozen_string_literal: true -require "base_spec_helper" - # system/support/ files contain system tests configurations and helpers Dir[File.join(__dir__, "system/support/**/*.rb")].each { |file| require file } From dcb6f4676dfdc51d1eeb11cca734a15f2bec0d2f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 20 Jan 2026 16:34:02 +1100 Subject: [PATCH 102/270] Remove all unnecessary spec_helper require statements The `.rspec` file is doing this for us. --- .../catalog/product_import/products_reset_strategy_spec.rb | 2 -- .../order_management/order/stripe_sca_payment_authorize_spec.rb | 2 -- .../spec/services/order_management/order/updater_spec.rb | 2 -- .../spec/services/order_management/stock/coordinator_spec.rb | 2 -- .../spec/services/order_management/stock/estimator_spec.rb | 2 -- .../spec/services/order_management/stock/package_spec.rb | 2 -- .../spec/services/order_management/stock/packer_spec.rb | 2 -- .../spec/services/order_management/stock/prioritizer_spec.rb | 2 -- .../spec/services/order_management/subscriptions/count_spec.rb | 2 -- .../services/order_management/subscriptions/estimator_spec.rb | 2 -- .../spec/services/order_management/subscriptions/form_spec.rb | 2 -- .../order_management/subscriptions/payment_setup_spec.rb | 2 -- .../order_management/subscriptions/proxy_order_syncer_spec.rb | 2 -- .../order_management/subscriptions/stripe_payment_setup_spec.rb | 2 -- .../services/order_management/subscriptions/summarizer_spec.rb | 2 -- .../services/order_management/subscriptions/summary_spec.rb | 2 -- .../services/order_management/subscriptions/validator_spec.rb | 2 -- .../order_management/subscriptions/variants_list_spec.rb | 2 -- engines/web/spec/helpers/cookies_policy_helper_spec.rb | 2 -- spec/components/admin_tooltip_component_spec.rb | 2 -- spec/components/distributor_title_component_spec.rb | 2 -- spec/components/example_component_spec.rb | 2 -- spec/components/modal_component_spec.rb | 2 -- spec/components/vertical_ellipsis_menu_component_spec.rb | 2 -- spec/constraints/feature_toggle_constraint_spec.rb | 2 -- spec/controllers/admin/bulk_line_items_controller_spec.rb | 2 -- spec/controllers/admin/column_preferences_controller_spec.rb | 2 -- spec/controllers/admin/customers_controller_spec.rb | 2 -- spec/controllers/admin/enterprise_fees_controller_spec.rb | 2 -- spec/controllers/admin/enterprises_controller_spec.rb | 1 - spec/controllers/admin/inventory_items_controller_spec.rb | 2 -- spec/controllers/admin/invoice_settings_controller_spec.rb | 2 -- spec/controllers/admin/matomo_settings_controller_spec.rb | 2 -- spec/controllers/admin/order_cycles_controller_spec.rb | 2 -- spec/controllers/admin/product_import_controller_spec.rb | 2 -- spec/controllers/admin/proxy_orders_controller_spec.rb | 2 -- spec/controllers/admin/reports_controller_spec.rb | 2 -- spec/controllers/admin/schedules_controller_spec.rb | 2 -- spec/controllers/admin/stripe_accounts_controller_spec.rb | 2 -- .../admin/stripe_connect_settings_controller_spec.rb | 2 -- .../admin/subscription_line_items_controller_spec.rb | 2 -- spec/controllers/admin/subscriptions_controller_spec.rb | 2 -- spec/controllers/admin/tag_rules_controller_spec.rb | 2 -- .../controllers/admin/terms_of_service_files_controller_spec.rb | 2 -- spec/controllers/admin/variant_overrides_controller_spec.rb | 2 -- spec/controllers/api/v0/base_controller_spec.rb | 2 -- spec/controllers/api/v0/customers_controller_spec.rb | 2 -- spec/controllers/api/v0/enterprise_fees_controller_spec.rb | 2 -- spec/controllers/api/v0/enterprises_controller_spec.rb | 2 -- spec/controllers/api/v0/exchange_products_controller_spec.rb | 2 -- spec/controllers/api/v0/logos_controller_spec.rb | 2 -- spec/controllers/api/v0/order_cycles_controller_spec.rb | 2 -- spec/controllers/api/v0/orders_controller_spec.rb | 2 -- spec/controllers/api/v0/product_images_controller_spec.rb | 2 -- spec/controllers/api/v0/products_controller_spec.rb | 1 - spec/controllers/api/v0/promo_images_controller_spec.rb | 2 -- spec/controllers/api/v0/reports/packing_report_spec.rb | 2 -- spec/controllers/api/v0/reports_controller_spec.rb | 2 -- spec/controllers/api/v0/shipments_controller_spec.rb | 2 -- spec/controllers/api/v0/shops_controller_spec.rb | 2 -- spec/controllers/api/v0/states_controller_spec.rb | 2 -- spec/controllers/api/v0/statuses_controller_spec.rb | 2 -- spec/controllers/api/v0/taxons_controller_spec.rb | 2 -- spec/controllers/api/v0/terms_and_conditions_controller_spec.rb | 2 -- spec/controllers/api/v0/variants_controller_spec.rb | 2 -- spec/controllers/base_controller_spec.rb | 2 -- spec/controllers/cart_controller_spec.rb | 2 -- spec/controllers/checkout_controller_spec.rb | 2 -- spec/controllers/concerns/address_transformation_spec.rb | 2 -- spec/controllers/concerns/extra_fields_spec.rb | 2 -- spec/controllers/concerns/raising_parameters_spec.rb | 2 -- spec/controllers/enterprises_controller_spec.rb | 2 -- spec/controllers/groups_controller_spec.rb | 2 -- spec/controllers/line_items_controller_spec.rb | 2 -- spec/controllers/payment_gateways/paypal_controller_spec.rb | 2 -- spec/controllers/payment_gateways/stripe_controller_spec.rb | 2 -- spec/controllers/registration_controller_spec.rb | 2 -- spec/controllers/shop_controller_spec.rb | 2 -- spec/controllers/shops_controller_spec.rb | 2 -- spec/controllers/spree/admin/adjustments_controller_spec.rb | 2 -- spec/controllers/spree/admin/base_controller_spec.rb | 2 -- spec/controllers/spree/admin/countries_controller_spec.rb | 2 -- .../controllers/spree/admin/general_settings_controller_spec.rb | 2 -- spec/controllers/spree/admin/mail_methods_controller_spec.rb | 2 -- .../spree/admin/orders/customer_details_controller_spec.rb | 2 -- spec/controllers/spree/admin/orders/invoices_spec.rb | 2 -- .../admin/orders/payments/payments_controller_refunds_spec.rb | 2 -- .../spree/admin/orders/payments/payments_controller_spec.rb | 2 -- spec/controllers/spree/admin/orders_controller_spec.rb | 2 -- spec/controllers/spree/admin/overview_controller_spec.rb | 2 -- spec/controllers/spree/admin/payment_methods_controller_spec.rb | 2 -- spec/controllers/spree/admin/products_controller_spec.rb | 2 -- .../spree/admin/return_authorizations_controller_spec.rb | 2 -- spec/controllers/spree/admin/search_controller_spec.rb | 2 -- .../spree/admin/shipping_categories_controller_spec.rb | 2 -- .../controllers/spree/admin/shipping_methods_controller_spec.rb | 2 -- spec/controllers/spree/admin/tax_rates_controller_spec.rb | 2 -- spec/controllers/spree/admin/tax_settings_controller_spec.rb | 2 -- spec/controllers/spree/admin/taxons_controller_spec.rb | 2 -- spec/controllers/spree/admin/users_controller_spec.rb | 2 -- spec/controllers/spree/admin/variants_controller_spec.rb | 2 -- spec/controllers/spree/api_keys_controller_spec.rb | 2 -- spec/controllers/spree/credit_cards_controller_spec.rb | 2 -- spec/controllers/spree/orders_controller_spec.rb | 2 -- spec/controllers/spree/user_sessions_controller_spec.rb | 2 -- spec/controllers/spree/users_controller_spec.rb | 2 -- spec/controllers/stripe/callbacks_controller_spec.rb | 2 -- spec/controllers/stripe/webhooks_controller_spec.rb | 2 -- spec/controllers/user_confirmations_controller_spec.rb | 2 -- spec/controllers/user_passwords_controller_spec.rb | 2 -- spec/controllers/user_registrations_controller_spec.rb | 2 -- spec/controllers/webhook_endpoints_controller_spec.rb | 1 - spec/forms/enterprise_fees_bulk_update_spec.rb | 2 -- spec/helpers/admin/enterprises_helper_spec.rb | 2 -- spec/helpers/admin/orders_helper_spec.rb | 2 -- spec/helpers/admin/products_helper_spec.rb | 2 -- spec/helpers/admin/reports_helper_spec.rb | 2 -- spec/helpers/admin/subscriptions_helper_spec.rb | 2 -- spec/helpers/application_helper_spec.rb | 2 -- spec/helpers/bulk_form_builder_spec.rb | 2 -- spec/helpers/checkout_helper_spec.rb | 2 -- spec/helpers/i18n_helper_spec.rb | 2 -- spec/helpers/injection_helper_spec.rb | 2 -- spec/helpers/link_helper_spec.rb | 2 -- spec/helpers/map_helper_spec.rb | 2 -- spec/helpers/navigation_helper_spec.rb | 2 -- spec/helpers/order_cycles_helper_spec.rb | 2 -- spec/helpers/serializer_helper_spec.rb | 2 -- spec/helpers/shop_helper_spec.rb | 1 - spec/helpers/spree/admin/base_helper_spec.rb | 2 -- spec/helpers/spree/admin/general_settings_helper_spec.rb | 2 -- spec/helpers/spree/admin/orders_helper_spec.rb | 2 -- spec/helpers/spree/admin/tax_categories_helper_spec.rb | 2 -- spec/helpers/spree/base_helper_spec.rb | 2 -- spec/helpers/spree/orders_helper_spec.rb | 2 -- spec/helpers/tax_helper_spec.rb | 2 -- spec/helpers/terms_and_conditions_helper_spec.rb | 2 -- spec/jobs/amend_backorder_job_spec.rb | 2 -- spec/jobs/backorder_job_spec.rb | 2 -- spec/jobs/bulk_invoice_job_spec.rb | 2 -- spec/jobs/complete_backorder_job_spec.rb | 2 -- spec/jobs/connect_app_job_spec.rb | 2 -- spec/jobs/heartbeat_job_spec.rb | 2 -- spec/jobs/job_logger_spec.rb | 2 -- spec/jobs/open_order_cycle_job_spec.rb | 2 -- spec/jobs/order_cycle_closing_job_spec.rb | 2 -- spec/jobs/order_cycle_notification_job_spec.rb | 2 -- spec/jobs/report_job_spec.rb | 2 -- spec/jobs/stock_sync_job_spec.rb | 2 -- spec/jobs/subscription_confirm_job_spec.rb | 2 -- spec/jobs/subscription_placement_job_spec.rb | 2 -- spec/jobs/trigger_order_cycles_to_open_job_spec.rb | 2 -- spec/jobs/webhook_delivery_job_spec.rb | 2 -- spec/lib/action_dispatch/request_spec.rb | 2 -- spec/lib/i18n_digests_spec.rb | 2 -- spec/lib/open_food_network/address_finder_spec.rb | 1 - spec/lib/open_food_network/enterprise_fee_applicator_spec.rb | 1 - spec/lib/open_food_network/enterprise_fee_calculator_spec.rb | 1 - spec/lib/open_food_network/enterprise_injection_data_spec.rb | 1 - spec/lib/open_food_network/enterprise_issue_validator_spec.rb | 1 - spec/lib/open_food_network/feature_toggle_spec.rb | 2 -- spec/lib/open_food_network/i18n_config_spec.rb | 1 - spec/lib/open_food_network/i18n_inflections_spec.rb | 1 - spec/lib/open_food_network/order_cycle_form_applicator_spec.rb | 2 -- spec/lib/open_food_network/order_cycle_permissions_spec.rb | 1 - spec/lib/open_food_network/permissions_spec.rb | 1 - spec/lib/open_food_network/property_merge_spec.rb | 2 -- spec/lib/open_food_network/referer_parser_spec.rb | 1 - spec/lib/open_food_network/scope_variant_to_hub_spec.rb | 1 - spec/lib/open_food_network/scope_variants_for_search_spec.rb | 1 - spec/lib/open_food_network/tag_rule_applicator_spec.rb | 1 - spec/lib/reports/bulk_coop_report_spec.rb | 2 -- spec/lib/reports/customers_report_spec.rb | 2 -- spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb | 2 -- .../enterprise_fee_summary_report_spec.rb | 2 -- .../enterprise_fees_with_tax_report_by_producer_spec.rb | 2 -- spec/lib/reports/enterprise_fee_summary/parameters_spec.rb | 2 -- spec/lib/reports/enterprise_fee_summary/permissions_spec.rb | 2 -- .../enterprise_fee_summary/renderers/csv_renderer_spec.rb | 2 -- .../enterprise_fee_summary/renderers/html_renderer_spec.rb | 2 -- .../report_data/enterprise_fee_type_total_spec.rb | 2 -- spec/lib/reports/enterprise_fee_summary/summarizer_spec.rb | 2 -- spec/lib/reports/frontend_data_spec.rb | 2 -- spec/lib/reports/lettuce_share_report_spec.rb | 2 -- spec/lib/reports/line_items_spec.rb | 2 -- spec/lib/reports/order_cycle_management_report_spec.rb | 2 -- spec/lib/reports/orders_and_distributors_report_spec.rb | 2 -- .../order_cycle_customer_totals_report_spec.rb | 2 -- .../order_cycle_distributor_totals_by_supplier_report_spec.rb | 2 -- .../order_cycle_supplier_totals_by_distributor_report_spec.rb | 2 -- .../orders_cycle_supplier_totals_report_spec.rb | 2 -- spec/lib/reports/packing/packing_report_spec.rb | 2 -- spec/lib/reports/products_and_inventory_report_spec.rb | 2 -- spec/lib/reports/report_loader_spec.rb | 2 -- spec/lib/reports/report_metadata_builder_spec.rb | 2 -- spec/lib/reports/report_renderer_spec.rb | 2 -- spec/lib/reports/report_spec.rb | 2 -- spec/lib/reports/sales_tax_report_spec.rb | 2 -- spec/lib/reports/sales_tax_totals_by_order_spec.rb | 2 -- spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb | 2 -- spec/lib/reports/users_and_enterprises_report_spec.rb | 2 -- spec/lib/reports/xero_invoices_report_spec.rb | 2 -- spec/lib/spree/core/environment_spec.rb | 2 -- spec/lib/spree/core/mail_settings_spec.rb | 2 -- spec/lib/spree/core/product_duplicator_spec.rb | 2 -- spec/lib/spree/core/token_resource_spec.rb | 2 -- spec/lib/spree/localized_number_spec.rb | 1 - spec/lib/spree/money_spec.rb | 2 -- spec/lib/stripe/account_connector_spec.rb | 1 - spec/lib/stripe/authorize_response_patcher_spec.rb | 2 -- spec/lib/stripe/credit_card_cloner_spec.rb | 1 - spec/lib/stripe/credit_card_remover_spec.rb | 1 - spec/lib/stripe/payment_intent_validator_spec.rb | 1 - spec/lib/stripe/profile_storer_spec.rb | 2 -- spec/lib/stripe/webhook_handler_spec.rb | 1 - spec/lib/tasks/data/remove_transient_data_spec.rb | 1 - spec/lib/tasks/data/truncate_data_rake_spec.rb | 2 -- spec/lib/tasks/data/truncate_data_spec.rb | 1 - spec/lib/tasks/enterprises_rake_spec.rb | 2 -- spec/lib/tasks/import_product_images_rake_spec.rb | 2 -- spec/lib/tasks/reset_spec.rb | 2 -- spec/lib/tasks/sample_data_rake_spec.rb | 2 -- spec/lib/tasks/simplecov_spec.rb | 2 -- spec/lib/tasks/users_rake_spec.rb | 1 - spec/mailers/backorder_mailer_spec.rb | 2 -- spec/mailers/enterprise_mailer_spec.rb | 2 -- spec/mailers/mail_interceptor_spec.rb | 2 -- spec/mailers/order_mailer_spec.rb | 2 -- spec/mailers/payment_mailer_spec.rb | 2 -- spec/mailers/producer_mailer_spec.rb | 1 - spec/mailers/report_mailer_spec.rb | 2 -- spec/mailers/shipment_mailer_spec.rb | 2 -- spec/mailers/subscription_mailer_spec.rb | 2 -- spec/mailers/test_mailer_spec.rb | 2 -- spec/mailers/user_mailer_spec.rb | 2 -- .../20240213044159_copy_oidc_data_to_oidc_accounts_spec.rb | 2 +- spec/migrations/20240502035220_update_n8n_url_spec.rb | 2 +- .../20240510033206_sanitize_enterprise_long_description_spec.rb | 2 +- ...41011071014_update_item_name_to_product_in_od_report_spec.rb | 2 +- spec/migrations/20241023054951_sanitize_html_attributes_spec.rb | 2 +- .../20241030025540_copy_subject_on_semantic_links_spec.rb | 2 +- spec/migrations/convert_stripe_connect_to_stripe_sca_spec.rb | 1 - spec/migrations/migrate_admin_tax_amounts_spec.rb | 1 - spec/migrations/migrate_customer_names_spec.rb | 1 - spec/migrations/migrate_cvv_message_to_redirect_auth_url.rb | 1 - spec/migrations/update_enterprise_instagram_links_spec.rb | 2 -- spec/models/adjustment_metadata_spec.rb | 2 -- spec/models/application_record_spec.rb | 2 -- spec/models/calculator/flat_percent_item_total_spec.rb | 2 -- spec/models/calculator/flat_percent_per_item_spec.rb | 2 -- spec/models/calculator/flat_rate_spec.rb | 2 -- spec/models/calculator/flexi_rate_spec.rb | 2 -- spec/models/calculator/per_item_spec.rb | 2 -- spec/models/calculator/price_sack_spec.rb | 2 -- spec/models/calculator/weight_spec.rb | 2 -- spec/models/column_preference_spec.rb | 2 -- spec/models/concerns/balance_spec.rb | 2 -- spec/models/concerns/calculated_adjustments_spec.rb | 2 -- spec/models/concerns/order_shipment_spec.rb | 2 -- spec/models/concerns/variant_stock_spec.rb | 2 -- spec/models/connected_app_spec.rb | 2 -- spec/models/connected_apps/vine_spec.rb | 2 -- spec/models/content_configuration_spec.rb | 2 -- spec/models/coordinator_fee_spec.rb | 2 -- spec/models/custom_tab_spec.rb | 2 -- spec/models/customer_spec.rb | 2 -- spec/models/database_spec.rb | 2 -- spec/models/dfc_permission_spec.rb | 2 -- spec/models/enterprise_caching_spec.rb | 2 -- spec/models/enterprise_fee_adjustments_spec.rb | 2 -- spec/models/enterprise_fee_spec.rb | 2 -- spec/models/enterprise_group_spec.rb | 2 -- spec/models/enterprise_relationship_spec.rb | 2 -- spec/models/enterprise_spec.rb | 2 -- spec/models/exchange_spec.rb | 2 -- spec/models/invoice/data_presenter/line_item_spec.rb | 2 -- spec/models/invoice/data_presenter_spec.rb | 2 -- spec/models/invoice_spec.rb | 2 -- spec/models/oidc_account_spec.rb | 2 -- spec/models/order_balance_spec.rb | 2 -- spec/models/order_cycle_spec.rb | 2 -- spec/models/product_import/entry_processor_spec.rb | 2 -- spec/models/product_import/entry_validator_spec.rb | 2 -- spec/models/product_import/inventory_reset_strategy_spec.rb | 2 -- spec/models/product_import/reset_absent_spec.rb | 2 -- spec/models/product_import/settings_spec.rb | 2 -- spec/models/product_import/spreadsheet_entry_spec.rb | 1 - spec/models/product_importer_spec.rb | 1 - spec/models/proxy_order_spec.rb | 2 -- spec/models/report_blob_spec.rb | 2 -- spec/models/semantic_link_spec.rb | 2 -- spec/models/spree/ability_spec.rb | 1 - spec/models/spree/address_spec.rb | 2 -- spec/models/spree/addresses_spec.rb | 2 -- spec/models/spree/adjustment_spec.rb | 2 -- spec/models/spree/app_configuration_spec.rb | 2 -- spec/models/spree/asset_spec.rb | 2 -- spec/models/spree/calculator_spec.rb | 2 -- spec/models/spree/credit_card_spec.rb | 2 -- spec/models/spree/gateway/stripe_sca_spec.rb | 2 -- spec/models/spree/gateway_spec.rb | 2 -- spec/models/spree/gateway_tagging_spec.rb | 2 -- spec/models/spree/image_spec.rb | 2 -- spec/models/spree/inventory_unit_spec.rb | 2 -- spec/models/spree/line_item_spec.rb | 2 -- spec/models/spree/order/address_spec.rb | 2 -- spec/models/spree/order/adjustments_spec.rb | 2 -- spec/models/spree/order/callbacks_spec.rb | 2 -- spec/models/spree/order/checkout_spec.rb | 2 -- spec/models/spree/order/payment_spec.rb | 2 -- spec/models/spree/order/state_machine_spec.rb | 2 -- spec/models/spree/order/tax_spec.rb | 2 -- spec/models/spree/order_contents_spec.rb | 2 -- spec/models/spree/order_inventory_spec.rb | 2 -- spec/models/spree/order_spec.rb | 2 -- spec/models/spree/payment_method_spec.rb | 2 -- spec/models/spree/payment_spec.rb | 2 -- spec/models/spree/preference_spec.rb | 2 -- spec/models/spree/preferences/configuration_spec.rb | 2 -- spec/models/spree/preferences/preferable_spec.rb | 2 -- spec/models/spree/preferences/store_spec.rb | 2 -- spec/models/spree/price_spec.rb | 2 -- spec/models/spree/product_property_spec.rb | 2 -- spec/models/spree/product_sort_by_stocks_spec.rb | 2 -- spec/models/spree/product_spec.rb | 1 - spec/models/spree/return_authorization_spec.rb | 2 -- spec/models/spree/shipment_spec.rb | 1 - spec/models/spree/shipping_method_spec.rb | 2 -- spec/models/spree/shipping_rate_spec.rb | 2 -- spec/models/spree/state_spec.rb | 2 -- spec/models/spree/stock/availability_validator_spec.rb | 2 -- spec/models/spree/stock/quantifier_spec.rb | 2 -- spec/models/spree/stock_item_spec.rb | 2 -- spec/models/spree/tax_category_spec.rb | 2 -- spec/models/spree/tax_rate_spec.rb | 2 -- spec/models/spree/taxon_spec.rb | 2 -- spec/models/spree/user_spec.rb | 2 -- spec/models/spree/variant_spec.rb | 1 - spec/models/spree/variant_stock_spec.rb | 2 -- spec/models/spree/zone_spec.rb | 2 -- spec/models/stripe_account_spec.rb | 1 - spec/models/subscription_line_item_spec.rb | 2 -- spec/models/subscription_spec.rb | 2 -- spec/models/tag_rule/filter_order_cycles_spec.rb | 2 -- spec/models/tag_rule/filter_payment_methods_spec.rb | 2 -- spec/models/tag_rule/filter_products_spec.rb | 2 -- spec/models/tag_rule/filter_shipping_methods_spec.rb | 2 -- spec/models/tag_rule/filter_variants_spec.rb | 2 -- spec/models/tag_rule_spec.rb | 2 -- spec/models/terms_of_service_file_spec.rb | 2 -- spec/models/variant_override_spec.rb | 2 -- spec/models/voucher_spec.rb | 2 -- spec/models/vouchers/flat_rate_spec.rb | 2 -- spec/models/vouchers/percentage_rate_spec.rb | 2 -- spec/models/vouchers/vine_spec.rb | 2 -- spec/models/webhook_endpoint_spec.rb | 2 -- spec/queries/batch_taggable_tags_query_spec.rb | 2 -- spec/queries/complete_orders_with_balance_query_spec.rb | 2 -- spec/queries/complete_visible_orders_query_spec.rb | 2 -- spec/queries/customers_with_balance_query_spec.rb | 2 -- spec/queries/outstanding_balance_query_spec.rb | 2 -- spec/queries/payments_requiring_action_query_spec.rb | 2 -- spec/queries/product_scope_query_spec.rb | 2 -- spec/requests/admin/connected_apps_controller_spec.rb | 2 -- spec/requests/admin/enterprises_controller_spec.rb | 2 -- spec/requests/admin/images_spec.rb | 2 -- spec/requests/admin/product_import_spec.rb | 2 -- spec/requests/admin/products_v3_spec.rb | 2 -- spec/requests/admin/vouchers_spec.rb | 2 -- spec/requests/api/routes_spec.rb | 1 - spec/requests/api_docs_spec.rb | 2 -- spec/requests/checkout/concurrency_spec.rb | 2 -- spec/requests/checkout/paypal_spec.rb | 2 -- spec/requests/checkout/routes_spec.rb | 2 -- spec/requests/checkout/stripe_sca_spec.rb | 2 -- spec/requests/errors_spec.rb | 2 -- spec/requests/home_controller_spec.rb | 2 -- spec/requests/large_request_spec.rb | 1 - spec/requests/omniauth_callbacks_controller_spec.rb | 2 -- spec/requests/payments_controller_spec.rb | 2 -- spec/requests/spree/admin/overview_spec.rb | 2 -- spec/requests/spree/admin/payments_spec.rb | 2 -- spec/requests/voucher_adjustments_spec.rb | 2 -- spec/requests/well_known_spec.rb | 2 -- spec/routing/stripe_spec.rb | 2 -- spec/serializers/api/admin/customer_serializer_spec.rb | 2 -- .../api/admin/customer_with_balance_serializer_spec.rb | 2 -- spec/serializers/api/admin/enterprise_serializer_spec.rb | 2 -- spec/serializers/api/admin/exchange_serializer_spec.rb | 1 - .../admin/for_order_cycle/supplied_product_serializer_spec.rb | 2 -- spec/serializers/api/admin/index_enterprise_serializer_spec.rb | 2 -- spec/serializers/api/admin/order_cycle_serializer_spec.rb | 2 -- spec/serializers/api/admin/order_serializer_spec.rb | 2 -- spec/serializers/api/admin/product_serializer_spec.rb | 2 -- .../api/admin/subscription_customer_serializer_spec.rb | 1 - .../api/admin/subscription_line_item_serializer_spec.rb | 2 -- spec/serializers/api/admin/variant_serializer_spec.rb | 2 -- spec/serializers/api/cached_enterprise_serializer_spec.rb | 2 -- spec/serializers/api/credit_card_serializer_spec.rb | 2 -- spec/serializers/api/current_order_serializer_spec.rb | 2 -- spec/serializers/api/enterprise_serializer_spec.rb | 2 -- .../api/enterprise_shopfront_list_serializer_spec.rb | 2 -- spec/serializers/api/enterprise_shopfront_serializer_spec.rb | 2 -- spec/serializers/api/group_list_serializer_spec.rb | 2 -- spec/serializers/api/order_cycle_serializer_spec.rb | 2 -- spec/serializers/api/order_serializer_spec.rb | 2 -- spec/serializers/api/product_serializer_spec.rb | 1 - spec/serializers/api/shipping_method_serializer_spec.rb | 2 -- spec/serializers/api/uncached_enterprise_serializer_spec.rb | 2 -- spec/serializers/api/variant_serializer_spec.rb | 2 -- spec/services/address_geocoder_spec.rb | 2 -- spec/services/alert_spec.rb | 2 -- spec/services/backorder_updater_spec.rb | 2 -- spec/services/cache_service_spec.rb | 2 -- spec/services/cap_quantity_spec.rb | 2 -- spec/services/cart_service_spec.rb | 2 -- spec/services/checkout/payment_method_fetcher_spec.rb | 2 -- spec/services/checkout/post_checkout_actions_spec.rb | 2 -- spec/services/checkout/stripe_redirect_spec.rb | 2 -- spec/services/content_sanitizer_spec.rb | 2 -- spec/services/default_shipping_category_spec.rb | 2 -- spec/services/embedded_page_service_spec.rb | 2 -- spec/services/exchange_products_renderer_spec.rb | 2 -- spec/services/exchange_variant_bulk_updater_spec.rb | 2 -- spec/services/fdc_backorderer_spec.rb | 2 -- spec/services/fdc_offer_broker_spec.rb | 2 -- spec/services/fdc_url_builder_spec.rb | 2 -- spec/services/file_path_sanitizer_spec.rb | 2 -- spec/services/html_sanitizer_spec.rb | 2 -- spec/services/image_importer_spec.rb | 2 -- spec/services/invoice_data_generator_spec.rb | 2 -- spec/services/invoice_renderer_spec.rb | 2 -- spec/services/mail_configuration_spec.rb | 2 -- spec/services/order_cycles/clone_service_spec.rb | 2 -- spec/services/order_cycles/distributed_products_service_spec.rb | 2 -- spec/services/order_cycles/distributed_variants_service_spec.rb | 2 -- spec/services/order_cycles/form_service_spec.rb | 2 -- spec/services/order_cycles/warning_service_spec.rb | 2 -- spec/services/order_cycles/webhook_service_spec.rb | 2 -- spec/services/orders/available_payment_methods_service_spec.rb | 2 -- spec/services/orders/available_shipping_methods_service_spec.rb | 2 -- spec/services/orders/cart_reset_service_spec.rb | 2 -- spec/services/orders/check_stock_service_spec.rb | 2 -- spec/services/orders/checkout_restart_service_spec.rb | 2 -- spec/services/orders/compare_invoice_service_spec.rb | 2 -- spec/services/orders/customer_cancellation_service_spec.rb | 2 -- spec/services/orders/factory_service_spec.rb | 2 -- spec/services/orders/find_payment_service_spec.rb | 2 -- spec/services/orders/generate_invoice_service_spec.rb | 2 -- spec/services/orders/handle_fees_service_spec.rb | 2 -- spec/services/orders/mask_data_service_spec.rb | 2 -- spec/services/orders/order_tax_adjustments_fetcher_spec.rb | 2 -- spec/services/orders/sync_service_spec.rb | 2 -- spec/services/orders/workflow_service_spec.rb | 2 -- spec/services/path_checker_spec.rb | 2 -- spec/services/payments/status_changed_listener_service_spec.rb | 2 -- spec/services/payments/webhook_payload_spec.rb | 2 -- spec/services/payments/webhook_service_spec.rb | 2 -- spec/services/paypal_items_builder_spec.rb | 2 -- spec/services/permissions/order_spec.rb | 2 -- spec/services/permitted_attributes/order_cycle_spec.rb | 2 -- spec/services/permitted_attributes/user_spec.rb | 2 -- spec/services/place_proxy_order_spec.rb | 2 -- spec/services/process_payment_intent_spec.rb | 2 -- spec/services/product_filters_spec.rb | 2 -- spec/services/product_tag_rules_filterer_spec.rb | 2 -- spec/services/products_renderer_spec.rb | 2 -- spec/services/search_orders_spec.rb | 2 -- spec/services/sets/model_set_spec.rb | 2 -- spec/services/sets/product_set_spec.rb | 2 -- spec/services/shop/order_cycles_list_spec.rb | 2 -- spec/services/shops_list_service_spec.rb | 2 -- spec/services/stripe_payment_status_spec.rb | 2 -- spec/services/tax_rate_finder_spec.rb | 2 -- spec/services/tax_rate_updater_spec.rb | 2 -- spec/services/terms_of_service_spec.rb | 2 -- spec/services/unit_prices_spec.rb | 2 -- spec/services/upload_sanitizer_spec.rb | 2 -- spec/services/url_generator_spec.rb | 2 -- spec/services/user_default_address_setter_spec.rb | 2 -- spec/services/user_locale_setter_spec.rb | 2 -- spec/services/variant_overrides_indexed_spec.rb | 2 -- spec/services/variant_tag_rules_filterer_spec.rb | 2 -- spec/services/variant_units/option_value_namer_spec.rb | 2 -- spec/services/variants_stock_levels_spec.rb | 2 -- spec/services/vine/api_service_spec.rb | 2 -- spec/services/vine/jwt_service_spec.rb | 2 -- spec/services/vine/voucher_redeemer_service_spec.rb | 2 -- spec/services/vine/voucher_validator_service_spec.rb | 2 -- spec/services/voucher_adjustments_service_spec.rb | 2 -- spec/services/weights_and_measures_spec.rb | 2 -- spec/swagger_helper.rb | 2 -- spec/validators/date_time_string_validator_spec.rb | 2 -- spec/validators/integer_array_validator_spec.rb | 2 -- spec/views/admin/products_v3/_filters.html.haml_spec.rb | 2 -- spec/views/admin/shared/_attachment_field.html.haml_spec.rb | 2 -- spec/views/checkout/_voucher_section.html.haml_spec.rb | 2 -- spec/views/layouts/darkswarm.html.haml_spec.rb | 2 -- spec/views/layouts/registration.html.haml_spec.rb | 2 -- spec/views/registration/steps/_details.html.haml_spec.rb | 2 -- spec/views/spree/admin/orders/edit.html.haml_spec.rb | 2 -- spec/views/spree/admin/orders/index.html.haml_spec.rb | 2 -- spec/views/spree/admin/orders/invoice.html.haml_spec.rb | 2 -- spec/views/spree/admin/payment_methods/index.html.haml_spec.rb | 2 -- spec/views/spree/orders/edit.html.haml_spec.rb | 2 -- spec/views/spree/orders/show.html.haml_spec.rb | 2 -- spec/views/spree/shared/_order_details.html.haml_spec.rb | 2 -- 507 files changed, 6 insertions(+), 965 deletions(-) diff --git a/engines/catalog/spec/services/catalog/product_import/products_reset_strategy_spec.rb b/engines/catalog/spec/services/catalog/product_import/products_reset_strategy_spec.rb index cebfa298b3..76bbfe0f46 100644 --- a/engines/catalog/spec/services/catalog/product_import/products_reset_strategy_spec.rb +++ b/engines/catalog/spec/services/catalog/product_import/products_reset_strategy_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Catalog::ProductImport::ProductsResetStrategy do let(:products_reset) { described_class.new(excluded_items_ids) } diff --git a/engines/order_management/spec/services/order_management/order/stripe_sca_payment_authorize_spec.rb b/engines/order_management/spec/services/order_management/order/stripe_sca_payment_authorize_spec.rb index ab1a17293f..07e6e5d727 100644 --- a/engines/order_management/spec/services/order_management/order/stripe_sca_payment_authorize_spec.rb +++ b/engines/order_management/spec/services/order_management/order/stripe_sca_payment_authorize_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Order RSpec.describe StripeScaPaymentAuthorize do diff --git a/engines/order_management/spec/services/order_management/order/updater_spec.rb b/engines/order_management/spec/services/order_management/order/updater_spec.rb index ee07f7b143..fb5867c71d 100644 --- a/engines/order_management/spec/services/order_management/order/updater_spec.rb +++ b/engines/order_management/spec/services/order_management/order/updater_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Order::Updater do let(:order) { create(:order) } let(:updater) { OrderManagement::Order::Updater.new(order) } diff --git a/engines/order_management/spec/services/order_management/stock/coordinator_spec.rb b/engines/order_management/spec/services/order_management/stock/coordinator_spec.rb index 9acc53675f..26a72cb73e 100644 --- a/engines/order_management/spec/services/order_management/stock/coordinator_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/coordinator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Stock RSpec.describe Coordinator do diff --git a/engines/order_management/spec/services/order_management/stock/estimator_spec.rb b/engines/order_management/spec/services/order_management/stock/estimator_spec.rb index 0c31ebe454..334e0d2b6f 100644 --- a/engines/order_management/spec/services/order_management/stock/estimator_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/estimator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Stock RSpec.describe Estimator do diff --git a/engines/order_management/spec/services/order_management/stock/package_spec.rb b/engines/order_management/spec/services/order_management/stock/package_spec.rb index 2dc75f88db..e16c29727b 100644 --- a/engines/order_management/spec/services/order_management/stock/package_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/package_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Stock::Package do context "base tests" do let(:variant) { build(:variant, weight: 25.0) } diff --git a/engines/order_management/spec/services/order_management/stock/packer_spec.rb b/engines/order_management/spec/services/order_management/stock/packer_spec.rb index 8aad8ccc83..b3136cf750 100644 --- a/engines/order_management/spec/services/order_management/stock/packer_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/packer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Stock RSpec.describe Packer do diff --git a/engines/order_management/spec/services/order_management/stock/prioritizer_spec.rb b/engines/order_management/spec/services/order_management/stock/prioritizer_spec.rb index 85883e8be9..191a60e7cf 100644 --- a/engines/order_management/spec/services/order_management/stock/prioritizer_spec.rb +++ b/engines/order_management/spec/services/order_management/stock/prioritizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Stock RSpec.describe Prioritizer do diff --git a/engines/order_management/spec/services/order_management/subscriptions/count_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/count_spec.rb index a852130932..f0784bd308 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/count_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/count_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Subscriptions RSpec.describe Count do diff --git a/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb index 88cec9d7bd..f712cdfc2b 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Subscriptions::Estimator do describe "estimating prices for subscription line items" do let!(:subscription) { create(:subscription, with_items: true) } diff --git a/engines/order_management/spec/services/order_management/subscriptions/form_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/form_spec.rb index f484b57c4e..7825d0e1a1 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/form_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/form_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Subscriptions::Form do describe "creating a new subscription" do let!(:shop) { create(:distributor_enterprise) } diff --git a/engines/order_management/spec/services/order_management/subscriptions/payment_setup_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/payment_setup_spec.rb index 297fc841a7..d8e0b0d4c8 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/payment_setup_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/payment_setup_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Subscriptions RSpec.describe PaymentSetup do diff --git a/engines/order_management/spec/services/order_management/subscriptions/proxy_order_syncer_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/proxy_order_syncer_spec.rb index cce655c9c9..430a8b01e6 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/proxy_order_syncer_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/proxy_order_syncer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Subscriptions::ProxyOrderSyncer do describe "initialization" do let!(:subscription) { create(:subscription) } diff --git a/engines/order_management/spec/services/order_management/subscriptions/stripe_payment_setup_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/stripe_payment_setup_spec.rb index 6db96cf112..c8f859da6d 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/stripe_payment_setup_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/stripe_payment_setup_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OrderManagement module Subscriptions RSpec.describe StripePaymentSetup do diff --git a/engines/order_management/spec/services/order_management/subscriptions/summarizer_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/summarizer_spec.rb index 052306a9ac..a8fa674f41 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/summarizer_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/summarizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Subscriptions::Summarizer do let(:order) { create(:order) } let(:summarizer) { described_class.new } diff --git a/engines/order_management/spec/services/order_management/subscriptions/summary_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/summary_spec.rb index f2d69e4485..dd4615af05 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/summary_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/summary_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderManagement::Subscriptions::Summary do let(:summary) { described_class.new(123) } diff --git a/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb index 945b938118..447c4fde79 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/validator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe OrderManagement::Subscriptions::Validator do let(:owner) { create(:user) } let(:shop) { create(:enterprise, name: "Shop", owner:) } diff --git a/engines/order_management/spec/services/order_management/subscriptions/variants_list_spec.rb b/engines/order_management/spec/services/order_management/subscriptions/variants_list_spec.rb index e5bccdf42b..dc457c8075 100644 --- a/engines/order_management/spec/services/order_management/subscriptions/variants_list_spec.rb +++ b/engines/order_management/spec/services/order_management/subscriptions/variants_list_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe OrderManagement::Subscriptions::VariantsList do describe "variant eligibility for subscription" do let!(:shop) { create(:distributor_enterprise) } diff --git a/engines/web/spec/helpers/cookies_policy_helper_spec.rb b/engines/web/spec/helpers/cookies_policy_helper_spec.rb index 81607dbc1b..7f788b771c 100644 --- a/engines/web/spec/helpers/cookies_policy_helper_spec.rb +++ b/engines/web/spec/helpers/cookies_policy_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Web RSpec.describe CookiesPolicyHelper do # keeps global state unchanged diff --git a/spec/components/admin_tooltip_component_spec.rb b/spec/components/admin_tooltip_component_spec.rb index 4e0039dcea..4fb7f0f8c0 100644 --- a/spec/components/admin_tooltip_component_spec.rb +++ b/spec/components/admin_tooltip_component_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe AdminTooltipComponent, type: :component do it "displays the tooltip link" do render_inline(described_class.new(text: "Tooltip description", link_text: "Hover here")) diff --git a/spec/components/distributor_title_component_spec.rb b/spec/components/distributor_title_component_spec.rb index 703a359ecf..869ca5df16 100644 --- a/spec/components/distributor_title_component_spec.rb +++ b/spec/components/distributor_title_component_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe DistributorTitleComponent, type: :component do it "displays distributor title with its name" do render_inline(described_class.new(name: "Freddy's Farm Shop")) diff --git a/spec/components/example_component_spec.rb b/spec/components/example_component_spec.rb index cdb101581c..cbed0fa6ba 100644 --- a/spec/components/example_component_spec.rb +++ b/spec/components/example_component_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ExampleComponent, type: :component do it "displays the h1 with the given parameter" do render_inline(described_class.new(title: "Hello")) diff --git a/spec/components/modal_component_spec.rb b/spec/components/modal_component_spec.rb index e50dbd3d1f..6edb08ec39 100644 --- a/spec/components/modal_component_spec.rb +++ b/spec/components/modal_component_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ModalComponent, type: :component do it "renders default 'data-action' and 'data-controller'" do render_inline(described_class.new(id: "test-id")) diff --git a/spec/components/vertical_ellipsis_menu_component_spec.rb b/spec/components/vertical_ellipsis_menu_component_spec.rb index 3652cfd37c..099c6ab748 100644 --- a/spec/components/vertical_ellipsis_menu_component_spec.rb +++ b/spec/components/vertical_ellipsis_menu_component_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe VerticalEllipsisMenuComponent, type: :component do it "displays the included links" do content = "Edit" diff --git a/spec/constraints/feature_toggle_constraint_spec.rb b/spec/constraints/feature_toggle_constraint_spec.rb index 6738c64480..c07084c84d 100644 --- a/spec/constraints/feature_toggle_constraint_spec.rb +++ b/spec/constraints/feature_toggle_constraint_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe FeatureToggleConstraint do subject { described_class.new("baking") } let(:request) { double(env:) } diff --git a/spec/controllers/admin/bulk_line_items_controller_spec.rb b/spec/controllers/admin/bulk_line_items_controller_spec.rb index 840df6e506..07cd699385 100644 --- a/spec/controllers/admin/bulk_line_items_controller_spec.rb +++ b/spec/controllers/admin/bulk_line_items_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::BulkLineItemsController do describe '#index' do render_views diff --git a/spec/controllers/admin/column_preferences_controller_spec.rb b/spec/controllers/admin/column_preferences_controller_spec.rb index d8d5bcc389..46997b1850 100644 --- a/spec/controllers/admin/column_preferences_controller_spec.rb +++ b/spec/controllers/admin/column_preferences_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::ColumnPreferencesController do include AuthenticationHelper diff --git a/spec/controllers/admin/customers_controller_spec.rb b/spec/controllers/admin/customers_controller_spec.rb index baac706167..2282ea5225 100644 --- a/spec/controllers/admin/customers_controller_spec.rb +++ b/spec/controllers/admin/customers_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::CustomersController do include AuthenticationHelper diff --git a/spec/controllers/admin/enterprise_fees_controller_spec.rb b/spec/controllers/admin/enterprise_fees_controller_spec.rb index 9205d808d7..b3a05e5fb1 100644 --- a/spec/controllers/admin/enterprise_fees_controller_spec.rb +++ b/spec/controllers/admin/enterprise_fees_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Admin::EnterpriseFeesController do before do allow(controller).to receive_messages spree_current_user: super_admin diff --git a/spec/controllers/admin/enterprises_controller_spec.rb b/spec/controllers/admin/enterprises_controller_spec.rb index 3806969b49..db2d06e9e4 100644 --- a/spec/controllers/admin/enterprises_controller_spec.rb +++ b/spec/controllers/admin/enterprises_controller_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'open_food_network/order_cycle_permissions' RSpec.describe Admin::EnterprisesController do diff --git a/spec/controllers/admin/inventory_items_controller_spec.rb b/spec/controllers/admin/inventory_items_controller_spec.rb index 7c5395dc16..3c864681ad 100644 --- a/spec/controllers/admin/inventory_items_controller_spec.rb +++ b/spec/controllers/admin/inventory_items_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::InventoryItemsController do describe "create" do context "json" do diff --git a/spec/controllers/admin/invoice_settings_controller_spec.rb b/spec/controllers/admin/invoice_settings_controller_spec.rb index 8ee561adb5..bf1eaa3d3e 100644 --- a/spec/controllers/admin/invoice_settings_controller_spec.rb +++ b/spec/controllers/admin/invoice_settings_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::InvoiceSettingsController do describe "#update" do let(:params) { diff --git a/spec/controllers/admin/matomo_settings_controller_spec.rb b/spec/controllers/admin/matomo_settings_controller_spec.rb index d3b5924e90..066ee61591 100644 --- a/spec/controllers/admin/matomo_settings_controller_spec.rb +++ b/spec/controllers/admin/matomo_settings_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::MatomoSettingsController do describe "#update" do let(:params) { diff --git a/spec/controllers/admin/order_cycles_controller_spec.rb b/spec/controllers/admin/order_cycles_controller_spec.rb index ff1e405510..9b7a1f5c3c 100644 --- a/spec/controllers/admin/order_cycles_controller_spec.rb +++ b/spec/controllers/admin/order_cycles_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::OrderCyclesController do let!(:distributor_owner) { create(:user) } let(:datetime_confirmation_attrs) { diff --git a/spec/controllers/admin/product_import_controller_spec.rb b/spec/controllers/admin/product_import_controller_spec.rb index 418546ce7f..2ddc90dfd8 100644 --- a/spec/controllers/admin/product_import_controller_spec.rb +++ b/spec/controllers/admin/product_import_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::ProductImportController do describe "#import" do context "when importing into inventory with inventory disabled" do diff --git a/spec/controllers/admin/proxy_orders_controller_spec.rb b/spec/controllers/admin/proxy_orders_controller_spec.rb index ddd4158266..3c4b2475b4 100644 --- a/spec/controllers/admin/proxy_orders_controller_spec.rb +++ b/spec/controllers/admin/proxy_orders_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::ProxyOrdersController do include AuthenticationHelper diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb index d0b6104d8c..6fbf75f98e 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/controllers/admin/reports_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::ReportsController do # Given two distributors and two suppliers let(:bill_address) { create(:address) } diff --git a/spec/controllers/admin/schedules_controller_spec.rb b/spec/controllers/admin/schedules_controller_spec.rb index ee15ea1a61..f2937a4c37 100644 --- a/spec/controllers/admin/schedules_controller_spec.rb +++ b/spec/controllers/admin/schedules_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::SchedulesController do include AuthenticationHelper diff --git a/spec/controllers/admin/stripe_accounts_controller_spec.rb b/spec/controllers/admin/stripe_accounts_controller_spec.rb index 19a199b12d..53ff8dd543 100644 --- a/spec/controllers/admin/stripe_accounts_controller_spec.rb +++ b/spec/controllers/admin/stripe_accounts_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::StripeAccountsController do let(:enterprise) { create(:distributor_enterprise) } diff --git a/spec/controllers/admin/stripe_connect_settings_controller_spec.rb b/spec/controllers/admin/stripe_connect_settings_controller_spec.rb index fa6d800916..17bf7886e8 100644 --- a/spec/controllers/admin/stripe_connect_settings_controller_spec.rb +++ b/spec/controllers/admin/stripe_connect_settings_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::StripeConnectSettingsController do let(:user) { create(:user) } let(:admin) { create(:admin_user) } diff --git a/spec/controllers/admin/subscription_line_items_controller_spec.rb b/spec/controllers/admin/subscription_line_items_controller_spec.rb index 62cc8ee25f..1baa6b5b0b 100644 --- a/spec/controllers/admin/subscription_line_items_controller_spec.rb +++ b/spec/controllers/admin/subscription_line_items_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::SubscriptionLineItemsController do include AuthenticationHelper diff --git a/spec/controllers/admin/subscriptions_controller_spec.rb b/spec/controllers/admin/subscriptions_controller_spec.rb index 6ead659d75..7c655b3f1a 100644 --- a/spec/controllers/admin/subscriptions_controller_spec.rb +++ b/spec/controllers/admin/subscriptions_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::SubscriptionsController do include AuthenticationHelper diff --git a/spec/controllers/admin/tag_rules_controller_spec.rb b/spec/controllers/admin/tag_rules_controller_spec.rb index f1dccc2c4e..c84b06b76c 100644 --- a/spec/controllers/admin/tag_rules_controller_spec.rb +++ b/spec/controllers/admin/tag_rules_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::TagRulesController do let(:format) { :turbo_stream } diff --git a/spec/controllers/admin/terms_of_service_files_controller_spec.rb b/spec/controllers/admin/terms_of_service_files_controller_spec.rb index 0a2e4e8099..e3e0abeee8 100644 --- a/spec/controllers/admin/terms_of_service_files_controller_spec.rb +++ b/spec/controllers/admin/terms_of_service_files_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::TermsOfServiceFilesController do context "a non-admin user" do let(:user) { create(:user) } diff --git a/spec/controllers/admin/variant_overrides_controller_spec.rb b/spec/controllers/admin/variant_overrides_controller_spec.rb index 98d1ed57e0..317839a829 100644 --- a/spec/controllers/admin/variant_overrides_controller_spec.rb +++ b/spec/controllers/admin/variant_overrides_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::VariantOverridesController do describe "index" do context "not logged in" do diff --git a/spec/controllers/api/v0/base_controller_spec.rb b/spec/controllers/api/v0/base_controller_spec.rb index fb67eeb11f..def810e761 100644 --- a/spec/controllers/api/v0/base_controller_spec.rb +++ b/spec/controllers/api/v0/base_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::BaseController do render_views controller(Api::V0::BaseController) do diff --git a/spec/controllers/api/v0/customers_controller_spec.rb b/spec/controllers/api/v0/customers_controller_spec.rb index 30febcbce2..9e3f50bab1 100644 --- a/spec/controllers/api/v0/customers_controller_spec.rb +++ b/spec/controllers/api/v0/customers_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api RSpec.describe V0::CustomersController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/enterprise_fees_controller_spec.rb b/spec/controllers/api/v0/enterprise_fees_controller_spec.rb index bca69dd91f..9e95c1082a 100644 --- a/spec/controllers/api/v0/enterprise_fees_controller_spec.rb +++ b/spec/controllers/api/v0/enterprise_fees_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api RSpec.describe V0::EnterpriseFeesController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/enterprises_controller_spec.rb b/spec/controllers/api/v0/enterprises_controller_spec.rb index 397f7e1953..ae66d85263 100644 --- a/spec/controllers/api/v0/enterprises_controller_spec.rb +++ b/spec/controllers/api/v0/enterprises_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::EnterprisesController do render_views diff --git a/spec/controllers/api/v0/exchange_products_controller_spec.rb b/spec/controllers/api/v0/exchange_products_controller_spec.rb index 03f6176e25..059a85f96a 100644 --- a/spec/controllers/api/v0/exchange_products_controller_spec.rb +++ b/spec/controllers/api/v0/exchange_products_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api RSpec.describe V0::ExchangeProductsController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/logos_controller_spec.rb b/spec/controllers/api/v0/logos_controller_spec.rb index 80148f1490..4efdafc118 100644 --- a/spec/controllers/api/v0/logos_controller_spec.rb +++ b/spec/controllers/api/v0/logos_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - module Api RSpec.describe V0::LogosController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/order_cycles_controller_spec.rb b/spec/controllers/api/v0/order_cycles_controller_spec.rb index 9d14edcab7..50d8daca0e 100644 --- a/spec/controllers/api/v0/order_cycles_controller_spec.rb +++ b/spec/controllers/api/v0/order_cycles_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::V0::OrderCyclesController do let!(:distributor) { create(:distributor_enterprise) } let!(:order_cycle) { create(:simple_order_cycle, distributors: [distributor]) } diff --git a/spec/controllers/api/v0/orders_controller_spec.rb b/spec/controllers/api/v0/orders_controller_spec.rb index 159ff4bebb..a658cbbba3 100644 --- a/spec/controllers/api/v0/orders_controller_spec.rb +++ b/spec/controllers/api/v0/orders_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::OrdersController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/product_images_controller_spec.rb b/spec/controllers/api/v0/product_images_controller_spec.rb index ac46c412f4..4419aace35 100644 --- a/spec/controllers/api/v0/product_images_controller_spec.rb +++ b/spec/controllers/api/v0/product_images_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::ProductImagesController do include AuthenticationHelper include FileHelper diff --git a/spec/controllers/api/v0/products_controller_spec.rb b/spec/controllers/api/v0/products_controller_spec.rb index 8150cf9332..ba01fb1365 100644 --- a/spec/controllers/api/v0/products_controller_spec.rb +++ b/spec/controllers/api/v0/products_controller_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'spree/core/product_duplicator' RSpec.describe Api::V0::ProductsController do diff --git a/spec/controllers/api/v0/promo_images_controller_spec.rb b/spec/controllers/api/v0/promo_images_controller_spec.rb index 05e517ff93..58e2d620db 100644 --- a/spec/controllers/api/v0/promo_images_controller_spec.rb +++ b/spec/controllers/api/v0/promo_images_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - module Api RSpec.describe V0::PromoImagesController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/reports/packing_report_spec.rb b/spec/controllers/api/v0/reports/packing_report_spec.rb index dc69ddc647..57ebbe0821 100644 --- a/spec/controllers/api/v0/reports/packing_report_spec.rb +++ b/spec/controllers/api/v0/reports/packing_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::V0::ReportsController do let(:params) { { diff --git a/spec/controllers/api/v0/reports_controller_spec.rb b/spec/controllers/api/v0/reports_controller_spec.rb index 612db3036a..6295b1728e 100644 --- a/spec/controllers/api/v0/reports_controller_spec.rb +++ b/spec/controllers/api/v0/reports_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::V0::ReportsController do let(:enterprise_user) { create(:user, enterprises: [create(:enterprise)]) } let(:params) { diff --git a/spec/controllers/api/v0/shipments_controller_spec.rb b/spec/controllers/api/v0/shipments_controller_spec.rb index 87d2d50003..1878014bc0 100644 --- a/spec/controllers/api/v0/shipments_controller_spec.rb +++ b/spec/controllers/api/v0/shipments_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::ShipmentsController do render_views diff --git a/spec/controllers/api/v0/shops_controller_spec.rb b/spec/controllers/api/v0/shops_controller_spec.rb index 876562c533..3161499763 100644 --- a/spec/controllers/api/v0/shops_controller_spec.rb +++ b/spec/controllers/api/v0/shops_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::ShopsController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/states_controller_spec.rb b/spec/controllers/api/v0/states_controller_spec.rb index fd795ccdb3..dfdb8f6f9e 100644 --- a/spec/controllers/api/v0/states_controller_spec.rb +++ b/spec/controllers/api/v0/states_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api RSpec.describe V0::StatesController do render_views diff --git a/spec/controllers/api/v0/statuses_controller_spec.rb b/spec/controllers/api/v0/statuses_controller_spec.rb index d27a7aa69a..4e86d23ba4 100644 --- a/spec/controllers/api/v0/statuses_controller_spec.rb +++ b/spec/controllers/api/v0/statuses_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api RSpec.describe V0::StatusesController do render_views diff --git a/spec/controllers/api/v0/taxons_controller_spec.rb b/spec/controllers/api/v0/taxons_controller_spec.rb index 7724153d36..aab26a7ca3 100644 --- a/spec/controllers/api/v0/taxons_controller_spec.rb +++ b/spec/controllers/api/v0/taxons_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::TaxonsController do render_views diff --git a/spec/controllers/api/v0/terms_and_conditions_controller_spec.rb b/spec/controllers/api/v0/terms_and_conditions_controller_spec.rb index 7a24529c39..aa21193afc 100644 --- a/spec/controllers/api/v0/terms_and_conditions_controller_spec.rb +++ b/spec/controllers/api/v0/terms_and_conditions_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - module Api RSpec.describe V0::TermsAndConditionsController do include AuthenticationHelper diff --git a/spec/controllers/api/v0/variants_controller_spec.rb b/spec/controllers/api/v0/variants_controller_spec.rb index df3456eecb..50e1119885 100644 --- a/spec/controllers/api/v0/variants_controller_spec.rb +++ b/spec/controllers/api/v0/variants_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::V0::VariantsController do render_views diff --git a/spec/controllers/base_controller_spec.rb b/spec/controllers/base_controller_spec.rb index e5f07ec8b6..e87d639bd7 100644 --- a/spec/controllers/base_controller_spec.rb +++ b/spec/controllers/base_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BaseController do let(:oc) { instance_double(OrderCycle, id: 1) } let(:order) { instance_double(Spree::Order) } diff --git a/spec/controllers/cart_controller_spec.rb b/spec/controllers/cart_controller_spec.rb index 8edd6cce3e..f89b00f4eb 100644 --- a/spec/controllers/cart_controller_spec.rb +++ b/spec/controllers/cart_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CartController do let(:order) { create(:order) } diff --git a/spec/controllers/checkout_controller_spec.rb b/spec/controllers/checkout_controller_spec.rb index 33f518770a..345672015c 100644 --- a/spec/controllers/checkout_controller_spec.rb +++ b/spec/controllers/checkout_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CheckoutController do let(:user) { order.user } let(:address) { create(:address) } diff --git a/spec/controllers/concerns/address_transformation_spec.rb b/spec/controllers/concerns/address_transformation_spec.rb index 2f9f1d725e..c809eb876f 100644 --- a/spec/controllers/concerns/address_transformation_spec.rb +++ b/spec/controllers/concerns/address_transformation_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe AddressTransformation do include AddressTransformation diff --git a/spec/controllers/concerns/extra_fields_spec.rb b/spec/controllers/concerns/extra_fields_spec.rb index e6cd121086..724ef6be49 100644 --- a/spec/controllers/concerns/extra_fields_spec.rb +++ b/spec/controllers/concerns/extra_fields_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ExtraFields do let(:dummy_controller) { Api::V1::BaseController.new.extend ExtraFields } diff --git a/spec/controllers/concerns/raising_parameters_spec.rb b/spec/controllers/concerns/raising_parameters_spec.rb index 1a7badf85d..da787dc023 100644 --- a/spec/controllers/concerns/raising_parameters_spec.rb +++ b/spec/controllers/concerns/raising_parameters_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe RaisingParameters do describe "Parameters" do let(:params) do diff --git a/spec/controllers/enterprises_controller_spec.rb b/spec/controllers/enterprises_controller_spec.rb index c209307cfb..dfe87211da 100644 --- a/spec/controllers/enterprises_controller_spec.rb +++ b/spec/controllers/enterprises_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterprisesController do describe "shopping for a distributor" do let(:user) { create(:user) } diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb index 1ad96df7e8..b8329c76be 100644 --- a/spec/controllers/groups_controller_spec.rb +++ b/spec/controllers/groups_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe GroupsController do render_views diff --git a/spec/controllers/line_items_controller_spec.rb b/spec/controllers/line_items_controller_spec.rb index 13b0b5cda6..d8de8b7424 100644 --- a/spec/controllers/line_items_controller_spec.rb +++ b/spec/controllers/line_items_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe LineItemsController do let(:user) { create(:user) } let(:distributor) { create(:distributor_enterprise) } diff --git a/spec/controllers/payment_gateways/paypal_controller_spec.rb b/spec/controllers/payment_gateways/paypal_controller_spec.rb index 6df8b2f78d..0193f60bf0 100644 --- a/spec/controllers/payment_gateways/paypal_controller_spec.rb +++ b/spec/controllers/payment_gateways/paypal_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PaymentGateways::PaypalController do context '#cancel' do it 'redirects back to checkout' do diff --git a/spec/controllers/payment_gateways/stripe_controller_spec.rb b/spec/controllers/payment_gateways/stripe_controller_spec.rb index 22a80d1c2e..566d608ce8 100644 --- a/spec/controllers/payment_gateways/stripe_controller_spec.rb +++ b/spec/controllers/payment_gateways/stripe_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PaymentGateways::StripeController do include StripeStubs diff --git a/spec/controllers/registration_controller_spec.rb b/spec/controllers/registration_controller_spec.rb index c89c43eb8f..012a8b7788 100644 --- a/spec/controllers/registration_controller_spec.rb +++ b/spec/controllers/registration_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe RegistrationController do describe "redirecting when user not logged in" do it "index" do diff --git a/spec/controllers/shop_controller_spec.rb b/spec/controllers/shop_controller_spec.rb index 437a737ee0..edddf86ae7 100644 --- a/spec/controllers/shop_controller_spec.rb +++ b/spec/controllers/shop_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ShopController do let!(:pm) { create(:payment_method) } let!(:sm) { create(:shipping_method) } diff --git a/spec/controllers/shops_controller_spec.rb b/spec/controllers/shops_controller_spec.rb index b89fb67e90..fb4d93e6de 100644 --- a/spec/controllers/shops_controller_spec.rb +++ b/spec/controllers/shops_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ShopsController do include WebHelper diff --git a/spec/controllers/spree/admin/adjustments_controller_spec.rb b/spec/controllers/spree/admin/adjustments_controller_spec.rb index 7806ba3c05..63abbd644d 100644 --- a/spec/controllers/spree/admin/adjustments_controller_spec.rb +++ b/spec/controllers/spree/admin/adjustments_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::AdjustmentsController do include AuthenticationHelper diff --git a/spec/controllers/spree/admin/base_controller_spec.rb b/spec/controllers/spree/admin/base_controller_spec.rb index 2361da8565..2e3dcc3498 100644 --- a/spec/controllers/spree/admin/base_controller_spec.rb +++ b/spec/controllers/spree/admin/base_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::BaseController do controller(Spree::Admin::BaseController) do def index diff --git a/spec/controllers/spree/admin/countries_controller_spec.rb b/spec/controllers/spree/admin/countries_controller_spec.rb index 7367e8d278..4dbe9024d8 100644 --- a/spec/controllers/spree/admin/countries_controller_spec.rb +++ b/spec/controllers/spree/admin/countries_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Admin RSpec.describe CountriesController do diff --git a/spec/controllers/spree/admin/general_settings_controller_spec.rb b/spec/controllers/spree/admin/general_settings_controller_spec.rb index a0b592a0a8..5a2b74ca62 100644 --- a/spec/controllers/spree/admin/general_settings_controller_spec.rb +++ b/spec/controllers/spree/admin/general_settings_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::GeneralSettingsController do include AuthenticationHelper diff --git a/spec/controllers/spree/admin/mail_methods_controller_spec.rb b/spec/controllers/spree/admin/mail_methods_controller_spec.rb index 8bac431162..bbbc67af26 100644 --- a/spec/controllers/spree/admin/mail_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/mail_methods_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::MailMethodsController do include AuthenticationHelper diff --git a/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb b/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb index e26a66c081..31f268ce32 100644 --- a/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +++ b/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::Orders::CustomerDetailsController do include AuthenticationHelper diff --git a/spec/controllers/spree/admin/orders/invoices_spec.rb b/spec/controllers/spree/admin/orders/invoices_spec.rb index 1906e3a309..8a52fa415b 100644 --- a/spec/controllers/spree/admin/orders/invoices_spec.rb +++ b/spec/controllers/spree/admin/orders/invoices_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::OrdersController do describe "#invoice" do let!(:user) { create(:user) } diff --git a/spec/controllers/spree/admin/orders/payments/payments_controller_refunds_spec.rb b/spec/controllers/spree/admin/orders/payments/payments_controller_refunds_spec.rb index 2ab5e6a94c..dcc539b381 100644 --- a/spec/controllers/spree/admin/orders/payments/payments_controller_refunds_spec.rb +++ b/spec/controllers/spree/admin/orders/payments/payments_controller_refunds_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::PaymentsController do include StripeHelper include StripeStubs diff --git a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb index 44a4258d4b..5120d9713e 100644 --- a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb +++ b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::PaymentsController do let!(:shop) { create(:enterprise) } let!(:user) { shop.owner } diff --git a/spec/controllers/spree/admin/orders_controller_spec.rb b/spec/controllers/spree/admin/orders_controller_spec.rb index 3b9db3a69a..20ce253c42 100644 --- a/spec/controllers/spree/admin/orders_controller_spec.rb +++ b/spec/controllers/spree/admin/orders_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::OrdersController do describe "#edit" do let!(:order) { create(:order_with_totals_and_distribution, ship_address: create(:address)) } diff --git a/spec/controllers/spree/admin/overview_controller_spec.rb b/spec/controllers/spree/admin/overview_controller_spec.rb index df4429c109..414cd10cfb 100644 --- a/spec/controllers/spree/admin/overview_controller_spec.rb +++ b/spec/controllers/spree/admin/overview_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::OverviewController do describe "#index" do before do diff --git a/spec/controllers/spree/admin/payment_methods_controller_spec.rb b/spec/controllers/spree/admin/payment_methods_controller_spec.rb index 7827705283..82be28cca3 100644 --- a/spec/controllers/spree/admin/payment_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/payment_methods_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - class GatewayWithPassword < Spree::PaymentMethod preference :password, :string, default: "password" end diff --git a/spec/controllers/spree/admin/products_controller_spec.rb b/spec/controllers/spree/admin/products_controller_spec.rb index f57392aa81..8cb256e99e 100644 --- a/spec/controllers/spree/admin/products_controller_spec.rb +++ b/spec/controllers/spree/admin/products_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::Admin::ProductsController do context "creating a new product" do let(:supplier) { create(:supplier_enterprise) } diff --git a/spec/controllers/spree/admin/return_authorizations_controller_spec.rb b/spec/controllers/spree/admin/return_authorizations_controller_spec.rb index cbc69ec18b..5f1502687b 100644 --- a/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +++ b/spec/controllers/spree/admin/return_authorizations_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Admin RSpec.describe ReturnAuthorizationsController do diff --git a/spec/controllers/spree/admin/search_controller_spec.rb b/spec/controllers/spree/admin/search_controller_spec.rb index 18fff364af..dadc5aab92 100644 --- a/spec/controllers/spree/admin/search_controller_spec.rb +++ b/spec/controllers/spree/admin/search_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::Admin::SearchController do context "Distributor Enterprise User" do let!(:owner) { create(:user, email: "test1@email.com" ) } diff --git a/spec/controllers/spree/admin/shipping_categories_controller_spec.rb b/spec/controllers/spree/admin/shipping_categories_controller_spec.rb index ca956713a1..97580236ba 100644 --- a/spec/controllers/spree/admin/shipping_categories_controller_spec.rb +++ b/spec/controllers/spree/admin/shipping_categories_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Admin RSpec.describe ShippingCategoriesController do diff --git a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb index 422352542b..cb98a80c2b 100644 --- a/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/shipping_methods_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::ShippingMethodsController do include AuthenticationHelper diff --git a/spec/controllers/spree/admin/tax_rates_controller_spec.rb b/spec/controllers/spree/admin/tax_rates_controller_spec.rb index 5a4fb2c6e2..bcd57f2ce4 100644 --- a/spec/controllers/spree/admin/tax_rates_controller_spec.rb +++ b/spec/controllers/spree/admin/tax_rates_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Admin RSpec.describe TaxRatesController do diff --git a/spec/controllers/spree/admin/tax_settings_controller_spec.rb b/spec/controllers/spree/admin/tax_settings_controller_spec.rb index af804d4ba4..f3a6b49b66 100644 --- a/spec/controllers/spree/admin/tax_settings_controller_spec.rb +++ b/spec/controllers/spree/admin/tax_settings_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::TaxSettingsController do describe "#update" do let(:params) { { preferences: { products_require_tax_category: "1" } } } diff --git a/spec/controllers/spree/admin/taxons_controller_spec.rb b/spec/controllers/spree/admin/taxons_controller_spec.rb index 4afa43166b..692e3c0d87 100644 --- a/spec/controllers/spree/admin/taxons_controller_spec.rb +++ b/spec/controllers/spree/admin/taxons_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::TaxonsController do render_views diff --git a/spec/controllers/spree/admin/users_controller_spec.rb b/spec/controllers/spree/admin/users_controller_spec.rb index f040604cb6..bc1435b26a 100644 --- a/spec/controllers/spree/admin/users_controller_spec.rb +++ b/spec/controllers/spree/admin/users_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::UsersController do describe '#authorize_admin' do let(:user) { create(:user) } diff --git a/spec/controllers/spree/admin/variants_controller_spec.rb b/spec/controllers/spree/admin/variants_controller_spec.rb index 6257ff8af5..c2aa219f46 100644 --- a/spec/controllers/spree/admin/variants_controller_spec.rb +++ b/spec/controllers/spree/admin/variants_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::VariantsController do context "log in as admin user" do before { controller_login_as_admin } diff --git a/spec/controllers/spree/api_keys_controller_spec.rb b/spec/controllers/spree/api_keys_controller_spec.rb index 87522e8546..9c69521088 100644 --- a/spec/controllers/spree/api_keys_controller_spec.rb +++ b/spec/controllers/spree/api_keys_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ApiKeysController, performance: true do routes { Spree::Core::Engine.routes } diff --git a/spec/controllers/spree/credit_cards_controller_spec.rb b/spec/controllers/spree/credit_cards_controller_spec.rb index ee6aff9dda..6429ff6963 100644 --- a/spec/controllers/spree/credit_cards_controller_spec.rb +++ b/spec/controllers/spree/credit_cards_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::CreditCardsController do describe "using VCR", :vcr, :stripe_version do let(:user) { create(:user) } diff --git a/spec/controllers/spree/orders_controller_spec.rb b/spec/controllers/spree/orders_controller_spec.rb index 8c5f1c82f3..630a73eade 100644 --- a/spec/controllers/spree/orders_controller_spec.rb +++ b/spec/controllers/spree/orders_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::OrdersController do include CheckoutHelper include StripeStubs diff --git a/spec/controllers/spree/user_sessions_controller_spec.rb b/spec/controllers/spree/user_sessions_controller_spec.rb index cea3cc23e6..976b0d5c51 100644 --- a/spec/controllers/spree/user_sessions_controller_spec.rb +++ b/spec/controllers/spree/user_sessions_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::UserSessionsController do let(:user) { create(:user) } diff --git a/spec/controllers/spree/users_controller_spec.rb b/spec/controllers/spree/users_controller_spec.rb index 2ff2d2aa42..3e878f6778 100644 --- a/spec/controllers/spree/users_controller_spec.rb +++ b/spec/controllers/spree/users_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::UsersController do routes { Spree::Core::Engine.routes } diff --git a/spec/controllers/stripe/callbacks_controller_spec.rb b/spec/controllers/stripe/callbacks_controller_spec.rb index 4dc122a1a3..50b2c06a17 100644 --- a/spec/controllers/stripe/callbacks_controller_spec.rb +++ b/spec/controllers/stripe/callbacks_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Stripe::CallbacksController do let(:enterprise) { create(:distributor_enterprise) } diff --git a/spec/controllers/stripe/webhooks_controller_spec.rb b/spec/controllers/stripe/webhooks_controller_spec.rb index ad289cb7a9..bf5d587fdd 100644 --- a/spec/controllers/stripe/webhooks_controller_spec.rb +++ b/spec/controllers/stripe/webhooks_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Stripe::WebhooksController do describe "#create" do let(:params) do diff --git a/spec/controllers/user_confirmations_controller_spec.rb b/spec/controllers/user_confirmations_controller_spec.rb index c19768c8ee..cea28a374e 100644 --- a/spec/controllers/user_confirmations_controller_spec.rb +++ b/spec/controllers/user_confirmations_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UserConfirmationsController do let!(:user) { create(:user) } let!(:confirmed_user) { create(:user, confirmed_at: nil) } diff --git a/spec/controllers/user_passwords_controller_spec.rb b/spec/controllers/user_passwords_controller_spec.rb index d873c7df96..9c9da7349e 100644 --- a/spec/controllers/user_passwords_controller_spec.rb +++ b/spec/controllers/user_passwords_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UserPasswordsController do render_views diff --git a/spec/controllers/user_registrations_controller_spec.rb b/spec/controllers/user_registrations_controller_spec.rb index 559cec3569..3a3b864976 100644 --- a/spec/controllers/user_registrations_controller_spec.rb +++ b/spec/controllers/user_registrations_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UserRegistrationsController do before do @request.env["devise.mapping"] = Devise.mappings[:spree_user] diff --git a/spec/controllers/webhook_endpoints_controller_spec.rb b/spec/controllers/webhook_endpoints_controller_spec.rb index d1db36d53b..186879d480 100644 --- a/spec/controllers/webhook_endpoints_controller_spec.rb +++ b/spec/controllers/webhook_endpoints_controller_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'open_food_network/order_cycle_permissions' RSpec.describe WebhookEndpointsController do diff --git a/spec/forms/enterprise_fees_bulk_update_spec.rb b/spec/forms/enterprise_fees_bulk_update_spec.rb index 2fcd1a854f..a482f004fc 100644 --- a/spec/forms/enterprise_fees_bulk_update_spec.rb +++ b/spec/forms/enterprise_fees_bulk_update_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterpriseFeesBulkUpdate do describe "error reporting" do let(:enterprise_fee) { build_stubbed(:enterprise_fee) } diff --git a/spec/helpers/admin/enterprises_helper_spec.rb b/spec/helpers/admin/enterprises_helper_spec.rb index cd76300283..0cbff031b2 100644 --- a/spec/helpers/admin/enterprises_helper_spec.rb +++ b/spec/helpers/admin/enterprises_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Admin::EnterprisesHelper do let(:user) { build(:user) } diff --git a/spec/helpers/admin/orders_helper_spec.rb b/spec/helpers/admin/orders_helper_spec.rb index 9a1f9e9306..90059229b4 100644 --- a/spec/helpers/admin/orders_helper_spec.rb +++ b/spec/helpers/admin/orders_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Admin::OrdersHelper do describe "#order_adjustments_for_display" do let(:order) { create(:order) } diff --git a/spec/helpers/admin/products_helper_spec.rb b/spec/helpers/admin/products_helper_spec.rb index d0583488af..3cf3a75a02 100644 --- a/spec/helpers/admin/products_helper_spec.rb +++ b/spec/helpers/admin/products_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Admin::ProductsHelper do describe '#unit_value_with_description' do let(:variant) { diff --git a/spec/helpers/admin/reports_helper_spec.rb b/spec/helpers/admin/reports_helper_spec.rb index 6f2f0c33e4..def3b0f6fd 100644 --- a/spec/helpers/admin/reports_helper_spec.rb +++ b/spec/helpers/admin/reports_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ReportsHelper do describe "#report_payment_method_options" do let(:order_with_payments) { create(:order_ready_to_ship) } diff --git a/spec/helpers/admin/subscriptions_helper_spec.rb b/spec/helpers/admin/subscriptions_helper_spec.rb index c5e3ef23fa..aa5dcd0b85 100644 --- a/spec/helpers/admin/subscriptions_helper_spec.rb +++ b/spec/helpers/admin/subscriptions_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::SubscriptionsHelper do describe "checking if setup is complete for any [shop]" do let(:shop) { create(:distributor_enterprise) } diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index fe2679359c..2b5207a476 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ApplicationHelper do describe "#feature?" do it "takes several actors" do diff --git a/spec/helpers/bulk_form_builder_spec.rb b/spec/helpers/bulk_form_builder_spec.rb index 6400d8b221..986a8adab7 100644 --- a/spec/helpers/bulk_form_builder_spec.rb +++ b/spec/helpers/bulk_form_builder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - class TestHelper < ActionView::Base; end RSpec.describe BulkFormBuilder do diff --git a/spec/helpers/checkout_helper_spec.rb b/spec/helpers/checkout_helper_spec.rb index 709ee7ca29..d42ef87e87 100644 --- a/spec/helpers/checkout_helper_spec.rb +++ b/spec/helpers/checkout_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CheckoutHelper do it "generates html for validated inputs" do expect(helper).to receive(:render).with( diff --git a/spec/helpers/i18n_helper_spec.rb b/spec/helpers/i18n_helper_spec.rb index 884e010c85..10a082507b 100644 --- a/spec/helpers/i18n_helper_spec.rb +++ b/spec/helpers/i18n_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe I18nHelper do let(:user) { create(:user) } let(:cookies) { {} } diff --git a/spec/helpers/injection_helper_spec.rb b/spec/helpers/injection_helper_spec.rb index cd0b57d29b..18b3c15790 100644 --- a/spec/helpers/injection_helper_spec.rb +++ b/spec/helpers/injection_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe InjectionHelper do let!(:enterprise) { create(:distributor_enterprise, facebook: "roger") } diff --git a/spec/helpers/link_helper_spec.rb b/spec/helpers/link_helper_spec.rb index aceeca8cf7..6dcc0677ad 100644 --- a/spec/helpers/link_helper_spec.rb +++ b/spec/helpers/link_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe LinkHelper do describe "ext_url" do it "adds prefix if missing" do diff --git a/spec/helpers/map_helper_spec.rb b/spec/helpers/map_helper_spec.rb index a75921a1b1..1e9ace350d 100644 --- a/spec/helpers/map_helper_spec.rb +++ b/spec/helpers/map_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe MapHelper do describe "#using_google_maps?" do it "returns true when a GOOGLE_MAPS_API_KEY is present" do diff --git a/spec/helpers/navigation_helper_spec.rb b/spec/helpers/navigation_helper_spec.rb index d2bc2be68d..e1c14734d1 100644 --- a/spec/helpers/navigation_helper_spec.rb +++ b/spec/helpers/navigation_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Admin RSpec.describe NavigationHelper do diff --git a/spec/helpers/order_cycles_helper_spec.rb b/spec/helpers/order_cycles_helper_spec.rb index 97d9f2bad9..a1ae719f3e 100644 --- a/spec/helpers/order_cycles_helper_spec.rb +++ b/spec/helpers/order_cycles_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCyclesHelper do let(:oc) { double(:order_cycle) } diff --git a/spec/helpers/serializer_helper_spec.rb b/spec/helpers/serializer_helper_spec.rb index d41ccc2d73..a84c92cece 100644 --- a/spec/helpers/serializer_helper_spec.rb +++ b/spec/helpers/serializer_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SerializerHelper do let(:serializer) do Class.new(ActiveModel::Serializer) do diff --git a/spec/helpers/shop_helper_spec.rb b/spec/helpers/shop_helper_spec.rb index 08697cb6cf..e176c5667d 100644 --- a/spec/helpers/shop_helper_spec.rb +++ b/spec/helpers/shop_helper_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' RSpec.describe ShopHelper do describe "shop_tabs" do context "distributor with groups" do diff --git a/spec/helpers/spree/admin/base_helper_spec.rb b/spec/helpers/spree/admin/base_helper_spec.rb index 090cdd63d1..c722e8c223 100644 --- a/spec/helpers/spree/admin/base_helper_spec.rb +++ b/spec/helpers/spree/admin/base_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::BaseHelper do helper 'spree/admin/navigation' diff --git a/spec/helpers/spree/admin/general_settings_helper_spec.rb b/spec/helpers/spree/admin/general_settings_helper_spec.rb index 877578e39d..e0581eabd7 100644 --- a/spec/helpers/spree/admin/general_settings_helper_spec.rb +++ b/spec/helpers/spree/admin/general_settings_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::GeneralSettingsHelper do describe "#all_units" do it "returns all units" do diff --git a/spec/helpers/spree/admin/orders_helper_spec.rb b/spec/helpers/spree/admin/orders_helper_spec.rb index 6b047774fa..a3fac8794b 100644 --- a/spec/helpers/spree/admin/orders_helper_spec.rb +++ b/spec/helpers/spree/admin/orders_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Admin::OrdersHelper do describe "#orders_links" do let(:order) { double(:order) } diff --git a/spec/helpers/spree/admin/tax_categories_helper_spec.rb b/spec/helpers/spree/admin/tax_categories_helper_spec.rb index a9463dc41e..6084055b47 100644 --- a/spec/helpers/spree/admin/tax_categories_helper_spec.rb +++ b/spec/helpers/spree/admin/tax_categories_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Spree::Admin::TaxCategoriesHelper do describe '#tax_category_dropdown_options' do let!(:default_tax_category) { create(:tax_category, is_default: true) } diff --git a/spec/helpers/spree/base_helper_spec.rb b/spec/helpers/spree/base_helper_spec.rb index 4debda7a2a..063c20cbac 100644 --- a/spec/helpers/spree/base_helper_spec.rb +++ b/spec/helpers/spree/base_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::BaseHelper do include Spree::BaseHelper diff --git a/spec/helpers/spree/orders_helper_spec.rb b/spec/helpers/spree/orders_helper_spec.rb index dc384e2a7a..45efa1a15f 100644 --- a/spec/helpers/spree/orders_helper_spec.rb +++ b/spec/helpers/spree/orders_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::OrdersHelper do describe "#changeable_orders" do let(:complete_orders) { double(:complete_orders, where: "some_orders") } diff --git a/spec/helpers/tax_helper_spec.rb b/spec/helpers/tax_helper_spec.rb index 0b9ad20e98..8ec3e47599 100644 --- a/spec/helpers/tax_helper_spec.rb +++ b/spec/helpers/tax_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TaxHelper do let(:line_item) { create(:line_item) } let(:line_item2) { create(:line_item) } diff --git a/spec/helpers/terms_and_conditions_helper_spec.rb b/spec/helpers/terms_and_conditions_helper_spec.rb index a62e6aa049..b2df276a49 100644 --- a/spec/helpers/terms_and_conditions_helper_spec.rb +++ b/spec/helpers/terms_and_conditions_helper_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TermsAndConditionsHelper do describe "#platform_terms_required?" do context 'when ToS file is present' do diff --git a/spec/jobs/amend_backorder_job_spec.rb b/spec/jobs/amend_backorder_job_spec.rb index 3216b109da..2519c9759e 100644 --- a/spec/jobs/amend_backorder_job_spec.rb +++ b/spec/jobs/amend_backorder_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe AmendBackorderJob do let(:order) { create(:completed_order_with_totals) } let(:distributor) { order.distributor } diff --git a/spec/jobs/backorder_job_spec.rb b/spec/jobs/backorder_job_spec.rb index 93425ebec3..e8a830cab6 100644 --- a/spec/jobs/backorder_job_spec.rb +++ b/spec/jobs/backorder_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BackorderJob do let(:order) { create(:completed_order_with_totals) } let(:beans) { order.line_items.first.variant } diff --git a/spec/jobs/bulk_invoice_job_spec.rb b/spec/jobs/bulk_invoice_job_spec.rb index 3d8e137093..cac001a5d5 100644 --- a/spec/jobs/bulk_invoice_job_spec.rb +++ b/spec/jobs/bulk_invoice_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BulkInvoiceJob do subject { BulkInvoiceJob.new(order_ids, "/tmp/file/path") } diff --git a/spec/jobs/complete_backorder_job_spec.rb b/spec/jobs/complete_backorder_job_spec.rb index 0bc1a741e3..07bf137987 100644 --- a/spec/jobs/complete_backorder_job_spec.rb +++ b/spec/jobs/complete_backorder_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CompleteBackorderJob do let(:user) { create(:testdfc_user) } let(:urls) { FdcUrlBuilder.new(product_link) } diff --git a/spec/jobs/connect_app_job_spec.rb b/spec/jobs/connect_app_job_spec.rb index 118dddb3a3..c95ea4dfa2 100644 --- a/spec/jobs/connect_app_job_spec.rb +++ b/spec/jobs/connect_app_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ConnectAppJob do subject { ConnectAppJob.new(app, user.spree_api_key) } diff --git a/spec/jobs/heartbeat_job_spec.rb b/spec/jobs/heartbeat_job_spec.rb index 76fa8cbd29..43f5f6ba54 100644 --- a/spec/jobs/heartbeat_job_spec.rb +++ b/spec/jobs/heartbeat_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe HeartbeatJob do context "with time frozen" do let(:run_time) { Time.zone.local(2016, 4, 13, 13, 0, 0) } diff --git a/spec/jobs/job_logger_spec.rb b/spec/jobs/job_logger_spec.rb index 7d93868ef5..68eec3617a 100644 --- a/spec/jobs/job_logger_spec.rb +++ b/spec/jobs/job_logger_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe JobLogger do describe '.logger' do it "returns a Ruby's logger instance" do diff --git a/spec/jobs/open_order_cycle_job_spec.rb b/spec/jobs/open_order_cycle_job_spec.rb index 965e8e5068..f4f223b707 100644 --- a/spec/jobs/open_order_cycle_job_spec.rb +++ b/spec/jobs/open_order_cycle_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OpenOrderCycleJob do let(:now){ Time.zone.now } let(:order_cycle) { create(:simple_order_cycle, orders_open_at: now) } diff --git a/spec/jobs/order_cycle_closing_job_spec.rb b/spec/jobs/order_cycle_closing_job_spec.rb index dc1f7ce23d..3921cfef2c 100644 --- a/spec/jobs/order_cycle_closing_job_spec.rb +++ b/spec/jobs/order_cycle_closing_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycleClosingJob do let(:order_cycle1) { create(:order_cycle, automatic_notifications: true, orders_close_at: 1.minute.ago) diff --git a/spec/jobs/order_cycle_notification_job_spec.rb b/spec/jobs/order_cycle_notification_job_spec.rb index 872b63d6ad..765e45db76 100644 --- a/spec/jobs/order_cycle_notification_job_spec.rb +++ b/spec/jobs/order_cycle_notification_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycleNotificationJob do let(:order_cycle) { create(:order_cycle) } diff --git a/spec/jobs/report_job_spec.rb b/spec/jobs/report_job_spec.rb index fd8c9aaf86..8a506564cb 100644 --- a/spec/jobs/report_job_spec.rb +++ b/spec/jobs/report_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ReportJob do include CableReady::Broadcaster diff --git a/spec/jobs/stock_sync_job_spec.rb b/spec/jobs/stock_sync_job_spec.rb index de709f1aeb..c9c0e3d625 100644 --- a/spec/jobs/stock_sync_job_spec.rb +++ b/spec/jobs/stock_sync_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe StockSyncJob do let(:order) { create(:order_with_totals, distributor:) } let(:distributor) { build(:enterprise, owner: user) } diff --git a/spec/jobs/subscription_confirm_job_spec.rb b/spec/jobs/subscription_confirm_job_spec.rb index 6faae26b68..976b60b7f1 100644 --- a/spec/jobs/subscription_confirm_job_spec.rb +++ b/spec/jobs/subscription_confirm_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SubscriptionConfirmJob do let(:job) { SubscriptionConfirmJob.new } diff --git a/spec/jobs/subscription_placement_job_spec.rb b/spec/jobs/subscription_placement_job_spec.rb index b35481e1dc..948160bb10 100644 --- a/spec/jobs/subscription_placement_job_spec.rb +++ b/spec/jobs/subscription_placement_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SubscriptionPlacementJob do let(:job) { SubscriptionPlacementJob.new } let(:summarizer) { OrderManagement::Subscriptions::Summarizer.new } diff --git a/spec/jobs/trigger_order_cycles_to_open_job_spec.rb b/spec/jobs/trigger_order_cycles_to_open_job_spec.rb index 9b27202503..a00bbd0302 100644 --- a/spec/jobs/trigger_order_cycles_to_open_job_spec.rb +++ b/spec/jobs/trigger_order_cycles_to_open_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TriggerOrderCyclesToOpenJob do let(:oc_opened_before) { create(:simple_order_cycle, orders_open_at: 1.hour.ago) diff --git a/spec/jobs/webhook_delivery_job_spec.rb b/spec/jobs/webhook_delivery_job_spec.rb index 45c2978c4b..088a707ca4 100644 --- a/spec/jobs/webhook_delivery_job_spec.rb +++ b/spec/jobs/webhook_delivery_job_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe WebhookDeliveryJob do subject { WebhookDeliveryJob.new(url, event, data, at:) } let(:url) { 'https://test/endpoint' } diff --git a/spec/lib/action_dispatch/request_spec.rb b/spec/lib/action_dispatch/request_spec.rb index 8ab68abc4c..71c604514f 100644 --- a/spec/lib/action_dispatch/request_spec.rb +++ b/spec/lib/action_dispatch/request_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ActionDispatch::Request do it "strips nils from arrays" do expect(parse_query_parameters('key[]=value&key[]')).to eq({ "key" => ["value"] }) diff --git a/spec/lib/i18n_digests_spec.rb b/spec/lib/i18n_digests_spec.rb index 6dd321c98b..213b565105 100644 --- a/spec/lib/i18n_digests_spec.rb +++ b/spec/lib/i18n_digests_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe I18nDigests do describe "#build_digests" do let(:available_locales) { ["en", "es"] } diff --git a/spec/lib/open_food_network/address_finder_spec.rb b/spec/lib/open_food_network/address_finder_spec.rb index a5dcffaab2..d036fd0288 100644 --- a/spec/lib/open_food_network/address_finder_spec.rb +++ b/spec/lib/open_food_network/address_finder_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/address_finder' RSpec.describe OpenFoodNetwork::AddressFinder do diff --git a/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb b/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb index 3648ba3d5a..a7c6256437 100644 --- a/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb +++ b/spec/lib/open_food_network/enterprise_fee_applicator_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/enterprise_fee_applicator' module OpenFoodNetwork diff --git a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb index 61ff704128..0c1a10c3bf 100644 --- a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb +++ b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/enterprise_fee_calculator' RSpec.describe OpenFoodNetwork::EnterpriseFeeCalculator do diff --git a/spec/lib/open_food_network/enterprise_injection_data_spec.rb b/spec/lib/open_food_network/enterprise_injection_data_spec.rb index 7297b8f698..5a0bebd801 100644 --- a/spec/lib/open_food_network/enterprise_injection_data_spec.rb +++ b/spec/lib/open_food_network/enterprise_injection_data_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/enterprise_injection_data' RSpec.describe OpenFoodNetwork::EnterpriseInjectionData do diff --git a/spec/lib/open_food_network/enterprise_issue_validator_spec.rb b/spec/lib/open_food_network/enterprise_issue_validator_spec.rb index 879282cf9d..c7fedc4bb2 100644 --- a/spec/lib/open_food_network/enterprise_issue_validator_spec.rb +++ b/spec/lib/open_food_network/enterprise_issue_validator_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/enterprise_issue_validator' module OpenFoodNetwork diff --git a/spec/lib/open_food_network/feature_toggle_spec.rb b/spec/lib/open_food_network/feature_toggle_spec.rb index 9d185a8fc6..d251562adc 100644 --- a/spec/lib/open_food_network/feature_toggle_spec.rb +++ b/spec/lib/open_food_network/feature_toggle_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OpenFoodNetwork::FeatureToggle do subject(:feature_toggle) { OpenFoodNetwork::FeatureToggle } diff --git a/spec/lib/open_food_network/i18n_config_spec.rb b/spec/lib/open_food_network/i18n_config_spec.rb index 210be7e612..e491d550ce 100644 --- a/spec/lib/open_food_network/i18n_config_spec.rb +++ b/spec/lib/open_food_network/i18n_config_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/i18n_config' module OpenFoodNetwork diff --git a/spec/lib/open_food_network/i18n_inflections_spec.rb b/spec/lib/open_food_network/i18n_inflections_spec.rb index 70af2719d2..5f3d5c819a 100644 --- a/spec/lib/open_food_network/i18n_inflections_spec.rb +++ b/spec/lib/open_food_network/i18n_inflections_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/i18n_inflections' RSpec.describe OpenFoodNetwork::I18nInflections do diff --git a/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb b/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb index 80a20e0adc..85a1848113 100644 --- a/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb +++ b/spec/lib/open_food_network/order_cycle_form_applicator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - require 'open_food_network/order_cycle_form_applicator' RSpec.describe OpenFoodNetwork::OrderCycleFormApplicator do diff --git a/spec/lib/open_food_network/order_cycle_permissions_spec.rb b/spec/lib/open_food_network/order_cycle_permissions_spec.rb index 6c5b3c903c..b961846d5a 100644 --- a/spec/lib/open_food_network/order_cycle_permissions_spec.rb +++ b/spec/lib/open_food_network/order_cycle_permissions_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/order_cycle_permissions' RSpec.describe OpenFoodNetwork::OrderCyclePermissions do diff --git a/spec/lib/open_food_network/permissions_spec.rb b/spec/lib/open_food_network/permissions_spec.rb index 237581c130..124c70798c 100644 --- a/spec/lib/open_food_network/permissions_spec.rb +++ b/spec/lib/open_food_network/permissions_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/permissions' RSpec.describe OpenFoodNetwork::Permissions do diff --git a/spec/lib/open_food_network/property_merge_spec.rb b/spec/lib/open_food_network/property_merge_spec.rb index 1fd6ef8a74..ed6b44ccd4 100644 --- a/spec/lib/open_food_network/property_merge_spec.rb +++ b/spec/lib/open_food_network/property_merge_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module OpenFoodNetwork RSpec.describe PropertyMerge do let(:property) { create(:property, presentation: 'One') } diff --git a/spec/lib/open_food_network/referer_parser_spec.rb b/spec/lib/open_food_network/referer_parser_spec.rb index 98dd0f4deb..a117389033 100644 --- a/spec/lib/open_food_network/referer_parser_spec.rb +++ b/spec/lib/open_food_network/referer_parser_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: false require 'open_food_network/referer_parser' -require 'spec_helper' module OpenFoodNetwork RSpec.describe RefererParser do diff --git a/spec/lib/open_food_network/scope_variant_to_hub_spec.rb b/spec/lib/open_food_network/scope_variant_to_hub_spec.rb index 3aac9e3c4b..a534b71568 100644 --- a/spec/lib/open_food_network/scope_variant_to_hub_spec.rb +++ b/spec/lib/open_food_network/scope_variant_to_hub_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/scope_variant_to_hub' RSpec.describe OpenFoodNetwork::ScopeVariantToHub do diff --git a/spec/lib/open_food_network/scope_variants_for_search_spec.rb b/spec/lib/open_food_network/scope_variants_for_search_spec.rb index b0fc09d51d..09ee2d85e5 100644 --- a/spec/lib/open_food_network/scope_variants_for_search_spec.rb +++ b/spec/lib/open_food_network/scope_variants_for_search_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/scope_variants_for_search' RSpec.describe OpenFoodNetwork::ScopeVariantsForSearch do diff --git a/spec/lib/open_food_network/tag_rule_applicator_spec.rb b/spec/lib/open_food_network/tag_rule_applicator_spec.rb index 454c492b3c..5137050da8 100644 --- a/spec/lib/open_food_network/tag_rule_applicator_spec.rb +++ b/spec/lib/open_food_network/tag_rule_applicator_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require 'open_food_network/tag_rule_applicator' -require 'spec_helper' RSpec.describe OpenFoodNetwork::TagRuleApplicator do let!(:enterprise) { create(:distributor_enterprise) } diff --git a/spec/lib/reports/bulk_coop_report_spec.rb b/spec/lib/reports/bulk_coop_report_spec.rb index b07643f9d9..56422194fc 100644 --- a/spec/lib/reports/bulk_coop_report_spec.rb +++ b/spec/lib/reports/bulk_coop_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # rubocop:disable Metrics/ModuleLength module Reporting module Reports diff --git a/spec/lib/reports/customers_report_spec.rb b/spec/lib/reports/customers_report_spec.rb index 295dd53174..14af2f1c15 100644 --- a/spec/lib/reports/customers_report_spec.rb +++ b/spec/lib/reports/customers_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::Customers::Base do context "as a site admin" do let(:user) { create(:admin_user) } diff --git a/spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb b/spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb index 5e9edffc86..40660d39f3 100644 --- a/spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::Authorizer do let(:user) { create(:user) } diff --git a/spec/lib/reports/enterprise_fee_summary/enterprise_fee_summary_report_spec.rb b/spec/lib/reports/enterprise_fee_summary/enterprise_fee_summary_report_spec.rb index ceeb312b5b..adc4b7cf55 100644 --- a/spec/lib/reports/enterprise_fee_summary/enterprise_fee_summary_report_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/enterprise_fee_summary_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::FeeSummary do let(:report_module) { Reporting::Reports::EnterpriseFeeSummary } diff --git a/spec/lib/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer_spec.rb b/spec/lib/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer_spec.rb index db4004a158..85100cfaf5 100644 --- a/spec/lib/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::EnterpriseFeesWithTaxReportByProducer do let(:current_user) { create(:admin_user) } diff --git a/spec/lib/reports/enterprise_fee_summary/parameters_spec.rb b/spec/lib/reports/enterprise_fee_summary/parameters_spec.rb index b803041573..b34db45b92 100644 --- a/spec/lib/reports/enterprise_fee_summary/parameters_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/parameters_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - module Reporting module Reports module EnterpriseFeeSummary diff --git a/spec/lib/reports/enterprise_fee_summary/permissions_spec.rb b/spec/lib/reports/enterprise_fee_summary/permissions_spec.rb index decb37a18e..b0839e034b 100644 --- a/spec/lib/reports/enterprise_fee_summary/permissions_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/permissions_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::Permissions do let!(:order_cycle) { create(:simple_order_cycle) } let!(:incoming_exchange) { create(:exchange, incoming: true, order_cycle:) } diff --git a/spec/lib/reports/enterprise_fee_summary/renderers/csv_renderer_spec.rb b/spec/lib/reports/enterprise_fee_summary/renderers/csv_renderer_spec.rb index bf58f26b4b..c03a563063 100644 --- a/spec/lib/reports/enterprise_fee_summary/renderers/csv_renderer_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/renderers/csv_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - # describe Reporting::Reports::EnterpriseFeeSummary::Renderers::CsvRenderer do # let(:report_klass) { Reporting::Reports::EnterpriseFeeSummary } diff --git a/spec/lib/reports/enterprise_fee_summary/renderers/html_renderer_spec.rb b/spec/lib/reports/enterprise_fee_summary/renderers/html_renderer_spec.rb index b396458e0f..93b3aa7a17 100644 --- a/spec/lib/reports/enterprise_fee_summary/renderers/html_renderer_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/renderers/html_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - # describe Reporting::Reports::EnterpriseFeeSummary::Renderers::HtmlRenderer do # let(:report_klass) { Reporting::Reports::EnterpriseFeeSummary } diff --git a/spec/lib/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total_spec.rb b/spec/lib/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total_spec.rb index d7e9e9f6b5..72ff02e036 100644 --- a/spec/lib/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::ReportData::EnterpriseFeeTypeTotal do it "sorts instances according to their attributes" do instance_a = described_class.new( diff --git a/spec/lib/reports/enterprise_fee_summary/summarizer_spec.rb b/spec/lib/reports/enterprise_fee_summary/summarizer_spec.rb index e161d84597..a3f70db110 100644 --- a/spec/lib/reports/enterprise_fee_summary/summarizer_spec.rb +++ b/spec/lib/reports/enterprise_fee_summary/summarizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::EnterpriseFeeSummary::Summarizer do let(:row) { { diff --git a/spec/lib/reports/frontend_data_spec.rb b/spec/lib/reports/frontend_data_spec.rb index 42ba84e92f..5cf485ff04 100644 --- a/spec/lib/reports/frontend_data_spec.rb +++ b/spec/lib/reports/frontend_data_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::FrontendData do subject { described_class.new(user) } diff --git a/spec/lib/reports/lettuce_share_report_spec.rb b/spec/lib/reports/lettuce_share_report_spec.rb index 028557b534..ddfce2b05a 100644 --- a/spec/lib/reports/lettuce_share_report_spec.rb +++ b/spec/lib/reports/lettuce_share_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module ProductsAndInventory diff --git a/spec/lib/reports/line_items_spec.rb b/spec/lib/reports/line_items_spec.rb index 2fc293973f..c4c8b12866 100644 --- a/spec/lib/reports/line_items_spec.rb +++ b/spec/lib/reports/line_items_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::LineItems do # This object lets us add some test coverage despite the very deep coupling between the class # under test and the various objects it depends on. Other more common moking strategies where very diff --git a/spec/lib/reports/order_cycle_management_report_spec.rb b/spec/lib/reports/order_cycle_management_report_spec.rb index 0a62bdd850..ba14f10b13 100644 --- a/spec/lib/reports/order_cycle_management_report_spec.rb +++ b/spec/lib/reports/order_cycle_management_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::OrderCycleManagement::Base do context "as a site admin" do subject { described_class.new(user, params) } diff --git a/spec/lib/reports/orders_and_distributors_report_spec.rb b/spec/lib/reports/orders_and_distributors_report_spec.rb index 98f4943f29..1f9305c30a 100644 --- a/spec/lib/reports/orders_and_distributors_report_spec.rb +++ b/spec/lib/reports/orders_and_distributors_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::OrdersAndDistributors::Base do describe 'orders and distributors report' do subject { described_class.new nil } diff --git a/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb index 6a5de015be..f7e4231fc1 100644 --- a/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Reporting::Reports::OrdersAndFulfillment::OrderCycleCustomerTotals do let!(:distributor) { create(:distributor_enterprise, name: "Apple Market") } let!(:customer) { create(:customer, enterprise: distributor, user:, code: "JHN") } diff --git a/spec/lib/reports/orders_and_fulfillment/order_cycle_distributor_totals_by_supplier_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/order_cycle_distributor_totals_by_supplier_report_spec.rb index 094e9a5c72..d28fe6673e 100644 --- a/spec/lib/reports/orders_and_fulfillment/order_cycle_distributor_totals_by_supplier_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/order_cycle_distributor_totals_by_supplier_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module OrdersAndFulfillment diff --git a/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb index 8ab11c88c8..eb4f5661f3 100644 --- a/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module OrdersAndFulfillment diff --git a/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb index 38cedaa015..1fd1ae3841 100644 --- a/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::OrdersAndFulfillment::OrderCycleSupplierTotals do let!(:distributor) { create(:distributor_enterprise) } diff --git a/spec/lib/reports/packing/packing_report_spec.rb b/spec/lib/reports/packing/packing_report_spec.rb index 62188b764e..cef1a24dad 100644 --- a/spec/lib/reports/packing/packing_report_spec.rb +++ b/spec/lib/reports/packing/packing_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "Packing Reports" do describe "fetching orders" do let(:distributor) { create(:distributor_enterprise) } diff --git a/spec/lib/reports/products_and_inventory_report_spec.rb b/spec/lib/reports/products_and_inventory_report_spec.rb index 5ecbc95cb3..0c231601fa 100644 --- a/spec/lib/reports/products_and_inventory_report_spec.rb +++ b/spec/lib/reports/products_and_inventory_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::ProductsAndInventory::Base do context "As a site admin" do let(:user) { create(:admin_user) } diff --git a/spec/lib/reports/report_loader_spec.rb b/spec/lib/reports/report_loader_spec.rb index a7a1247ddd..bf925537af 100644 --- a/spec/lib/reports/report_loader_spec.rb +++ b/spec/lib/reports/report_loader_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module Bananas diff --git a/spec/lib/reports/report_metadata_builder_spec.rb b/spec/lib/reports/report_metadata_builder_spec.rb index 2c6b77759a..36ee6d3ddc 100644 --- a/spec/lib/reports/report_metadata_builder_spec.rb +++ b/spec/lib/reports/report_metadata_builder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::ReportMetadataBuilder do let(:from_key) { described_class::DATE_FROM_KEYS.first } let(:to_key) { described_class::DATE_TO_KEYS.first } diff --git a/spec/lib/reports/report_renderer_spec.rb b/spec/lib/reports/report_renderer_spec.rb index 888f799522..f88bcd7552 100644 --- a/spec/lib/reports/report_renderer_spec.rb +++ b/spec/lib/reports/report_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::ReportRenderer do let(:data) { [ diff --git a/spec/lib/reports/report_spec.rb b/spec/lib/reports/report_spec.rb index 22a725f99c..435d7c9a6e 100644 --- a/spec/lib/reports/report_spec.rb +++ b/spec/lib/reports/report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # rubocop:disable Metrics/ModuleLength module Reporting RSpec.describe ReportTemplate do diff --git a/spec/lib/reports/sales_tax_report_spec.rb b/spec/lib/reports/sales_tax_report_spec.rb index 501ad972e9..3b54af5e39 100644 --- a/spec/lib/reports/sales_tax_report_spec.rb +++ b/spec/lib/reports/sales_tax_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module SalesTax diff --git a/spec/lib/reports/sales_tax_totals_by_order_spec.rb b/spec/lib/reports/sales_tax_totals_by_order_spec.rb index e8003da3a9..c8227acc6b 100644 --- a/spec/lib/reports/sales_tax_totals_by_order_spec.rb +++ b/spec/lib/reports/sales_tax_totals_by_order_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "Reporting::Reports::SalesTax::SalesTaxTotalsByOrder" do subject(:report) { Reporting::Reports::SalesTax::SalesTaxTotalsByOrder.new(user, {}) } diff --git a/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb b/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb index fbfb56df54..f21df629d0 100644 --- a/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb +++ b/spec/lib/reports/suppliers/pay_your_suppliers_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "Pay Your Suppliers Report" do let(:hub) { create(:distributor_enterprise) } let(:order_cycle) { create(:open_order_cycle, distributors: [hub]) } diff --git a/spec/lib/reports/users_and_enterprises_report_spec.rb b/spec/lib/reports/users_and_enterprises_report_spec.rb index 6c1fb6eebe..6cb909ad27 100644 --- a/spec/lib/reports/users_and_enterprises_report_spec.rb +++ b/spec/lib/reports/users_and_enterprises_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Reporting::Reports::UsersAndEnterprises::Base do describe "query_result" do let!(:owners_and_enterprises) { double(:owners_and_enterprises) } diff --git a/spec/lib/reports/xero_invoices_report_spec.rb b/spec/lib/reports/xero_invoices_report_spec.rb index cddc30a7dd..9b19a7b69f 100644 --- a/spec/lib/reports/xero_invoices_report_spec.rb +++ b/spec/lib/reports/xero_invoices_report_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Reporting module Reports module XeroInvoices diff --git a/spec/lib/spree/core/environment_spec.rb b/spec/lib/spree/core/environment_spec.rb index 114a2f05ca..d960fe7177 100644 --- a/spec/lib/spree/core/environment_spec.rb +++ b/spec/lib/spree/core/environment_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Core::Environment do # Our version doesn't add any features we could test. # So we just check that our file is loaded correctly. diff --git a/spec/lib/spree/core/mail_settings_spec.rb b/spec/lib/spree/core/mail_settings_spec.rb index 29b4ef3e63..162c5ac1db 100644 --- a/spec/lib/spree/core/mail_settings_spec.rb +++ b/spec/lib/spree/core/mail_settings_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Core::MailSettings do context "overrides appplication defaults" do context "authentication method is login" do diff --git a/spec/lib/spree/core/product_duplicator_spec.rb b/spec/lib/spree/core/product_duplicator_spec.rb index e8163e961d..5f22636065 100644 --- a/spec/lib/spree/core/product_duplicator_spec.rb +++ b/spec/lib/spree/core/product_duplicator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Core::ProductDuplicator do describe "unit" do let(:product) do diff --git a/spec/lib/spree/core/token_resource_spec.rb b/spec/lib/spree/core/token_resource_spec.rb index 1de0d25ea2..86f87e78d0 100644 --- a/spec/lib/spree/core/token_resource_spec.rb +++ b/spec/lib/spree/core/token_resource_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # Its pretty difficult to test this module in isolation b/c it needs to work in conjunction # with an actual class that extends ActiveRecord::Base and has a corresponding table in the DB. # So we'll just test it using Order instead since it included the module. diff --git a/spec/lib/spree/localized_number_spec.rb b/spec/lib/spree/localized_number_spec.rb index 31ce979d91..45021dfa1d 100644 --- a/spec/lib/spree/localized_number_spec.rb +++ b/spec/lib/spree/localized_number_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'spree/localized_number' RSpec.describe Spree::LocalizedNumber do diff --git a/spec/lib/spree/money_spec.rb b/spec/lib/spree/money_spec.rb index a32d8576c6..1a70be5cd8 100644 --- a/spec/lib/spree/money_spec.rb +++ b/spec/lib/spree/money_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::Money do include PreferencesHelper diff --git a/spec/lib/stripe/account_connector_spec.rb b/spec/lib/stripe/account_connector_spec.rb index 0108fbaa72..55787236c3 100644 --- a/spec/lib/stripe/account_connector_spec.rb +++ b/spec/lib/stripe/account_connector_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'stripe/account_connector' require 'stripe/oauth' diff --git a/spec/lib/stripe/authorize_response_patcher_spec.rb b/spec/lib/stripe/authorize_response_patcher_spec.rb index 56aac948f3..c734d74028 100644 --- a/spec/lib/stripe/authorize_response_patcher_spec.rb +++ b/spec/lib/stripe/authorize_response_patcher_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Stripe::AuthorizeResponsePatcher do describe "#call!" do subject(:patcher) { Stripe::AuthorizeResponsePatcher.new(response) } diff --git a/spec/lib/stripe/credit_card_cloner_spec.rb b/spec/lib/stripe/credit_card_cloner_spec.rb index 44acfb5373..f78e5d93c1 100644 --- a/spec/lib/stripe/credit_card_cloner_spec.rb +++ b/spec/lib/stripe/credit_card_cloner_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'stripe/credit_card_cloner' module Stripe diff --git a/spec/lib/stripe/credit_card_remover_spec.rb b/spec/lib/stripe/credit_card_remover_spec.rb index ebca8a2adf..15c0f26023 100644 --- a/spec/lib/stripe/credit_card_remover_spec.rb +++ b/spec/lib/stripe/credit_card_remover_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'stripe/credit_card_remover' RSpec.describe Stripe::CreditCardRemover do diff --git a/spec/lib/stripe/payment_intent_validator_spec.rb b/spec/lib/stripe/payment_intent_validator_spec.rb index 1ff8e683bc..28c1b3374d 100644 --- a/spec/lib/stripe/payment_intent_validator_spec.rb +++ b/spec/lib/stripe/payment_intent_validator_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'stripe/payment_intent_validator' RSpec.describe Stripe::PaymentIntentValidator do diff --git a/spec/lib/stripe/profile_storer_spec.rb b/spec/lib/stripe/profile_storer_spec.rb index 972651ff2f..e188bebdbe 100644 --- a/spec/lib/stripe/profile_storer_spec.rb +++ b/spec/lib/stripe/profile_storer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Stripe RSpec.describe ProfileStorer do include StripeStubs diff --git a/spec/lib/stripe/webhook_handler_spec.rb b/spec/lib/stripe/webhook_handler_spec.rb index 8218f7fa61..485ce5d002 100644 --- a/spec/lib/stripe/webhook_handler_spec.rb +++ b/spec/lib/stripe/webhook_handler_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'stripe/webhook_handler' module Stripe diff --git a/spec/lib/tasks/data/remove_transient_data_spec.rb b/spec/lib/tasks/data/remove_transient_data_spec.rb index e568453da4..83e2b21cec 100644 --- a/spec/lib/tasks/data/remove_transient_data_spec.rb +++ b/spec/lib/tasks/data/remove_transient_data_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'tasks/data/remove_transient_data' RSpec.describe RemoveTransientData do diff --git a/spec/lib/tasks/data/truncate_data_rake_spec.rb b/spec/lib/tasks/data/truncate_data_rake_spec.rb index 0df9bc3ca8..d4c3a30369 100644 --- a/spec/lib/tasks/data/truncate_data_rake_spec.rb +++ b/spec/lib/tasks/data/truncate_data_rake_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'truncate_data.rake' do describe ':truncate' do context 'when months_to_keep is specified' do diff --git a/spec/lib/tasks/data/truncate_data_spec.rb b/spec/lib/tasks/data/truncate_data_spec.rb index e799ec3a02..a670feaea2 100644 --- a/spec/lib/tasks/data/truncate_data_spec.rb +++ b/spec/lib/tasks/data/truncate_data_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'tasks/data/truncate_data' RSpec.describe TruncateData do diff --git a/spec/lib/tasks/enterprises_rake_spec.rb b/spec/lib/tasks/enterprises_rake_spec.rb index 5c60e7efb6..5c9ede616a 100644 --- a/spec/lib/tasks/enterprises_rake_spec.rb +++ b/spec/lib/tasks/enterprises_rake_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'enterprises.rake' do describe ':remove_enterprise' do context 'when the enterprises exists' do diff --git a/spec/lib/tasks/import_product_images_rake_spec.rb b/spec/lib/tasks/import_product_images_rake_spec.rb index 244910f110..edc5e554ee 100644 --- a/spec/lib/tasks/import_product_images_rake_spec.rb +++ b/spec/lib/tasks/import_product_images_rake_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'ofn:import:product_images' do describe 'task' do context "filename is blank" do diff --git a/spec/lib/tasks/reset_spec.rb b/spec/lib/tasks/reset_spec.rb index 8212722613..edb80dfb3e 100644 --- a/spec/lib/tasks/reset_spec.rb +++ b/spec/lib/tasks/reset_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "reset.rake" do it "clears job queues" do job_class = Class.new do diff --git a/spec/lib/tasks/sample_data_rake_spec.rb b/spec/lib/tasks/sample_data_rake_spec.rb index 1da5ee4ccd..b9a6b74ab4 100644 --- a/spec/lib/tasks/sample_data_rake_spec.rb +++ b/spec/lib/tasks/sample_data_rake_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'sample_data.rake' do before do # Create seed data required by the sample data. diff --git a/spec/lib/tasks/simplecov_spec.rb b/spec/lib/tasks/simplecov_spec.rb index 6cac5d58d4..4012c30032 100644 --- a/spec/lib/tasks/simplecov_spec.rb +++ b/spec/lib/tasks/simplecov_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "simplecov.rake" do describe "simplecov:collate_results" do context "when there are reports to merge" do diff --git a/spec/lib/tasks/users_rake_spec.rb b/spec/lib/tasks/users_rake_spec.rb index 0de7f80daf..eb780d7e59 100644 --- a/spec/lib/tasks/users_rake_spec.rb +++ b/spec/lib/tasks/users_rake_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'rake' RSpec.describe 'users.rake' do diff --git a/spec/mailers/backorder_mailer_spec.rb b/spec/mailers/backorder_mailer_spec.rb index 0073c423ec..5722b702ab 100644 --- a/spec/mailers/backorder_mailer_spec.rb +++ b/spec/mailers/backorder_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BackorderMailer do let(:order) { create(:completed_order_with_totals) } diff --git a/spec/mailers/enterprise_mailer_spec.rb b/spec/mailers/enterprise_mailer_spec.rb index 797dd78ddc..e0004cd9f4 100644 --- a/spec/mailers/enterprise_mailer_spec.rb +++ b/spec/mailers/enterprise_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterpriseMailer do let(:enterprise) { build(:enterprise, name: "Fred's Farm") } diff --git a/spec/mailers/mail_interceptor_spec.rb b/spec/mailers/mail_interceptor_spec.rb index 510cc3deea..9c36b6a71e 100644 --- a/spec/mailers/mail_interceptor_spec.rb +++ b/spec/mailers/mail_interceptor_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # Here we use the OrderMailer as a way to test the mail interceptor. RSpec.describe Spree::OrderMailer do let(:order) do diff --git a/spec/mailers/order_mailer_spec.rb b/spec/mailers/order_mailer_spec.rb index 020f54c3b8..0ef86a01b5 100644 --- a/spec/mailers/order_mailer_spec.rb +++ b/spec/mailers/order_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::OrderMailer do describe '#confirm_email_for_customer' do subject(:email) { described_class.confirm_email_for_customer(order) } diff --git a/spec/mailers/payment_mailer_spec.rb b/spec/mailers/payment_mailer_spec.rb index 1c520fbc19..8aed58f59a 100644 --- a/spec/mailers/payment_mailer_spec.rb +++ b/spec/mailers/payment_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PaymentMailer do describe '#payment_mailer' do let(:enterprise) { create(:enterprise) } diff --git a/spec/mailers/producer_mailer_spec.rb b/spec/mailers/producer_mailer_spec.rb index b909a31933..a6cd82d328 100644 --- a/spec/mailers/producer_mailer_spec.rb +++ b/spec/mailers/producer_mailer_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'yaml' RSpec.describe ProducerMailer do diff --git a/spec/mailers/report_mailer_spec.rb b/spec/mailers/report_mailer_spec.rb index 92bf7032c1..33552ecfb6 100644 --- a/spec/mailers/report_mailer_spec.rb +++ b/spec/mailers/report_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ReportMailer do describe "#report_ready" do subject(:email) { diff --git a/spec/mailers/shipment_mailer_spec.rb b/spec/mailers/shipment_mailer_spec.rb index bf234ce496..fb529c8f50 100644 --- a/spec/mailers/shipment_mailer_spec.rb +++ b/spec/mailers/shipment_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ShipmentMailer do let(:shipment) do order = build(:order_with_distributor) diff --git a/spec/mailers/subscription_mailer_spec.rb b/spec/mailers/subscription_mailer_spec.rb index f79f81e9e6..58651c00c1 100644 --- a/spec/mailers/subscription_mailer_spec.rb +++ b/spec/mailers/subscription_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SubscriptionMailer do include ActionView::Helpers::SanitizeHelper diff --git a/spec/mailers/test_mailer_spec.rb b/spec/mailers/test_mailer_spec.rb index 191f84a344..26d3519848 100644 --- a/spec/mailers/test_mailer_spec.rb +++ b/spec/mailers/test_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::TestMailer do let(:user) { create(:user) } diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index ff8aec0761..29512ca1cc 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::UserMailer do let(:user) { build(:user) } diff --git a/spec/migrations/20240213044159_copy_oidc_data_to_oidc_accounts_spec.rb b/spec/migrations/20240213044159_copy_oidc_data_to_oidc_accounts_spec.rb index 8a134c8b59..4e3ed64a3b 100644 --- a/spec/migrations/20240213044159_copy_oidc_data_to_oidc_accounts_spec.rb +++ b/spec/migrations/20240213044159_copy_oidc_data_to_oidc_accounts_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20240213044159_copy_oidc_data_to_oidc_accounts' RSpec.describe CopyOidcDataToOidcAccounts do diff --git a/spec/migrations/20240502035220_update_n8n_url_spec.rb b/spec/migrations/20240502035220_update_n8n_url_spec.rb index 2c318dcf18..94dcf8c505 100644 --- a/spec/migrations/20240502035220_update_n8n_url_spec.rb +++ b/spec/migrations/20240502035220_update_n8n_url_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20240502035220_update_n8n_url' RSpec.describe UpdateN8nUrl do diff --git a/spec/migrations/20240510033206_sanitize_enterprise_long_description_spec.rb b/spec/migrations/20240510033206_sanitize_enterprise_long_description_spec.rb index ee3d7b57ae..67c977582d 100644 --- a/spec/migrations/20240510033206_sanitize_enterprise_long_description_spec.rb +++ b/spec/migrations/20240510033206_sanitize_enterprise_long_description_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20240510033206_sanitize_enterprise_long_description' RSpec.describe SanitizeEnterpriseLongDescription do diff --git a/spec/migrations/20241011071014_update_item_name_to_product_in_od_report_spec.rb b/spec/migrations/20241011071014_update_item_name_to_product_in_od_report_spec.rb index b791b140a0..e404e04c7a 100644 --- a/spec/migrations/20241011071014_update_item_name_to_product_in_od_report_spec.rb +++ b/spec/migrations/20241011071014_update_item_name_to_product_in_od_report_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20241011071014_update_item_name_to_product_in_od_report' RSpec.describe UpdateItemNameToProductInOdReport, type: :migration do diff --git a/spec/migrations/20241023054951_sanitize_html_attributes_spec.rb b/spec/migrations/20241023054951_sanitize_html_attributes_spec.rb index d183cc4d1d..af8def5191 100644 --- a/spec/migrations/20241023054951_sanitize_html_attributes_spec.rb +++ b/spec/migrations/20241023054951_sanitize_html_attributes_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20241023054951_sanitize_html_attributes' RSpec.describe SanitizeHtmlAttributes do diff --git a/spec/migrations/20241030025540_copy_subject_on_semantic_links_spec.rb b/spec/migrations/20241030025540_copy_subject_on_semantic_links_spec.rb index 6ab69e950a..87c2d7b5e1 100644 --- a/spec/migrations/20241030025540_copy_subject_on_semantic_links_spec.rb +++ b/spec/migrations/20241030025540_copy_subject_on_semantic_links_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' + require_relative '../../db/migrate/20241030025540_copy_subject_on_semantic_links' RSpec.describe CopySubjectOnSemanticLinks do diff --git a/spec/migrations/convert_stripe_connect_to_stripe_sca_spec.rb b/spec/migrations/convert_stripe_connect_to_stripe_sca_spec.rb index f107bb2b66..c35179862d 100644 --- a/spec/migrations/convert_stripe_connect_to_stripe_sca_spec.rb +++ b/spec/migrations/convert_stripe_connect_to_stripe_sca_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require_relative '../../db/migrate/20220118053107_convert_stripe_connect_to_stripe_sca' module Spree diff --git a/spec/migrations/migrate_admin_tax_amounts_spec.rb b/spec/migrations/migrate_admin_tax_amounts_spec.rb index 41250be1cc..81ddaaf1c8 100644 --- a/spec/migrations/migrate_admin_tax_amounts_spec.rb +++ b/spec/migrations/migrate_admin_tax_amounts_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require_relative '../../db/migrate/20210617203927_migrate_admin_tax_amounts' RSpec.describe MigrateAdminTaxAmounts do diff --git a/spec/migrations/migrate_customer_names_spec.rb b/spec/migrations/migrate_customer_names_spec.rb index 9338e0e9a8..412ac95d2e 100644 --- a/spec/migrations/migrate_customer_names_spec.rb +++ b/spec/migrations/migrate_customer_names_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require_relative '../../db/migrate/20211027140313_migrate_customer_names' RSpec.describe MigrateCustomerNames do diff --git a/spec/migrations/migrate_cvv_message_to_redirect_auth_url.rb b/spec/migrations/migrate_cvv_message_to_redirect_auth_url.rb index 02682ac80b..35d00b730c 100644 --- a/spec/migrations/migrate_cvv_message_to_redirect_auth_url.rb +++ b/spec/migrations/migrate_cvv_message_to_redirect_auth_url.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require_relative '../../db/migrate/20250827205335_migrate_cvv_message_to_redirect_auth_url' RSpec.describe MigrateCvvMessageToRedirectAuthUrl, type: :migration do diff --git a/spec/migrations/update_enterprise_instagram_links_spec.rb b/spec/migrations/update_enterprise_instagram_links_spec.rb index 6dc5ec5ef3..06f2fa7eed 100644 --- a/spec/migrations/update_enterprise_instagram_links_spec.rb +++ b/spec/migrations/update_enterprise_instagram_links_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - require Rails.root.join('db/migrate/20221208150521_update_enterprise_instagram_links.rb') RSpec.describe UpdateEnterpriseInstagramLinks do diff --git a/spec/models/adjustment_metadata_spec.rb b/spec/models/adjustment_metadata_spec.rb index 9f4cd157b3..50a749bc03 100644 --- a/spec/models/adjustment_metadata_spec.rb +++ b/spec/models/adjustment_metadata_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe AdjustmentMetadata do it { is_expected.to belong_to(:adjustment).required } it { is_expected.to belong_to(:enterprise).required } diff --git a/spec/models/application_record_spec.rb b/spec/models/application_record_spec.rb index c07138b9f1..05e6788a6b 100644 --- a/spec/models/application_record_spec.rb +++ b/spec/models/application_record_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ApplicationRecord do describe ".image_service" do subject { described_class.image_service } diff --git a/spec/models/calculator/flat_percent_item_total_spec.rb b/spec/models/calculator/flat_percent_item_total_spec.rb index 8ffb10918a..2553d0f8fa 100644 --- a/spec/models/calculator/flat_percent_item_total_spec.rb +++ b/spec/models/calculator/flat_percent_item_total_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::FlatPercentItemTotal do let(:calculator) { Calculator::FlatPercentItemTotal.new } let(:line_item) { build_stubbed(:line_item, price: 10, quantity: 1) } diff --git a/spec/models/calculator/flat_percent_per_item_spec.rb b/spec/models/calculator/flat_percent_per_item_spec.rb index c8efad27a6..4d57f6edfc 100644 --- a/spec/models/calculator/flat_percent_per_item_spec.rb +++ b/spec/models/calculator/flat_percent_per_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::FlatPercentPerItem do let(:calculator) { Calculator::FlatPercentPerItem.new preferred_flat_percent: 20 } diff --git a/spec/models/calculator/flat_rate_spec.rb b/spec/models/calculator/flat_rate_spec.rb index 6b8ced68a6..c369be1f0b 100644 --- a/spec/models/calculator/flat_rate_spec.rb +++ b/spec/models/calculator/flat_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::FlatRate do let(:calculator) { Calculator::FlatRate.new } diff --git a/spec/models/calculator/flexi_rate_spec.rb b/spec/models/calculator/flexi_rate_spec.rb index 7129d1555e..5282b69de0 100644 --- a/spec/models/calculator/flexi_rate_spec.rb +++ b/spec/models/calculator/flexi_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::FlexiRate do let(:line_item) { build_stubbed(:line_item, quantity:) } let(:calculator) do diff --git a/spec/models/calculator/per_item_spec.rb b/spec/models/calculator/per_item_spec.rb index 78e324290a..94c843f3ef 100644 --- a/spec/models/calculator/per_item_spec.rb +++ b/spec/models/calculator/per_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::PerItem do let(:calculator) { Calculator::PerItem.new(preferred_amount: 10) } let(:shipping_calculable) { double(:calculable) } diff --git a/spec/models/calculator/price_sack_spec.rb b/spec/models/calculator/price_sack_spec.rb index 229f6b9cbf..633b0317f3 100644 --- a/spec/models/calculator/price_sack_spec.rb +++ b/spec/models/calculator/price_sack_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::PriceSack do let(:calculator) do calculator = Calculator::PriceSack.new diff --git a/spec/models/calculator/weight_spec.rb b/spec/models/calculator/weight_spec.rb index 0ab084057b..7b1449d22a 100644 --- a/spec/models/calculator/weight_spec.rb +++ b/spec/models/calculator/weight_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Calculator::Weight do it "computes shipping cost for an order by total weight" do variant1 = build_stubbed(:variant, unit_value: 10_000) diff --git a/spec/models/column_preference_spec.rb b/spec/models/column_preference_spec.rb index b043bd53db..1940924cec 100644 --- a/spec/models/column_preference_spec.rb +++ b/spec/models/column_preference_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ColumnPreference do subject { ColumnPreference.new( diff --git a/spec/models/concerns/balance_spec.rb b/spec/models/concerns/balance_spec.rb index dcf82dd601..1ab0b6dadb 100644 --- a/spec/models/concerns/balance_spec.rb +++ b/spec/models/concerns/balance_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Balance do context "#new_outstanding_balance" do context 'when orders are in cart state' do diff --git a/spec/models/concerns/calculated_adjustments_spec.rb b/spec/models/concerns/calculated_adjustments_spec.rb index 01eda5fbd1..cf6d210e5a 100644 --- a/spec/models/concerns/calculated_adjustments_spec.rb +++ b/spec/models/concerns/calculated_adjustments_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # Its pretty difficult to test this module in isolation b/c it needs to work in conjunction # with an actual class that extends ActiveRecord::Base and has a corresponding table in the DB. # So we'll just test it using Order and ShippingMethod. These classes are including the module. diff --git a/spec/models/concerns/order_shipment_spec.rb b/spec/models/concerns/order_shipment_spec.rb index fe5843ebf3..23e35d2c9b 100644 --- a/spec/models/concerns/order_shipment_spec.rb +++ b/spec/models/concerns/order_shipment_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderShipment do let(:order) { create(:order) } diff --git a/spec/models/concerns/variant_stock_spec.rb b/spec/models/concerns/variant_stock_spec.rb index 26f650d86c..fc574e776b 100644 --- a/spec/models/concerns/variant_stock_spec.rb +++ b/spec/models/concerns/variant_stock_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VariantStock do let(:variant) { create(:variant) } diff --git a/spec/models/connected_app_spec.rb b/spec/models/connected_app_spec.rb index b8d5749443..d4e057bc65 100644 --- a/spec/models/connected_app_spec.rb +++ b/spec/models/connected_app_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ConnectedApp do it { is_expected.to belong_to :enterprise } diff --git a/spec/models/connected_apps/vine_spec.rb b/spec/models/connected_apps/vine_spec.rb index c3a2e8cf44..85e4af0dca 100644 --- a/spec/models/connected_apps/vine_spec.rb +++ b/spec/models/connected_apps/vine_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ConnectedApps::Vine do subject(:connected_app) { ConnectedApps::Vine.new(enterprise: create(:enterprise)) } diff --git a/spec/models/content_configuration_spec.rb b/spec/models/content_configuration_spec.rb index 4b29dd4904..42a74b2eea 100644 --- a/spec/models/content_configuration_spec.rb +++ b/spec/models/content_configuration_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ContentConfiguration do describe "default logos and home_hero" do it "sets a default url with existing image" do diff --git a/spec/models/coordinator_fee_spec.rb b/spec/models/coordinator_fee_spec.rb index 980935c0a9..38822215a1 100644 --- a/spec/models/coordinator_fee_spec.rb +++ b/spec/models/coordinator_fee_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CoordinatorFee do it { is_expected.to belong_to(:order_cycle).required } it { is_expected.to belong_to(:enterprise_fee).required } diff --git a/spec/models/custom_tab_spec.rb b/spec/models/custom_tab_spec.rb index 7ee37614cf..195c6d3305 100644 --- a/spec/models/custom_tab_spec.rb +++ b/spec/models/custom_tab_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CustomTab do describe 'associations' do it { is_expected.to belong_to(:enterprise).required } diff --git a/spec/models/customer_spec.rb b/spec/models/customer_spec.rb index 4aaf749067..c79bd269f8 100644 --- a/spec/models/customer_spec.rb +++ b/spec/models/customer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Customer do it { is_expected.to belong_to(:enterprise).required } it { is_expected.to belong_to(:user).optional } diff --git a/spec/models/database_spec.rb b/spec/models/database_spec.rb index 2994085c97..df6fc91028 100644 --- a/spec/models/database_spec.rb +++ b/spec/models/database_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "Database" do let(:models_todo) { ["Spree::CreditCard", "Spree::Adjustment", diff --git a/spec/models/dfc_permission_spec.rb b/spec/models/dfc_permission_spec.rb index d91c166cf0..5e3d64f41e 100644 --- a/spec/models/dfc_permission_spec.rb +++ b/spec/models/dfc_permission_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe DfcPermission do it { is_expected.to belong_to :user } it { is_expected.to belong_to :enterprise } diff --git a/spec/models/enterprise_caching_spec.rb b/spec/models/enterprise_caching_spec.rb index 38c1d8409a..6acc56e23b 100644 --- a/spec/models/enterprise_caching_spec.rb +++ b/spec/models/enterprise_caching_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Enterprise do context "key-based caching invalidation" do describe "is touched when a(n)" do diff --git a/spec/models/enterprise_fee_adjustments_spec.rb b/spec/models/enterprise_fee_adjustments_spec.rb index df281deeba..78bf644dab 100644 --- a/spec/models/enterprise_fee_adjustments_spec.rb +++ b/spec/models/enterprise_fee_adjustments_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterpriseFeeAdjustments do let(:tax_rate) { create(:tax_rate, amount: 0.1) } let(:line_item) { create(:line_item) } diff --git a/spec/models/enterprise_fee_spec.rb b/spec/models/enterprise_fee_spec.rb index fac578eca2..5c0462ffde 100644 --- a/spec/models/enterprise_fee_spec.rb +++ b/spec/models/enterprise_fee_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterpriseFee do describe "associations" do it { is_expected.to belong_to(:enterprise).required } diff --git a/spec/models/enterprise_group_spec.rb b/spec/models/enterprise_group_spec.rb index 6ce1aa856f..49f411d8e9 100644 --- a/spec/models/enterprise_group_spec.rb +++ b/spec/models/enterprise_group_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe EnterpriseGroup do describe "associations" do subject { build(:enterprise_group) } diff --git a/spec/models/enterprise_relationship_spec.rb b/spec/models/enterprise_relationship_spec.rb index d4d9dbd2c7..a5e08817f8 100644 --- a/spec/models/enterprise_relationship_spec.rb +++ b/spec/models/enterprise_relationship_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EnterpriseRelationship do describe "scopes" do let(:e1) { create(:enterprise, name: 'A') } diff --git a/spec/models/enterprise_spec.rb b/spec/models/enterprise_spec.rb index 0f3152abd5..9deee6ddff 100644 --- a/spec/models/enterprise_spec.rb +++ b/spec/models/enterprise_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Enterprise do describe "sending emails" do describe "on creation" do diff --git a/spec/models/exchange_spec.rb b/spec/models/exchange_spec.rb index 2377e3618e..f71a94e0f8 100644 --- a/spec/models/exchange_spec.rb +++ b/spec/models/exchange_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Exchange do it { is_expected.to have_many :semantic_links } diff --git a/spec/models/invoice/data_presenter/line_item_spec.rb b/spec/models/invoice/data_presenter/line_item_spec.rb index 81abe073bd..f3fc34daf8 100644 --- a/spec/models/invoice/data_presenter/line_item_spec.rb +++ b/spec/models/invoice/data_presenter/line_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Invoice::DataPresenter::LineItem do subject(:presenter) { described_class.new(data) } diff --git a/spec/models/invoice/data_presenter_spec.rb b/spec/models/invoice/data_presenter_spec.rb index 4c76cb2e4e..3dbcbb374a 100644 --- a/spec/models/invoice/data_presenter_spec.rb +++ b/spec/models/invoice/data_presenter_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Invoice::DataPresenter do context "#display_date" do let(:invoice) { double(:invoice, date: '2023-08-01') } diff --git a/spec/models/invoice_spec.rb b/spec/models/invoice_spec.rb index 35b8aab258..146027df12 100644 --- a/spec/models/invoice_spec.rb +++ b/spec/models/invoice_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Invoice do let(:distributor) { create(:distributor_enterprise) } let(:order) { create(:order, :with_line_item, :completed, distributor:) } diff --git a/spec/models/oidc_account_spec.rb b/spec/models/oidc_account_spec.rb index 7ce379d299..19cf656d9c 100644 --- a/spec/models/oidc_account_spec.rb +++ b/spec/models/oidc_account_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OidcAccount do describe "associations and validations" do subject { diff --git a/spec/models/order_balance_spec.rb b/spec/models/order_balance_spec.rb index 7e3247900f..6c6d2cca27 100644 --- a/spec/models/order_balance_spec.rb +++ b/spec/models/order_balance_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderBalance do subject(:order_balance) { described_class.new(order) } let(:order) { build(:order) } diff --git a/spec/models/order_cycle_spec.rb b/spec/models/order_cycle_spec.rb index e10d404027..2cc3b3bb52 100644 --- a/spec/models/order_cycle_spec.rb +++ b/spec/models/order_cycle_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycle do it "should be valid when built from factory" do expect(build(:simple_order_cycle)).to be_valid diff --git a/spec/models/product_import/entry_processor_spec.rb b/spec/models/product_import/entry_processor_spec.rb index 13022d2207..071a744931 100644 --- a/spec/models/product_import/entry_processor_spec.rb +++ b/spec/models/product_import/entry_processor_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductImport::EntryProcessor do let(:importer) { double(:importer) } let(:validator) { double(:validator) } diff --git a/spec/models/product_import/entry_validator_spec.rb b/spec/models/product_import/entry_validator_spec.rb index 6583dcfe30..196eb66f87 100644 --- a/spec/models/product_import/entry_validator_spec.rb +++ b/spec/models/product_import/entry_validator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductImport::EntryValidator do let(:current_user) { double(:current_user) } let(:import_time) { double(:import_time) } diff --git a/spec/models/product_import/inventory_reset_strategy_spec.rb b/spec/models/product_import/inventory_reset_strategy_spec.rb index d7e6a7abc7..039ec59b5d 100644 --- a/spec/models/product_import/inventory_reset_strategy_spec.rb +++ b/spec/models/product_import/inventory_reset_strategy_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductImport::InventoryResetStrategy do let(:inventory_reset) { described_class.new(excluded_items_ids) } diff --git a/spec/models/product_import/reset_absent_spec.rb b/spec/models/product_import/reset_absent_spec.rb index 6a1bf2a56a..2118441cb1 100644 --- a/spec/models/product_import/reset_absent_spec.rb +++ b/spec/models/product_import/reset_absent_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module ProductImport RSpec.describe ResetAbsent do let(:entry_processor) { instance_double(EntryProcessor) } diff --git a/spec/models/product_import/settings_spec.rb b/spec/models/product_import/settings_spec.rb index 1eaa119543..42fdb66b22 100644 --- a/spec/models/product_import/settings_spec.rb +++ b/spec/models/product_import/settings_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductImport::Settings do let(:settings) { described_class.new(import_settings) } diff --git a/spec/models/product_import/spreadsheet_entry_spec.rb b/spec/models/product_import/spreadsheet_entry_spec.rb index 06ed7d68f3..d092d27462 100644 --- a/spec/models/product_import/spreadsheet_entry_spec.rb +++ b/spec/models/product_import/spreadsheet_entry_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' RSpec.describe ProductImport::SpreadsheetEntry do let(:enterprise) { create(:enterprise) } let(:entry) { diff --git a/spec/models/product_importer_spec.rb b/spec/models/product_importer_spec.rb index f2494e1e97..7fa38ac28d 100644 --- a/spec/models/product_importer_spec.rb +++ b/spec/models/product_importer_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'open_food_network/permissions' RSpec.describe ProductImport::ProductImporter do diff --git a/spec/models/proxy_order_spec.rb b/spec/models/proxy_order_spec.rb index 6c7f5666be..f3117ff16d 100644 --- a/spec/models/proxy_order_spec.rb +++ b/spec/models/proxy_order_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProxyOrder do describe "cancel" do let(:order_cycle) { create(:simple_order_cycle) } diff --git a/spec/models/report_blob_spec.rb b/spec/models/report_blob_spec.rb index 1622b77c6f..be1b1261ad 100644 --- a/spec/models/report_blob_spec.rb +++ b/spec/models/report_blob_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe ReportBlob do it "preserves UTF-8 content" do content = "This works. ✓" diff --git a/spec/models/semantic_link_spec.rb b/spec/models/semantic_link_spec.rb index ac82a766e1..b6ccec660e 100644 --- a/spec/models/semantic_link_spec.rb +++ b/spec/models/semantic_link_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SemanticLink do it { is_expected.to belong_to :subject } it { is_expected.to validate_presence_of(:semantic_id) } diff --git a/spec/models/spree/ability_spec.rb b/spec/models/spree/ability_spec.rb index 8d0aab1c4c..60b0b67f8e 100644 --- a/spec/models/spree/ability_spec.rb +++ b/spec/models/spree/ability_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'cancan/matchers' require 'support/ability_helpers' diff --git a/spec/models/spree/address_spec.rb b/spec/models/spree/address_spec.rb index 712a4ad6ed..bc8fe1c39e 100644 --- a/spec/models/spree/address_spec.rb +++ b/spec/models/spree/address_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Address do describe "clone" do it "creates a copy of the address with the exception of the id, " \ diff --git a/spec/models/spree/addresses_spec.rb b/spec/models/spree/addresses_spec.rb index e2aa0ea9e6..4bb146b50c 100644 --- a/spec/models/spree/addresses_spec.rb +++ b/spec/models/spree/addresses_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Address do let(:address) { build(:address) } let(:enterprise_address) { build(:address, enterprise: build(:enterprise)) } diff --git a/spec/models/spree/adjustment_spec.rb b/spec/models/spree/adjustment_spec.rb index a68e9db6d9..67b70cce7a 100644 --- a/spec/models/spree/adjustment_spec.rb +++ b/spec/models/spree/adjustment_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Adjustment do let(:order) { build(:order) } let(:adjustment) { described_class.create(label: "Adjustment", amount: 5) } diff --git a/spec/models/spree/app_configuration_spec.rb b/spec/models/spree/app_configuration_spec.rb index 9a0843fb30..1287ef89f7 100644 --- a/spec/models/spree/app_configuration_spec.rb +++ b/spec/models/spree/app_configuration_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::AppConfiguration do let(:prefs) { Rails.application.config.spree.preferences } diff --git a/spec/models/spree/asset_spec.rb b/spec/models/spree/asset_spec.rb index 2268537256..c27aa57073 100644 --- a/spec/models/spree/asset_spec.rb +++ b/spec/models/spree/asset_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Asset do describe "#viewable" do it "touches association" do diff --git a/spec/models/spree/calculator_spec.rb b/spec/models/spree/calculator_spec.rb index 85d6c4a908..26d746a967 100644 --- a/spec/models/spree/calculator_spec.rb +++ b/spec/models/spree/calculator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree RSpec.describe Calculator do let(:calculator) { Spree::Calculator.new } diff --git a/spec/models/spree/credit_card_spec.rb b/spec/models/spree/credit_card_spec.rb index d39162360e..29f1fdf753 100644 --- a/spec/models/spree/credit_card_spec.rb +++ b/spec/models/spree/credit_card_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::CreditCard do let(:valid_credit_card_attributes) { { diff --git a/spec/models/spree/gateway/stripe_sca_spec.rb b/spec/models/spree/gateway/stripe_sca_spec.rb index 489c9fc90f..495c33aa6b 100644 --- a/spec/models/spree/gateway/stripe_sca_spec.rb +++ b/spec/models/spree/gateway/stripe_sca_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Gateway::StripeSCA, :vcr, :stripe_version do let(:order) { create(:order_ready_for_payment) } diff --git a/spec/models/spree/gateway_spec.rb b/spec/models/spree/gateway_spec.rb index b1e0d65205..0b46238436 100644 --- a/spec/models/spree/gateway_spec.rb +++ b/spec/models/spree/gateway_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Gateway do let(:test_gateway) do Class.new(Spree::Gateway) do diff --git a/spec/models/spree/gateway_tagging_spec.rb b/spec/models/spree/gateway_tagging_spec.rb index 6ba82372e3..653bbb7eff 100644 --- a/spec/models/spree/gateway_tagging_spec.rb +++ b/spec/models/spree/gateway_tagging_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - # We extended Spree::PaymentMethod to be taggable. Unfortunately, an inheritance # bug prevented the taggable code to be passed on to the descendants of # PaymentMethod. We fixed that in config/initializers/spree.rb. diff --git a/spec/models/spree/image_spec.rb b/spec/models/spree/image_spec.rb index 115c20b526..1d044be020 100644 --- a/spec/models/spree/image_spec.rb +++ b/spec/models/spree/image_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - module Spree RSpec.describe Image do include FileHelper diff --git a/spec/models/spree/inventory_unit_spec.rb b/spec/models/spree/inventory_unit_spec.rb index 8af09dc651..474ed58429 100644 --- a/spec/models/spree/inventory_unit_spec.rb +++ b/spec/models/spree/inventory_unit_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::InventoryUnit do let(:variant) { create(:variant) } let(:stock_item) { variant.stock_item } diff --git a/spec/models/spree/line_item_spec.rb b/spec/models/spree/line_item_spec.rb index eb4d345ce5..5ece7b8034 100644 --- a/spec/models/spree/line_item_spec.rb +++ b/spec/models/spree/line_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::LineItem do let(:order) { create :order_with_line_items, line_items_count: 1 } let(:line_item) { order.line_items.first } diff --git a/spec/models/spree/order/address_spec.rb b/spec/models/spree/order/address_spec.rb index d85110c43b..5abfd16c10 100644 --- a/spec/models/spree/order/address_spec.rb +++ b/spec/models/spree/order/address_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order do let(:order) { Spree::Order.new } diff --git a/spec/models/spree/order/adjustments_spec.rb b/spec/models/spree/order/adjustments_spec.rb index a204822061..4678de4fb5 100644 --- a/spec/models/spree/order/adjustments_spec.rb +++ b/spec/models/spree/order/adjustments_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order do let(:order) { Spree::Order.new } diff --git a/spec/models/spree/order/callbacks_spec.rb b/spec/models/spree/order/callbacks_spec.rb index 9918b93157..5f2ea155d8 100644 --- a/spec/models/spree/order/callbacks_spec.rb +++ b/spec/models/spree/order/callbacks_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order do let(:order) { build(:order) } before do diff --git a/spec/models/spree/order/checkout_spec.rb b/spec/models/spree/order/checkout_spec.rb index 1925b1ac15..4dec40c8b0 100644 --- a/spec/models/spree/order/checkout_spec.rb +++ b/spec/models/spree/order/checkout_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order::Checkout do let(:order) { Spree::Order.new } diff --git a/spec/models/spree/order/payment_spec.rb b/spec/models/spree/order/payment_spec.rb index 3c61d7fe93..146cfa5e02 100644 --- a/spec/models/spree/order/payment_spec.rb +++ b/spec/models/spree/order/payment_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree RSpec.describe Spree::Order do before { Stripe.api_key = "sk_test_12345" } diff --git a/spec/models/spree/order/state_machine_spec.rb b/spec/models/spree/order/state_machine_spec.rb index b0a03d17eb..7ac1d81333 100644 --- a/spec/models/spree/order/state_machine_spec.rb +++ b/spec/models/spree/order/state_machine_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order do let(:order) { Spree::Order.new } before do diff --git a/spec/models/spree/order/tax_spec.rb b/spec/models/spree/order/tax_spec.rb index eaefb0855e..f5b47725e9 100644 --- a/spec/models/spree/order/tax_spec.rb +++ b/spec/models/spree/order/tax_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Order do let(:order) { build(:order) } diff --git a/spec/models/spree/order_contents_spec.rb b/spec/models/spree/order_contents_spec.rb index 7f18fe5f95..02b4a09d8f 100644 --- a/spec/models/spree/order_contents_spec.rb +++ b/spec/models/spree/order_contents_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::OrderContents do let!(:order) { create(:order) } let!(:variant) { create(:variant) } diff --git a/spec/models/spree/order_inventory_spec.rb b/spec/models/spree/order_inventory_spec.rb index 234e9d5207..67058014c5 100644 --- a/spec/models/spree/order_inventory_spec.rb +++ b/spec/models/spree/order_inventory_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::OrderInventory do let(:order) { create :completed_order_with_totals } let(:line_item) { order.line_items.first } diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index be8bf6019c..d9ae1a59f3 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::Order do let(:user) { build(:user, email: "spree@example.com") } let(:order) { build(:order, user:) } diff --git a/spec/models/spree/payment_method_spec.rb b/spec/models/spree/payment_method_spec.rb index 877164f8b4..d84d6e4ca3 100644 --- a/spec/models/spree/payment_method_spec.rb +++ b/spec/models/spree/payment_method_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - class Spree::Gateway::Test < Spree::Gateway end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 6b7dda5d04..360ad11318 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Payment do before do # mock the call with "ofn.payment_transition" so we don't call the related listener and services diff --git a/spec/models/spree/preference_spec.rb b/spec/models/spree/preference_spec.rb index 636c1d15c9..afa220f8fa 100644 --- a/spec/models/spree/preference_spec.rb +++ b/spec/models/spree/preference_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Preference do it "should require a key" do @preference = Spree::Preference.new diff --git a/spec/models/spree/preferences/configuration_spec.rb b/spec/models/spree/preferences/configuration_spec.rb index a309883dcd..0c63176a7b 100644 --- a/spec/models/spree/preferences/configuration_spec.rb +++ b/spec/models/spree/preferences/configuration_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Preferences::Configuration do let(:config) do Class.new(Spree::Preferences::Configuration) do diff --git a/spec/models/spree/preferences/preferable_spec.rb b/spec/models/spree/preferences/preferable_spec.rb index 6876551f83..ee2dc33b09 100644 --- a/spec/models/spree/preferences/preferable_spec.rb +++ b/spec/models/spree/preferences/preferable_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Preferences::Preferable do a_class = A = Class.new do diff --git a/spec/models/spree/preferences/store_spec.rb b/spec/models/spree/preferences/store_spec.rb index d8d2b4d1ec..cb53f5d951 100644 --- a/spec/models/spree/preferences/store_spec.rb +++ b/spec/models/spree/preferences/store_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Preferences::Store do before :each do @store = Spree::Preferences::StoreInstance.new diff --git a/spec/models/spree/price_spec.rb b/spec/models/spree/price_spec.rb index 047d5da268..4739151047 100644 --- a/spec/models/spree/price_spec.rb +++ b/spec/models/spree/price_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree RSpec.describe Price do let(:variant) { create(:variant) } diff --git a/spec/models/spree/product_property_spec.rb b/spec/models/spree/product_property_spec.rb index 1af2043ac0..94c4498fec 100644 --- a/spec/models/spree/product_property_spec.rb +++ b/spec/models/spree/product_property_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ProductProperty do context "validations" do it "should validate length of value" do diff --git a/spec/models/spree/product_sort_by_stocks_spec.rb b/spec/models/spree/product_sort_by_stocks_spec.rb index 791957f8bb..6f9855632b 100644 --- a/spec/models/spree/product_sort_by_stocks_spec.rb +++ b/spec/models/spree/product_sort_by_stocks_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'ProductSortByStocks' do let(:product) { create(:product) } diff --git a/spec/models/spree/product_spec.rb b/spec/models/spree/product_spec.rb index 175d2f58f0..dd78acbac5 100644 --- a/spec/models/spree/product_spec.rb +++ b/spec/models/spree/product_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'spree/core/product_duplicator' RSpec.describe Spree::Product do diff --git a/spec/models/spree/return_authorization_spec.rb b/spec/models/spree/return_authorization_spec.rb index 8dd7b949e4..40b63318ba 100644 --- a/spec/models/spree/return_authorization_spec.rb +++ b/spec/models/spree/return_authorization_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ReturnAuthorization do let(:order) { create(:shipped_order) } let(:variant) { order.shipments.first.inventory_units.first.variant } diff --git a/spec/models/spree/shipment_spec.rb b/spec/models/spree/shipment_spec.rb index 81acff4c45..1ee1a3f863 100644 --- a/spec/models/spree/shipment_spec.rb +++ b/spec/models/spree/shipment_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'benchmark' RSpec.describe Spree::Shipment do diff --git a/spec/models/spree/shipping_method_spec.rb b/spec/models/spree/shipping_method_spec.rb index 776f9e2458..5470456bb9 100644 --- a/spec/models/spree/shipping_method_spec.rb +++ b/spec/models/spree/shipping_method_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ShippingMethod do it "is valid when built from factory" do expect( diff --git a/spec/models/spree/shipping_rate_spec.rb b/spec/models/spree/shipping_rate_spec.rb index 3343355edf..1a6165697a 100644 --- a/spec/models/spree/shipping_rate_spec.rb +++ b/spec/models/spree/shipping_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::ShippingRate do let(:shipment) { create(:shipment) } let(:shipping_method) { build_stubbed(:shipping_method) } diff --git a/spec/models/spree/state_spec.rb b/spec/models/spree/state_spec.rb index efe83bc41e..2f72ac823d 100644 --- a/spec/models/spree/state_spec.rb +++ b/spec/models/spree/state_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::State do before(:all) do Spree::State.destroy_all diff --git a/spec/models/spree/stock/availability_validator_spec.rb b/spec/models/spree/stock/availability_validator_spec.rb index ed286264f4..e8d51cbc26 100644 --- a/spec/models/spree/stock/availability_validator_spec.rb +++ b/spec/models/spree/stock/availability_validator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Stock RSpec.describe AvailabilityValidator do diff --git a/spec/models/spree/stock/quantifier_spec.rb b/spec/models/spree/stock/quantifier_spec.rb index d697a668d8..d0219fef54 100644 --- a/spec/models/spree/stock/quantifier_spec.rb +++ b/spec/models/spree/stock/quantifier_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Spree module Stock RSpec.describe Quantifier do diff --git a/spec/models/spree/stock_item_spec.rb b/spec/models/spree/stock_item_spec.rb index 346c23c207..7af59c3efb 100644 --- a/spec/models/spree/stock_item_spec.rb +++ b/spec/models/spree/stock_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::StockItem do subject(:stock_item) { create(:variant, on_hand: 15).stock_item } diff --git a/spec/models/spree/tax_category_spec.rb b/spec/models/spree/tax_category_spec.rb index ce86c94017..59bd797bf7 100644 --- a/spec/models/spree/tax_category_spec.rb +++ b/spec/models/spree/tax_category_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::TaxCategory do context 'default tax category' do let(:tax_category) { create(:tax_category) } diff --git a/spec/models/spree/tax_rate_spec.rb b/spec/models/spree/tax_rate_spec.rb index 2e0fc50017..8aabfcd681 100644 --- a/spec/models/spree/tax_rate_spec.rb +++ b/spec/models/spree/tax_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::TaxRate do describe ".match" do let!(:zone) { create(:zone_with_member) } diff --git a/spec/models/spree/taxon_spec.rb b/spec/models/spree/taxon_spec.rb index c699fd583f..30a56bbfae 100644 --- a/spec/models/spree/taxon_spec.rb +++ b/spec/models/spree/taxon_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Taxon do let(:taxon) { described_class.new(name: "Ruby on Rails") } diff --git a/spec/models/spree/user_spec.rb b/spec/models/spree/user_spec.rb index 6d123b6990..517b405ac7 100644 --- a/spec/models/spree/user_spec.rb +++ b/spec/models/spree/user_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::User do describe "associations" do it { is_expected.to have_many(:owned_enterprises) } diff --git a/spec/models/spree/variant_spec.rb b/spec/models/spree/variant_spec.rb index aac0ae441c..86d3ca92ff 100644 --- a/spec/models/spree/variant_spec.rb +++ b/spec/models/spree/variant_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' require 'spree/localized_number' RSpec.describe Spree::Variant do diff --git a/spec/models/spree/variant_stock_spec.rb b/spec/models/spree/variant_stock_spec.rb index ee33b40f61..226c7b8ed0 100644 --- a/spec/models/spree/variant_stock_spec.rb +++ b/spec/models/spree/variant_stock_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe Spree::Variant do # These methods are defined in app/models/concerns/variant_stock.rb. # There is a separate spec for that concern but here I want to test diff --git a/spec/models/spree/zone_spec.rb b/spec/models/spree/zone_spec.rb index 32f3a2dd53..ae2dd8ea13 100644 --- a/spec/models/spree/zone_spec.rb +++ b/spec/models/spree/zone_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Spree::Zone do describe "validations" do it { is_expected.to validate_presence_of(:name) } diff --git a/spec/models/stripe_account_spec.rb b/spec/models/stripe_account_spec.rb index 98fd70a934..930719366e 100644 --- a/spec/models/stripe_account_spec.rb +++ b/spec/models/stripe_account_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'stripe/oauth' RSpec.describe StripeAccount do diff --git a/spec/models/subscription_line_item_spec.rb b/spec/models/subscription_line_item_spec.rb index 473c04a1a5..976caf6ee0 100644 --- a/spec/models/subscription_line_item_spec.rb +++ b/spec/models/subscription_line_item_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SubscriptionLineItem, model: true do describe "validations" do it "requires a subscription" do diff --git a/spec/models/subscription_spec.rb b/spec/models/subscription_spec.rb index 13a320cf45..ca76fdec98 100644 --- a/spec/models/subscription_spec.rb +++ b/spec/models/subscription_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Subscription do describe "associations" do it { expect(subject).to belong_to(:shop).optional } diff --git a/spec/models/tag_rule/filter_order_cycles_spec.rb b/spec/models/tag_rule/filter_order_cycles_spec.rb index c4eded6125..91a6c17180 100644 --- a/spec/models/tag_rule/filter_order_cycles_spec.rb +++ b/spec/models/tag_rule/filter_order_cycles_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule::FilterOrderCycles do let(:tag_rule) { build(:filter_order_cycles_tag_rule, preferred_exchange_tags: order_cycle_tags, enterprise:) diff --git a/spec/models/tag_rule/filter_payment_methods_spec.rb b/spec/models/tag_rule/filter_payment_methods_spec.rb index fe7b4056b2..3eb9388721 100644 --- a/spec/models/tag_rule/filter_payment_methods_spec.rb +++ b/spec/models/tag_rule/filter_payment_methods_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule::FilterPaymentMethods do let(:tag_rule) { build(:filter_payment_methods_tag_rule, preferred_payment_method_tags: payment_method_tags) diff --git a/spec/models/tag_rule/filter_products_spec.rb b/spec/models/tag_rule/filter_products_spec.rb index 58e0ec7409..316b27d41e 100644 --- a/spec/models/tag_rule/filter_products_spec.rb +++ b/spec/models/tag_rule/filter_products_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule::FilterProducts do let(:tag_rule) { build(:filter_products_tag_rule, preferred_variant_tags: variant_tags) } let(:variant_tags) { "" } diff --git a/spec/models/tag_rule/filter_shipping_methods_spec.rb b/spec/models/tag_rule/filter_shipping_methods_spec.rb index 022df21ee0..d85d79f899 100644 --- a/spec/models/tag_rule/filter_shipping_methods_spec.rb +++ b/spec/models/tag_rule/filter_shipping_methods_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule::FilterShippingMethods do let(:tag_rule) { build(:filter_shipping_methods_tag_rule, preferred_shipping_method_tags: shipping_method_tags) diff --git a/spec/models/tag_rule/filter_variants_spec.rb b/spec/models/tag_rule/filter_variants_spec.rb index a9da63d407..5e3d278ea5 100644 --- a/spec/models/tag_rule/filter_variants_spec.rb +++ b/spec/models/tag_rule/filter_variants_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule::FilterVariants do let(:tag_rule) { build(:filter_variants_tag_rule, preferred_variant_tags: variant_tags) } let(:variant_tags) { "" } diff --git a/spec/models/tag_rule_spec.rb b/spec/models/tag_rule_spec.rb index eb27a088de..7644c43570 100644 --- a/spec/models/tag_rule_spec.rb +++ b/spec/models/tag_rule_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TagRule do describe "validations" do it "requires a enterprise" do diff --git a/spec/models/terms_of_service_file_spec.rb b/spec/models/terms_of_service_file_spec.rb index 41cb567136..95826c6e5a 100644 --- a/spec/models/terms_of_service_file_spec.rb +++ b/spec/models/terms_of_service_file_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TermsOfServiceFile do include FileHelper diff --git a/spec/models/variant_override_spec.rb b/spec/models/variant_override_spec.rb index 41122e6e71..6bb91360be 100644 --- a/spec/models/variant_override_spec.rb +++ b/spec/models/variant_override_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VariantOverride do let(:variant) { create(:variant) } let(:hub) { create(:distributor_enterprise) } diff --git a/spec/models/voucher_spec.rb b/spec/models/voucher_spec.rb index aff8f19eef..6893806260 100644 --- a/spec/models/voucher_spec.rb +++ b/spec/models/voucher_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # This is used to test non implemented methods module Vouchers class TestVoucher < Voucher; end diff --git a/spec/models/vouchers/flat_rate_spec.rb b/spec/models/vouchers/flat_rate_spec.rb index b9e85d9fbb..4363b17816 100644 --- a/spec/models/vouchers/flat_rate_spec.rb +++ b/spec/models/vouchers/flat_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Vouchers::FlatRate do describe 'validations' do subject { build(:voucher_flat_rate) } diff --git a/spec/models/vouchers/percentage_rate_spec.rb b/spec/models/vouchers/percentage_rate_spec.rb index 89c4834da3..be99d47b7f 100644 --- a/spec/models/vouchers/percentage_rate_spec.rb +++ b/spec/models/vouchers/percentage_rate_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Vouchers::PercentageRate do describe 'validations' do subject { build(:voucher_percentage_rate) } diff --git a/spec/models/vouchers/vine_spec.rb b/spec/models/vouchers/vine_spec.rb index 157aac3776..dc87f30efe 100644 --- a/spec/models/vouchers/vine_spec.rb +++ b/spec/models/vouchers/vine_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Vouchers::Vine do describe 'validations' do subject { build(:vine_voucher) } diff --git a/spec/models/webhook_endpoint_spec.rb b/spec/models/webhook_endpoint_spec.rb index 30b3ab4395..123567bcec 100644 --- a/spec/models/webhook_endpoint_spec.rb +++ b/spec/models/webhook_endpoint_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe WebhookEndpoint do describe "validations" do it { is_expected.to validate_presence_of(:url) } diff --git a/spec/queries/batch_taggable_tags_query_spec.rb b/spec/queries/batch_taggable_tags_query_spec.rb index 991ce00258..1481b9a793 100644 --- a/spec/queries/batch_taggable_tags_query_spec.rb +++ b/spec/queries/batch_taggable_tags_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BatchTaggableTagsQuery do it "fetches tags for multiple models in one query" do customer_i = create(:customer, tag_list: "member,volunteer") diff --git a/spec/queries/complete_orders_with_balance_query_spec.rb b/spec/queries/complete_orders_with_balance_query_spec.rb index 1f788669e1..f25e8eff4e 100644 --- a/spec/queries/complete_orders_with_balance_query_spec.rb +++ b/spec/queries/complete_orders_with_balance_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CompleteOrdersWithBalanceQuery do subject(:result) { described_class.new(user).call } diff --git a/spec/queries/complete_visible_orders_query_spec.rb b/spec/queries/complete_visible_orders_query_spec.rb index a39de73bdf..a159d110ad 100644 --- a/spec/queries/complete_visible_orders_query_spec.rb +++ b/spec/queries/complete_visible_orders_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CompleteVisibleOrdersQuery do subject(:result) { described_class.new(order_permissions).call } diff --git a/spec/queries/customers_with_balance_query_spec.rb b/spec/queries/customers_with_balance_query_spec.rb index a71adb7479..9077a09a33 100644 --- a/spec/queries/customers_with_balance_query_spec.rb +++ b/spec/queries/customers_with_balance_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CustomersWithBalanceQuery do subject(:result) { described_class.new(Customer.where(id: customers)).call } diff --git a/spec/queries/outstanding_balance_query_spec.rb b/spec/queries/outstanding_balance_query_spec.rb index a79b209da0..57d4f14adb 100644 --- a/spec/queries/outstanding_balance_query_spec.rb +++ b/spec/queries/outstanding_balance_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OutstandingBalanceQuery do subject(:query) { described_class.new(relation) } diff --git a/spec/queries/payments_requiring_action_query_spec.rb b/spec/queries/payments_requiring_action_query_spec.rb index 6c2d56d9e5..6237ed83f2 100644 --- a/spec/queries/payments_requiring_action_query_spec.rb +++ b/spec/queries/payments_requiring_action_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PaymentsRequiringActionQuery do subject(:result) { described_class.new(user).call } diff --git a/spec/queries/product_scope_query_spec.rb b/spec/queries/product_scope_query_spec.rb index 24fa18ff99..434c5aa659 100755 --- a/spec/queries/product_scope_query_spec.rb +++ b/spec/queries/product_scope_query_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductScopeQuery do let!(:taxon) { create(:taxon) } let(:supplier) { create(:supplier_enterprise) } diff --git a/spec/requests/admin/connected_apps_controller_spec.rb b/spec/requests/admin/connected_apps_controller_spec.rb index a39eaa52af..ff6b88a4ac 100644 --- a/spec/requests/admin/connected_apps_controller_spec.rb +++ b/spec/requests/admin/connected_apps_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "Admin ConnectedApp" do let(:user) { create(:admin_user) } let(:enterprise) { create(:enterprise, owner: user) } diff --git a/spec/requests/admin/enterprises_controller_spec.rb b/spec/requests/admin/enterprises_controller_spec.rb index 16e3ec42bf..68b22843f4 100644 --- a/spec/requests/admin/enterprises_controller_spec.rb +++ b/spec/requests/admin/enterprises_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Admin::EnterprisesController do let(:admin) { create(:admin_user) } let(:enterprise) { create(:enterprise) } diff --git a/spec/requests/admin/images_spec.rb b/spec/requests/admin/images_spec.rb index f86f36b86a..7eaedad45e 100644 --- a/spec/requests/admin/images_spec.rb +++ b/spec/requests/admin/images_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "/admin/products/:product_id/images" do include AuthenticationHelper diff --git a/spec/requests/admin/product_import_spec.rb b/spec/requests/admin/product_import_spec.rb index de6e066817..7609c4fa17 100644 --- a/spec/requests/admin/product_import_spec.rb +++ b/spec/requests/admin/product_import_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "Product Import" do include AuthenticationHelper diff --git a/spec/requests/admin/products_v3_spec.rb b/spec/requests/admin/products_v3_spec.rb index 69e5562e27..ff1a6850bb 100644 --- a/spec/requests/admin/products_v3_spec.rb +++ b/spec/requests/admin/products_v3_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "Admin::ProductsV3" do include AuthenticationHelper diff --git a/spec/requests/admin/vouchers_spec.rb b/spec/requests/admin/vouchers_spec.rb index 3c3eb7e6fb..5502d555e8 100644 --- a/spec/requests/admin/vouchers_spec.rb +++ b/spec/requests/admin/vouchers_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "/admin/enterprises/:enterprise_id/vouchers" do let(:enterprise) { create(:supplier_enterprise, name: "Feedme") } let(:enterprise_user) { create(:user, enterprise_limit: 1) } diff --git a/spec/requests/api/routes_spec.rb b/spec/requests/api/routes_spec.rb index a702010471..787fea4b78 100644 --- a/spec/requests/api/routes_spec.rb +++ b/spec/requests/api/routes_spec.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true # test a single endpoint to make sure the redirects are working as intended. -require 'spec_helper' RSpec.describe 'Orders Cycles endpoint' do let(:distributor) { create(:distributor_enterprise) } diff --git a/spec/requests/api_docs_spec.rb b/spec/requests/api_docs_spec.rb index 57ec4292e1..a729c25996 100644 --- a/spec/requests/api_docs_spec.rb +++ b/spec/requests/api_docs_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "API documentation" do it "shows the OFN API v1" do get rswag_ui_path diff --git a/spec/requests/checkout/concurrency_spec.rb b/spec/requests/checkout/concurrency_spec.rb index 0805531d3d..8420fc3b77 100644 --- a/spec/requests/checkout/concurrency_spec.rb +++ b/spec/requests/checkout/concurrency_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # This is the first example of testing concurrency in the Open Food Network. # If we want to do this more often, we should look at: # diff --git a/spec/requests/checkout/paypal_spec.rb b/spec/requests/checkout/paypal_spec.rb index 05eab82d63..a1c453ed3d 100644 --- a/spec/requests/checkout/paypal_spec.rb +++ b/spec/requests/checkout/paypal_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "checking out an order with a paypal express payment method" do include ShopWorkflow include PaypalHelper diff --git a/spec/requests/checkout/routes_spec.rb b/spec/requests/checkout/routes_spec.rb index 6cbe586d3a..3fb9de5246 100644 --- a/spec/requests/checkout/routes_spec.rb +++ b/spec/requests/checkout/routes_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'checkout endpoints' do include ShopWorkflow diff --git a/spec/requests/checkout/stripe_sca_spec.rb b/spec/requests/checkout/stripe_sca_spec.rb index 12af937792..3e3cb1445a 100644 --- a/spec/requests/checkout/stripe_sca_spec.rb +++ b/spec/requests/checkout/stripe_sca_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "checking out an order with a Stripe SCA payment method" do include ShopWorkflow include AuthenticationHelper diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index f0a364749a..24097c5229 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe 'Errors' do include ExceptionHelper diff --git a/spec/requests/home_controller_spec.rb b/spec/requests/home_controller_spec.rb index 04c9eab414..306e58eddd 100644 --- a/spec/requests/home_controller_spec.rb +++ b/spec/requests/home_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe HomeController do context "#unauthorized" do it "renders the unauthorized template" do diff --git a/spec/requests/large_request_spec.rb b/spec/requests/large_request_spec.rb index ce5fbefb59..4005463046 100644 --- a/spec/requests/large_request_spec.rb +++ b/spec/requests/large_request_spec.rb @@ -3,7 +3,6 @@ # Large requests can fail if Devise tries to store the URL in the session cookie. # # http://daniel.fone.net.nz/blog/2014/11/28/actiondispatch-cookies-cookieoverflow-via-devise-s-user_return_to/ -require 'spec_helper' RSpec.describe 'A very large request' do it 'should not overflow cookies' do diff --git a/spec/requests/omniauth_callbacks_controller_spec.rb b/spec/requests/omniauth_callbacks_controller_spec.rb index 27f1ba9a54..4b1dc719f3 100644 --- a/spec/requests/omniauth_callbacks_controller_spec.rb +++ b/spec/requests/omniauth_callbacks_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - # Devise calls OmniauthCallbacksController for OpenID Connect callbacks. RSpec.describe '/user/spree_user/auth/openid_connect/callback' do include AuthenticationHelper diff --git a/spec/requests/payments_controller_spec.rb b/spec/requests/payments_controller_spec.rb index 242a4e1202..fba7b23773 100644 --- a/spec/requests/payments_controller_spec.rb +++ b/spec/requests/payments_controller_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "/payments/:id/authorize" do let!(:user) { create(:user) } let!(:order) { create(:order, user:) } diff --git a/spec/requests/spree/admin/overview_spec.rb b/spec/requests/spree/admin/overview_spec.rb index 8649f0f57d..5fda013dd3 100644 --- a/spec/requests/spree/admin/overview_spec.rb +++ b/spec/requests/spree/admin/overview_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "/admin" do let(:enterprise) { create(:supplier_enterprise, name: "Feedme") } let(:enterprise_user) { create(:user, enterprise_limit: 1) } diff --git a/spec/requests/spree/admin/payments_spec.rb b/spec/requests/spree/admin/payments_spec.rb index 2a60c8cfa6..1b7667ca25 100644 --- a/spec/requests/spree/admin/payments_spec.rb +++ b/spec/requests/spree/admin/payments_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Spree::Admin::PaymentsController do let(:user) { order.user } let(:order) { create(:completed_order_with_fees) } diff --git a/spec/requests/voucher_adjustments_spec.rb b/spec/requests/voucher_adjustments_spec.rb index 352d20c14f..2419d032fa 100644 --- a/spec/requests/voucher_adjustments_spec.rb +++ b/spec/requests/voucher_adjustments_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VoucherAdjustmentsController do let(:user) { order.user } let(:address) { create(:address) } diff --git a/spec/requests/well_known_spec.rb b/spec/requests/well_known_spec.rb index 9f6f423958..6da89ed988 100644 --- a/spec/requests/well_known_spec.rb +++ b/spec/requests/well_known_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe "/.well-known/" do describe "dfc/" do it "publishes our endpoints" do diff --git a/spec/routing/stripe_spec.rb b/spec/routing/stripe_spec.rb index 8f51a48e44..4c2da08ac5 100644 --- a/spec/routing/stripe_spec.rb +++ b/spec/routing/stripe_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "routing for Stripe return URLS" do context "checkout return URLs" do it "routes /checkout to checkout#edit" do diff --git a/spec/serializers/api/admin/customer_serializer_spec.rb b/spec/serializers/api/admin/customer_serializer_spec.rb index 999c8015f1..d751a84c09 100644 --- a/spec/serializers/api/admin/customer_serializer_spec.rb +++ b/spec/serializers/api/admin/customer_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::Admin::CustomerSerializer do let(:tag_list) { ["one", "two", "three"] } let(:customer) { create(:customer, tag_list:) } diff --git a/spec/serializers/api/admin/customer_with_balance_serializer_spec.rb b/spec/serializers/api/admin/customer_with_balance_serializer_spec.rb index 53e9c4490b..fe49d26d22 100644 --- a/spec/serializers/api/admin/customer_with_balance_serializer_spec.rb +++ b/spec/serializers/api/admin/customer_with_balance_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::Admin::CustomerWithBalanceSerializer do let(:serialized_customer) { described_class.new(customer) } diff --git a/spec/serializers/api/admin/enterprise_serializer_spec.rb b/spec/serializers/api/admin/enterprise_serializer_spec.rb index 8483c2e27c..b9afc6747c 100644 --- a/spec/serializers/api/admin/enterprise_serializer_spec.rb +++ b/spec/serializers/api/admin/enterprise_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::Admin::EnterpriseSerializer do include FileHelper diff --git a/spec/serializers/api/admin/exchange_serializer_spec.rb b/spec/serializers/api/admin/exchange_serializer_spec.rb index 05915d7823..836ef142da 100644 --- a/spec/serializers/api/admin/exchange_serializer_spec.rb +++ b/spec/serializers/api/admin/exchange_serializer_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/order_cycle_permissions' RSpec.describe Api::Admin::ExchangeSerializer do diff --git a/spec/serializers/api/admin/for_order_cycle/supplied_product_serializer_spec.rb b/spec/serializers/api/admin/for_order_cycle/supplied_product_serializer_spec.rb index 9f76110001..4293f74b32 100644 --- a/spec/serializers/api/admin/for_order_cycle/supplied_product_serializer_spec.rb +++ b/spec/serializers/api/admin/for_order_cycle/supplied_product_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::Admin::ForOrderCycle::SuppliedProductSerializer do let(:coordinator) { create(:distributor_enterprise) } let(:order_cycle) { double(:order_cycle, coordinator:) } diff --git a/spec/serializers/api/admin/index_enterprise_serializer_spec.rb b/spec/serializers/api/admin/index_enterprise_serializer_spec.rb index 810fbf951b..a3740724cf 100644 --- a/spec/serializers/api/admin/index_enterprise_serializer_spec.rb +++ b/spec/serializers/api/admin/index_enterprise_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::Admin::IndexEnterpriseSerializer do let(:enterprise) { create(:distributor_enterprise) } context "when spree_current_user is a manager" do diff --git a/spec/serializers/api/admin/order_cycle_serializer_spec.rb b/spec/serializers/api/admin/order_cycle_serializer_spec.rb index b05bf9816e..bd7b256b5f 100644 --- a/spec/serializers/api/admin/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/admin/order_cycle_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::Admin::OrderCycleSerializer do let(:order_cycle) { create(:order_cycle) } let(:serializer) { diff --git a/spec/serializers/api/admin/order_serializer_spec.rb b/spec/serializers/api/admin/order_serializer_spec.rb index 5a1a2c1f50..7c866ce341 100644 --- a/spec/serializers/api/admin/order_serializer_spec.rb +++ b/spec/serializers/api/admin/order_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Api::Admin::OrderSerializer do let(:serializer) { described_class.new order } let(:order) { build(:order) } diff --git a/spec/serializers/api/admin/product_serializer_spec.rb b/spec/serializers/api/admin/product_serializer_spec.rb index 8cbb0a63ec..b052cbb9e3 100644 --- a/spec/serializers/api/admin/product_serializer_spec.rb +++ b/spec/serializers/api/admin/product_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::Admin::ProductSerializer do let(:product) { create(:simple_product, supplier_id: create(:supplier_enterprise).id) } let(:serializer) { described_class.new(product) } diff --git a/spec/serializers/api/admin/subscription_customer_serializer_spec.rb b/spec/serializers/api/admin/subscription_customer_serializer_spec.rb index fd1927c4ef..f6cbce2922 100644 --- a/spec/serializers/api/admin/subscription_customer_serializer_spec.rb +++ b/spec/serializers/api/admin/subscription_customer_serializer_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/address_finder' RSpec.describe Api::Admin::SubscriptionCustomerSerializer do diff --git a/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb b/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb index 79acfced05..ed216466c2 100644 --- a/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb +++ b/spec/serializers/api/admin/subscription_line_item_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module Api module Admin RSpec.describe SubscriptionLineItemSerializer do diff --git a/spec/serializers/api/admin/variant_serializer_spec.rb b/spec/serializers/api/admin/variant_serializer_spec.rb index 60f8ad45d4..a154f3b375 100644 --- a/spec/serializers/api/admin/variant_serializer_spec.rb +++ b/spec/serializers/api/admin/variant_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::Admin::VariantSerializer do let(:variant) { create(:variant) } diff --git a/spec/serializers/api/cached_enterprise_serializer_spec.rb b/spec/serializers/api/cached_enterprise_serializer_spec.rb index c358870149..32528cf903 100644 --- a/spec/serializers/api/cached_enterprise_serializer_spec.rb +++ b/spec/serializers/api/cached_enterprise_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::CachedEnterpriseSerializer do let(:cached_enterprise_serializer) { described_class.new(enterprise) } let(:enterprise) { create(:enterprise) } diff --git a/spec/serializers/api/credit_card_serializer_spec.rb b/spec/serializers/api/credit_card_serializer_spec.rb index f23160d9cf..3df2adcaac 100644 --- a/spec/serializers/api/credit_card_serializer_spec.rb +++ b/spec/serializers/api/credit_card_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::CreditCardSerializer do let(:card) { create(:credit_card) } let(:serializer) { Api::CreditCardSerializer.new card } diff --git a/spec/serializers/api/current_order_serializer_spec.rb b/spec/serializers/api/current_order_serializer_spec.rb index 255885c330..09a153743d 100644 --- a/spec/serializers/api/current_order_serializer_spec.rb +++ b/spec/serializers/api/current_order_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::CurrentOrderSerializer do let(:distributor) { build(:distributor_enterprise) } let(:order_cycle) { build(:simple_order_cycle) } diff --git a/spec/serializers/api/enterprise_serializer_spec.rb b/spec/serializers/api/enterprise_serializer_spec.rb index 0eb7d47abd..19789a218e 100644 --- a/spec/serializers/api/enterprise_serializer_spec.rb +++ b/spec/serializers/api/enterprise_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::EnterpriseSerializer do let(:serializer) { Api::EnterpriseSerializer.new enterprise, data: } let(:enterprise) { create(:distributor_enterprise, is_primary_producer: true) } diff --git a/spec/serializers/api/enterprise_shopfront_list_serializer_spec.rb b/spec/serializers/api/enterprise_shopfront_list_serializer_spec.rb index 47462ccbed..1a202fe8b6 100644 --- a/spec/serializers/api/enterprise_shopfront_list_serializer_spec.rb +++ b/spec/serializers/api/enterprise_shopfront_list_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::EnterpriseShopfrontListSerializer do let(:enterprise) { create(:distributor_enterprise) } let(:serializer) { diff --git a/spec/serializers/api/enterprise_shopfront_serializer_spec.rb b/spec/serializers/api/enterprise_shopfront_serializer_spec.rb index 3f0dee41da..0746f16e4a 100644 --- a/spec/serializers/api/enterprise_shopfront_serializer_spec.rb +++ b/spec/serializers/api/enterprise_shopfront_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::EnterpriseShopfrontSerializer do let!(:hub) { create(:distributor_enterprise, with_payment_and_shipping: true) } let!(:producer) { create(:supplier_enterprise) } diff --git a/spec/serializers/api/group_list_serializer_spec.rb b/spec/serializers/api/group_list_serializer_spec.rb index 5dff7def23..efecbdd951 100644 --- a/spec/serializers/api/group_list_serializer_spec.rb +++ b/spec/serializers/api/group_list_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::GroupListSerializer do let!(:group) { create(:enterprise_group) } let!(:producer) { create(:supplier_enterprise) } diff --git a/spec/serializers/api/order_cycle_serializer_spec.rb b/spec/serializers/api/order_cycle_serializer_spec.rb index af316624d7..fa38dba4ae 100644 --- a/spec/serializers/api/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/order_cycle_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::OrderCycleSerializer do let(:order_cycle) { create(:simple_order_cycle) } let(:serializer) { Api::OrderCycleSerializer.new(order_cycle).to_json } diff --git a/spec/serializers/api/order_serializer_spec.rb b/spec/serializers/api/order_serializer_spec.rb index dde0126514..aa9ac09d2f 100644 --- a/spec/serializers/api/order_serializer_spec.rb +++ b/spec/serializers/api/order_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::OrderSerializer do let(:serializer) { Api::OrderSerializer.new order } let(:order) { create(:completed_order_with_totals) } diff --git a/spec/serializers/api/product_serializer_spec.rb b/spec/serializers/api/product_serializer_spec.rb index 73a6e952f9..50be73ca59 100644 --- a/spec/serializers/api/product_serializer_spec.rb +++ b/spec/serializers/api/product_serializer_spec.rb @@ -1,6 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' require 'open_food_network/enterprise_fee_calculator' RSpec.describe Api::ProductSerializer do diff --git a/spec/serializers/api/shipping_method_serializer_spec.rb b/spec/serializers/api/shipping_method_serializer_spec.rb index a24665052e..021481ebb0 100644 --- a/spec/serializers/api/shipping_method_serializer_spec.rb +++ b/spec/serializers/api/shipping_method_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::ShippingMethodSerializer do let(:shipping_method) { create(:shipping_method) } diff --git a/spec/serializers/api/uncached_enterprise_serializer_spec.rb b/spec/serializers/api/uncached_enterprise_serializer_spec.rb index b86ed91955..1e350a058d 100644 --- a/spec/serializers/api/uncached_enterprise_serializer_spec.rb +++ b/spec/serializers/api/uncached_enterprise_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::UncachedEnterpriseSerializer do let(:serializer) { described_class.new enterprise, { data: OpenFoodNetwork::EnterpriseInjectionData.new } diff --git a/spec/serializers/api/variant_serializer_spec.rb b/spec/serializers/api/variant_serializer_spec.rb index b8e50edad7..d4992d1359 100644 --- a/spec/serializers/api/variant_serializer_spec.rb +++ b/spec/serializers/api/variant_serializer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Api::VariantSerializer do subject { Api::VariantSerializer.new variant } let(:variant) { create(:variant) } diff --git a/spec/services/address_geocoder_spec.rb b/spec/services/address_geocoder_spec.rb index 5865275521..3493c7c51e 100644 --- a/spec/services/address_geocoder_spec.rb +++ b/spec/services/address_geocoder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe AddressGeocoder do let(:australia) { Spree::Country.find_or_create_by!(name: "Australia") } let(:victoria) { Spree::State.find_or_create_by(name: "Victoria", country: australia) } diff --git a/spec/services/alert_spec.rb b/spec/services/alert_spec.rb index c899228e6a..528943a94f 100644 --- a/spec/services/alert_spec.rb +++ b/spec/services/alert_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Alert do around do |example| original_config = nil diff --git a/spec/services/backorder_updater_spec.rb b/spec/services/backorder_updater_spec.rb index af1f5471c1..efa3e0ce41 100644 --- a/spec/services/backorder_updater_spec.rb +++ b/spec/services/backorder_updater_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe BackorderUpdater do let(:order) { create(:completed_order_with_totals) } let(:order_cycle) { order.order_cycle } diff --git a/spec/services/cache_service_spec.rb b/spec/services/cache_service_spec.rb index 526f211bfd..bf02095c16 100644 --- a/spec/services/cache_service_spec.rb +++ b/spec/services/cache_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CacheService do let(:rails_cache) { Rails.cache } diff --git a/spec/services/cap_quantity_spec.rb b/spec/services/cap_quantity_spec.rb index 3f97f117dc..9597de9411 100644 --- a/spec/services/cap_quantity_spec.rb +++ b/spec/services/cap_quantity_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CapQuantity do describe "checking that line items are available to purchase" do let(:order_cycle) { create(:simple_order_cycle) } diff --git a/spec/services/cart_service_spec.rb b/spec/services/cart_service_spec.rb index ef2307fe61..a0f2d34d90 100644 --- a/spec/services/cart_service_spec.rb +++ b/spec/services/cart_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe CartService do let(:order) { instance_double(Spree::Order, id: 123) } let(:currency) { "EUR" } diff --git a/spec/services/checkout/payment_method_fetcher_spec.rb b/spec/services/checkout/payment_method_fetcher_spec.rb index b3f941b0e4..94866499b4 100644 --- a/spec/services/checkout/payment_method_fetcher_spec.rb +++ b/spec/services/checkout/payment_method_fetcher_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Checkout::PaymentMethodFetcher do let!(:order) { create(:completed_order_with_totals) } let(:payment1) { build(:payment, order:) } diff --git a/spec/services/checkout/post_checkout_actions_spec.rb b/spec/services/checkout/post_checkout_actions_spec.rb index 30b4936eaa..a2b0592f7c 100644 --- a/spec/services/checkout/post_checkout_actions_spec.rb +++ b/spec/services/checkout/post_checkout_actions_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Checkout::PostCheckoutActions do let(:order) { create(:order_with_distributor) } let(:postCheckoutActions) { Checkout::PostCheckoutActions.new(order) } diff --git a/spec/services/checkout/stripe_redirect_spec.rb b/spec/services/checkout/stripe_redirect_spec.rb index 6c3635cde2..219da451ef 100644 --- a/spec/services/checkout/stripe_redirect_spec.rb +++ b/spec/services/checkout/stripe_redirect_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Checkout::StripeRedirect do describe '#path' do let(:order) { create(:order) } diff --git a/spec/services/content_sanitizer_spec.rb b/spec/services/content_sanitizer_spec.rb index 63b6a15478..1d419acd4c 100644 --- a/spec/services/content_sanitizer_spec.rb +++ b/spec/services/content_sanitizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ContentSanitizer do let(:service) { described_class.new } diff --git a/spec/services/default_shipping_category_spec.rb b/spec/services/default_shipping_category_spec.rb index 12d8488181..20b31968d8 100644 --- a/spec/services/default_shipping_category_spec.rb +++ b/spec/services/default_shipping_category_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe DefaultShippingCategory do describe '.create!' do it "names the location 'Default'" do diff --git a/spec/services/embedded_page_service_spec.rb b/spec/services/embedded_page_service_spec.rb index 11f242c515..091713b950 100644 --- a/spec/services/embedded_page_service_spec.rb +++ b/spec/services/embedded_page_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe EmbeddedPageService do let(:enterprise_slug) { 'test-enterprise' } let(:params) { diff --git a/spec/services/exchange_products_renderer_spec.rb b/spec/services/exchange_products_renderer_spec.rb index dd64f43df2..bb2618c1f0 100644 --- a/spec/services/exchange_products_renderer_spec.rb +++ b/spec/services/exchange_products_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ExchangeProductsRenderer do let(:order_cycle) { create(:order_cycle) } let(:coordinator) { order_cycle.coordinator } diff --git a/spec/services/exchange_variant_bulk_updater_spec.rb b/spec/services/exchange_variant_bulk_updater_spec.rb index 880f097548..26b784f089 100644 --- a/spec/services/exchange_variant_bulk_updater_spec.rb +++ b/spec/services/exchange_variant_bulk_updater_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ExchangeVariantBulkUpdater do let!(:first_variant) { create(:variant) } let!(:second_variant) { create(:variant) } diff --git a/spec/services/fdc_backorderer_spec.rb b/spec/services/fdc_backorderer_spec.rb index b2aea87d14..742bd90c11 100644 --- a/spec/services/fdc_backorderer_spec.rb +++ b/spec/services/fdc_backorderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe FdcBackorderer do let(:subject) { FdcBackorderer.new(order.distributor.owner, urls) } let(:urls) { FdcUrlBuilder.new(product_link) } diff --git a/spec/services/fdc_offer_broker_spec.rb b/spec/services/fdc_offer_broker_spec.rb index 6987e0cec5..5de7ffc363 100644 --- a/spec/services/fdc_offer_broker_spec.rb +++ b/spec/services/fdc_offer_broker_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe FdcOfferBroker do subject { FdcOfferBroker.new(catalog) } let(:catalog) { diff --git a/spec/services/fdc_url_builder_spec.rb b/spec/services/fdc_url_builder_spec.rb index 5557cccf2a..22be3f5838 100644 --- a/spec/services/fdc_url_builder_spec.rb +++ b/spec/services/fdc_url_builder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe FdcUrlBuilder do subject(:urls) { FdcUrlBuilder.new(product_link) } let(:product_link) { diff --git a/spec/services/file_path_sanitizer_spec.rb b/spec/services/file_path_sanitizer_spec.rb index 9dd4fc1581..b04aa9e4bb 100644 --- a/spec/services/file_path_sanitizer_spec.rb +++ b/spec/services/file_path_sanitizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe FilePathSanitizer do let(:folder_path){ '/tmp/product_import123' } let(:file_path) { "#{folder_path}/import.csv" } diff --git a/spec/services/html_sanitizer_spec.rb b/spec/services/html_sanitizer_spec.rb index 60a247a63f..38a4d8d7d0 100644 --- a/spec/services/html_sanitizer_spec.rb +++ b/spec/services/html_sanitizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe HtmlSanitizer do subject { described_class } diff --git a/spec/services/image_importer_spec.rb b/spec/services/image_importer_spec.rb index d9c7e5cd0b..9bde8fbbab 100644 --- a/spec/services/image_importer_spec.rb +++ b/spec/services/image_importer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: false -require 'spec_helper' - RSpec.describe ImageImporter do let(:ofn_url) { "https://s3.amazonaws.com/ofn_production/eofop2en1y6tu9fr1x9b0wzwgs5r" } let(:product) { create(:product) } diff --git a/spec/services/invoice_data_generator_spec.rb b/spec/services/invoice_data_generator_spec.rb index 917b3557a8..7776aee240 100644 --- a/spec/services/invoice_data_generator_spec.rb +++ b/spec/services/invoice_data_generator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe InvoiceDataGenerator do describe '#generate' do let!(:order) { create(:completed_order_with_fees) } diff --git a/spec/services/invoice_renderer_spec.rb b/spec/services/invoice_renderer_spec.rb index e732aa3b5d..269ba4c72b 100644 --- a/spec/services/invoice_renderer_spec.rb +++ b/spec/services/invoice_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe InvoiceRenderer do include Spree::PaymentMethodsHelper diff --git a/spec/services/mail_configuration_spec.rb b/spec/services/mail_configuration_spec.rb index c4b6b7068d..c8d1985140 100644 --- a/spec/services/mail_configuration_spec.rb +++ b/spec/services/mail_configuration_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe MailConfiguration do describe 'apply!' do before do diff --git a/spec/services/order_cycles/clone_service_spec.rb b/spec/services/order_cycles/clone_service_spec.rb index ae9808eb08..2b9c50e1ca 100644 --- a/spec/services/order_cycles/clone_service_spec.rb +++ b/spec/services/order_cycles/clone_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::CloneService do describe "#create" do it "clones the order cycle" do diff --git a/spec/services/order_cycles/distributed_products_service_spec.rb b/spec/services/order_cycles/distributed_products_service_spec.rb index 2766219b0d..5de9929dab 100644 --- a/spec/services/order_cycles/distributed_products_service_spec.rb +++ b/spec/services/order_cycles/distributed_products_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::DistributedProductsService do # NOTE: product_relation_incl_supplier is tested via ProductsRenderer specs: # spec/services/products_renderer_spec.rb diff --git a/spec/services/order_cycles/distributed_variants_service_spec.rb b/spec/services/order_cycles/distributed_variants_service_spec.rb index d0abcf08f7..fc5a01bc7f 100644 --- a/spec/services/order_cycles/distributed_variants_service_spec.rb +++ b/spec/services/order_cycles/distributed_variants_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::DistributedVariantsService do let(:order) { double(:order) } let(:distributor) { double(:distributor) } diff --git a/spec/services/order_cycles/form_service_spec.rb b/spec/services/order_cycles/form_service_spec.rb index b0efb4fcee..514bdb5201 100644 --- a/spec/services/order_cycles/form_service_spec.rb +++ b/spec/services/order_cycles/form_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::FormService do describe "save" do describe "creating a new order cycle from params" do diff --git a/spec/services/order_cycles/warning_service_spec.rb b/spec/services/order_cycles/warning_service_spec.rb index aad80e8721..4292060285 100644 --- a/spec/services/order_cycles/warning_service_spec.rb +++ b/spec/services/order_cycles/warning_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::WarningService do let(:user) { create(:user) } let(:subject) { OrderCycles::WarningService } diff --git a/spec/services/order_cycles/webhook_service_spec.rb b/spec/services/order_cycles/webhook_service_spec.rb index 015b10d4b8..1fe22323e7 100644 --- a/spec/services/order_cycles/webhook_service_spec.rb +++ b/spec/services/order_cycles/webhook_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe OrderCycles::WebhookService do let(:order_cycle) { create( diff --git a/spec/services/orders/available_payment_methods_service_spec.rb b/spec/services/orders/available_payment_methods_service_spec.rb index fc442f3748..77e34ffd12 100644 --- a/spec/services/orders/available_payment_methods_service_spec.rb +++ b/spec/services/orders/available_payment_methods_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::AvailablePaymentMethodsService do context "when the order has no current_distributor" do it "returns an empty array" do diff --git a/spec/services/orders/available_shipping_methods_service_spec.rb b/spec/services/orders/available_shipping_methods_service_spec.rb index 639ff8d0df..1220bba039 100644 --- a/spec/services/orders/available_shipping_methods_service_spec.rb +++ b/spec/services/orders/available_shipping_methods_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::AvailableShippingMethodsService do context "when the order has no current_distributor" do it "returns an empty array" do diff --git a/spec/services/orders/cart_reset_service_spec.rb b/spec/services/orders/cart_reset_service_spec.rb index 3c4b01048d..77f36021f1 100644 --- a/spec/services/orders/cart_reset_service_spec.rb +++ b/spec/services/orders/cart_reset_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::CartResetService do let(:distributor) { create(:distributor_enterprise) } let(:order) { create(:order, :with_line_item, distributor:) } diff --git a/spec/services/orders/check_stock_service_spec.rb b/spec/services/orders/check_stock_service_spec.rb index 4a3f6e26d0..60eed519c2 100644 --- a/spec/services/orders/check_stock_service_spec.rb +++ b/spec/services/orders/check_stock_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::CheckStockService do subject { described_class.new(order:) } diff --git a/spec/services/orders/checkout_restart_service_spec.rb b/spec/services/orders/checkout_restart_service_spec.rb index 3ebc3284b4..bebf2250b2 100644 --- a/spec/services/orders/checkout_restart_service_spec.rb +++ b/spec/services/orders/checkout_restart_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::CheckoutRestartService do let(:order) { create(:order_with_distributor) } diff --git a/spec/services/orders/compare_invoice_service_spec.rb b/spec/services/orders/compare_invoice_service_spec.rb index dd4757bd14..4580446b52 100644 --- a/spec/services/orders/compare_invoice_service_spec.rb +++ b/spec/services/orders/compare_invoice_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.shared_examples "attribute changes - payment total" do |boolean, type| before do Spree::Order.where(id: order.id).update_all(payment_total: order.payment_total + 10) diff --git a/spec/services/orders/customer_cancellation_service_spec.rb b/spec/services/orders/customer_cancellation_service_spec.rb index 8f32177334..8634471be1 100644 --- a/spec/services/orders/customer_cancellation_service_spec.rb +++ b/spec/services/orders/customer_cancellation_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::CustomerCancellationService do let(:mail_mock) { double(:mailer_mock, deliver_later: true) } before do diff --git a/spec/services/orders/factory_service_spec.rb b/spec/services/orders/factory_service_spec.rb index 8693494797..4d7d1632d1 100644 --- a/spec/services/orders/factory_service_spec.rb +++ b/spec/services/orders/factory_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::FactoryService do let(:variant1) { create(:variant, price: 5.0) } let(:variant2) { create(:variant, price: 7.0) } diff --git a/spec/services/orders/find_payment_service_spec.rb b/spec/services/orders/find_payment_service_spec.rb index 1e898f7e53..bc4996921f 100644 --- a/spec/services/orders/find_payment_service_spec.rb +++ b/spec/services/orders/find_payment_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::FindPaymentService do let(:order) { create(:order_with_distributor) } let(:finder) { Orders::FindPaymentService.new(order) } diff --git a/spec/services/orders/generate_invoice_service_spec.rb b/spec/services/orders/generate_invoice_service_spec.rb index e818eae266..69f1ff0317 100644 --- a/spec/services/orders/generate_invoice_service_spec.rb +++ b/spec/services/orders/generate_invoice_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::GenerateInvoiceService do let!(:order) { create(:completed_order_with_fees) } let!(:invoice_data_generator){ InvoiceDataGenerator.new(order) } diff --git a/spec/services/orders/handle_fees_service_spec.rb b/spec/services/orders/handle_fees_service_spec.rb index 97c43d842b..1794575f49 100644 --- a/spec/services/orders/handle_fees_service_spec.rb +++ b/spec/services/orders/handle_fees_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::HandleFeesService do let(:order_cycle) { create(:order_cycle) } let(:order) { diff --git a/spec/services/orders/mask_data_service_spec.rb b/spec/services/orders/mask_data_service_spec.rb index 658b0c03ab..a2c411ee2f 100644 --- a/spec/services/orders/mask_data_service_spec.rb +++ b/spec/services/orders/mask_data_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Orders::MaskDataService do describe '#call' do let(:distributor) { create(:enterprise) } diff --git a/spec/services/orders/order_tax_adjustments_fetcher_spec.rb b/spec/services/orders/order_tax_adjustments_fetcher_spec.rb index af19dd22f8..5204ed7769 100644 --- a/spec/services/orders/order_tax_adjustments_fetcher_spec.rb +++ b/spec/services/orders/order_tax_adjustments_fetcher_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Orders::FetchTaxAdjustmentsService do describe "#totals" do let(:zone) { create(:zone_with_member) } diff --git a/spec/services/orders/sync_service_spec.rb b/spec/services/orders/sync_service_spec.rb index 9dd6eb968d..31fe0d4136 100644 --- a/spec/services/orders/sync_service_spec.rb +++ b/spec/services/orders/sync_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Orders::SyncService do describe "updating the shipping method" do let!(:subscription) { create(:subscription, with_items: true, with_proxy_orders: true) } diff --git a/spec/services/orders/workflow_service_spec.rb b/spec/services/orders/workflow_service_spec.rb index d1db9ff3c3..035af7f2fb 100644 --- a/spec/services/orders/workflow_service_spec.rb +++ b/spec/services/orders/workflow_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Orders::WorkflowService do let!(:distributor) { create(:distributor_enterprise) } let!(:order) do diff --git a/spec/services/path_checker_spec.rb b/spec/services/path_checker_spec.rb index 2ce16c19b5..875c49349b 100644 --- a/spec/services/path_checker_spec.rb +++ b/spec/services/path_checker_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PathChecker do describe "#active_path?" do let(:view_context) { double("view context") } diff --git a/spec/services/payments/status_changed_listener_service_spec.rb b/spec/services/payments/status_changed_listener_service_spec.rb index 114635fc7a..4a451aba65 100644 --- a/spec/services/payments/status_changed_listener_service_spec.rb +++ b/spec/services/payments/status_changed_listener_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Payments::StatusChangedListenerService do let(:name) { "ofn.payment_transition" } let(:started) { Time.zone.parse("2025-11-28 09:00:00") } diff --git a/spec/services/payments/webhook_payload_spec.rb b/spec/services/payments/webhook_payload_spec.rb index 8ad15ae774..572ee71d4a 100644 --- a/spec/services/payments/webhook_payload_spec.rb +++ b/spec/services/payments/webhook_payload_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Payments::WebhookPayload do describe "#to_hash" do let(:order) { create(:completed_order_with_totals, order_cycle: ) } diff --git a/spec/services/payments/webhook_service_spec.rb b/spec/services/payments/webhook_service_spec.rb index 6e559267a5..cab2394c8e 100644 --- a/spec/services/payments/webhook_service_spec.rb +++ b/spec/services/payments/webhook_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Payments::WebhookService do let(:order) { create(:completed_order_with_totals, order_cycle: ) } let(:order_cycle) { create(:simple_order_cycle) } diff --git a/spec/services/paypal_items_builder_spec.rb b/spec/services/paypal_items_builder_spec.rb index f34be2f6ac..6ec60798eb 100644 --- a/spec/services/paypal_items_builder_spec.rb +++ b/spec/services/paypal_items_builder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PaypalItemsBuilder do let(:order) { create(:completed_order_with_fees) } let(:service) { described_class.new(order) } diff --git a/spec/services/permissions/order_spec.rb b/spec/services/permissions/order_spec.rb index 4cba893542..0375d580f7 100644 --- a/spec/services/permissions/order_spec.rb +++ b/spec/services/permissions/order_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Permissions::Order do let(:permissions) { described_class.new(user) } let!(:basic_permissions) { OpenFoodNetwork::Permissions.new(user) } diff --git a/spec/services/permitted_attributes/order_cycle_spec.rb b/spec/services/permitted_attributes/order_cycle_spec.rb index 1036e426b2..a8afd388d1 100644 --- a/spec/services/permitted_attributes/order_cycle_spec.rb +++ b/spec/services/permitted_attributes/order_cycle_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module PermittedAttributes RSpec.describe OrderCycle do let(:oc_permitted_attributes) { PermittedAttributes::OrderCycle.new(params) } diff --git a/spec/services/permitted_attributes/user_spec.rb b/spec/services/permitted_attributes/user_spec.rb index e5119d696e..2abf7cda34 100644 --- a/spec/services/permitted_attributes/user_spec.rb +++ b/spec/services/permitted_attributes/user_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - module PermittedAttributes RSpec.describe User do describe "simple usage" do diff --git a/spec/services/place_proxy_order_spec.rb b/spec/services/place_proxy_order_spec.rb index a84c82bf53..18b54038e3 100644 --- a/spec/services/place_proxy_order_spec.rb +++ b/spec/services/place_proxy_order_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe PlaceProxyOrder do subject { described_class.new(proxy_order, summarizer, logger, stock_changes_loader) } diff --git a/spec/services/process_payment_intent_spec.rb b/spec/services/process_payment_intent_spec.rb index cc6684e9b3..3cfc9602b8 100644 --- a/spec/services/process_payment_intent_spec.rb +++ b/spec/services/process_payment_intent_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProcessPaymentIntent do let(:service) { described_class.new } diff --git a/spec/services/product_filters_spec.rb b/spec/services/product_filters_spec.rb index dce7571c1e..ad016de5b8 100644 --- a/spec/services/product_filters_spec.rb +++ b/spec/services/product_filters_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductFilters do describe "extract" do it "should return a hash including only key from ProductFilters::PRODUCT_FILTERS" do diff --git a/spec/services/product_tag_rules_filterer_spec.rb b/spec/services/product_tag_rules_filterer_spec.rb index 5bfa6e50d2..501f2430b3 100644 --- a/spec/services/product_tag_rules_filterer_spec.rb +++ b/spec/services/product_tag_rules_filterer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ProductTagRulesFilterer do describe "filtering by tag rules" do let!(:distributor) { create(:distributor_enterprise) } diff --git a/spec/services/products_renderer_spec.rb b/spec/services/products_renderer_spec.rb index a24356d403..53badf2c23 100644 --- a/spec/services/products_renderer_spec.rb +++ b/spec/services/products_renderer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe ProductsRenderer do let(:distributor) { create(:distributor_enterprise) } let(:order_cycle) { create(:simple_order_cycle, distributors: [distributor]) } diff --git a/spec/services/search_orders_spec.rb b/spec/services/search_orders_spec.rb index 3b3de62b4e..66e540a4ed 100644 --- a/spec/services/search_orders_spec.rb +++ b/spec/services/search_orders_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe SearchOrders do let!(:distributor) { create(:distributor_enterprise) } let!(:order1) { create(:order_with_line_items, distributor:, line_items_count: 3) } diff --git a/spec/services/sets/model_set_spec.rb b/spec/services/sets/model_set_spec.rb index bf9f7b37ec..d63acd0ad5 100644 --- a/spec/services/sets/model_set_spec.rb +++ b/spec/services/sets/model_set_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Sets::ModelSet do describe "updating" do it "creates new models" do diff --git a/spec/services/sets/product_set_spec.rb b/spec/services/sets/product_set_spec.rb index f6b28a5fc1..298beb94ab 100644 --- a/spec/services/sets/product_set_spec.rb +++ b/spec/services/sets/product_set_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Sets::ProductSet do describe '#save' do let(:product_set) do diff --git a/spec/services/shop/order_cycles_list_spec.rb b/spec/services/shop/order_cycles_list_spec.rb index 5b5e230fb1..5ac7890133 100644 --- a/spec/services/shop/order_cycles_list_spec.rb +++ b/spec/services/shop/order_cycles_list_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe Shop::OrderCyclesList do describe ".active_for" do let(:customer) { nil } diff --git a/spec/services/shops_list_service_spec.rb b/spec/services/shops_list_service_spec.rb index 4e6ea26a87..572d6a69b2 100644 --- a/spec/services/shops_list_service_spec.rb +++ b/spec/services/shops_list_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe ShopsListService do subject { described_class.new } before do diff --git a/spec/services/stripe_payment_status_spec.rb b/spec/services/stripe_payment_status_spec.rb index 08e8b7f234..374a95e6b9 100644 --- a/spec/services/stripe_payment_status_spec.rb +++ b/spec/services/stripe_payment_status_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe StripePaymentStatus, :vcr, :stripe_version do subject { StripePaymentStatus.new(payment) } diff --git a/spec/services/tax_rate_finder_spec.rb b/spec/services/tax_rate_finder_spec.rb index 0464565ef0..a502bb9902 100644 --- a/spec/services/tax_rate_finder_spec.rb +++ b/spec/services/tax_rate_finder_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TaxRateFinder do describe "getting the corresponding tax rate" do let(:amount) { BigDecimal(120) } diff --git a/spec/services/tax_rate_updater_spec.rb b/spec/services/tax_rate_updater_spec.rb index 93c3223220..d0c2910105 100644 --- a/spec/services/tax_rate_updater_spec.rb +++ b/spec/services/tax_rate_updater_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TaxRateUpdater do let!(:old_tax_rate) { create(:tax_rate, name: "Test Rate", amount: 0.2, calculator: Calculator::DefaultTax.new) diff --git a/spec/services/terms_of_service_spec.rb b/spec/services/terms_of_service_spec.rb index c2b4021b7e..75458bf4a0 100644 --- a/spec/services/terms_of_service_spec.rb +++ b/spec/services/terms_of_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe TermsOfService do let(:customer) { create(:customer) } let(:distributor) { create(:distributor_enterprise) } diff --git a/spec/services/unit_prices_spec.rb b/spec/services/unit_prices_spec.rb index 5166346aa1..03bca848d0 100644 --- a/spec/services/unit_prices_spec.rb +++ b/spec/services/unit_prices_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UnitPrice do before do allow(Spree::Config).to receive(:available_units).and_return("g,lb,oz,kg,T,mL,L,kL") diff --git a/spec/services/upload_sanitizer_spec.rb b/spec/services/upload_sanitizer_spec.rb index e766fa7ec8..2405a31b9f 100644 --- a/spec/services/upload_sanitizer_spec.rb +++ b/spec/services/upload_sanitizer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UploadSanitizer do describe "#call" do let(:upload) do diff --git a/spec/services/url_generator_spec.rb b/spec/services/url_generator_spec.rb index fcb0d78edd..79777759a3 100644 --- a/spec/services/url_generator_spec.rb +++ b/spec/services/url_generator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UrlGenerator do subject { UrlGenerator } diff --git a/spec/services/user_default_address_setter_spec.rb b/spec/services/user_default_address_setter_spec.rb index e90d53b32b..98d1aa3e30 100644 --- a/spec/services/user_default_address_setter_spec.rb +++ b/spec/services/user_default_address_setter_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UserDefaultAddressSetter do let(:customer_address) { create(:address, address1: "customer road") } let(:order_address) { create(:address, address1: "order road") } diff --git a/spec/services/user_locale_setter_spec.rb b/spec/services/user_locale_setter_spec.rb index 9e3223c52e..a9e87c3a2d 100644 --- a/spec/services/user_locale_setter_spec.rb +++ b/spec/services/user_locale_setter_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe UserLocaleSetter do let(:user) { create(:user) } let(:default_locale) { I18n.default_locale } diff --git a/spec/services/variant_overrides_indexed_spec.rb b/spec/services/variant_overrides_indexed_spec.rb index d789c048c7..46fba6bddb 100644 --- a/spec/services/variant_overrides_indexed_spec.rb +++ b/spec/services/variant_overrides_indexed_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VariantOverridesIndexed do subject(:variant_overrides) { described_class.new([variant.id], [distributor.id]) } diff --git a/spec/services/variant_tag_rules_filterer_spec.rb b/spec/services/variant_tag_rules_filterer_spec.rb index ee74416509..2e03aa4559 100644 --- a/spec/services/variant_tag_rules_filterer_spec.rb +++ b/spec/services/variant_tag_rules_filterer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe VariantTagRulesFilterer do subject(:filterer) { described_class.new(distributor:, customer:, variants_relation:) } diff --git a/spec/services/variant_units/option_value_namer_spec.rb b/spec/services/variant_units/option_value_namer_spec.rb index 2015cacf7d..3578d76787 100644 --- a/spec/services/variant_units/option_value_namer_spec.rb +++ b/spec/services/variant_units/option_value_namer_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VariantUnits::OptionValueNamer do describe "generating option value name" do subject { described_class.new(v) } diff --git a/spec/services/variants_stock_levels_spec.rb b/spec/services/variants_stock_levels_spec.rb index 9903469799..83c5ce1e0b 100644 --- a/spec/services/variants_stock_levels_spec.rb +++ b/spec/services/variants_stock_levels_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VariantsStockLevels do let(:order) { create(:order) } diff --git a/spec/services/vine/api_service_spec.rb b/spec/services/vine/api_service_spec.rb index 6ca76ece16..999b1755b8 100644 --- a/spec/services/vine/api_service_spec.rb +++ b/spec/services/vine/api_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Vine::ApiService do subject(:vine_api) { described_class.new(api_key: vine_api_key, jwt_generator: jwt_service) } diff --git a/spec/services/vine/jwt_service_spec.rb b/spec/services/vine/jwt_service_spec.rb index 1c192cfeaf..8ddd350545 100644 --- a/spec/services/vine/jwt_service_spec.rb +++ b/spec/services/vine/jwt_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Vine::JwtService do describe "#generate_token" do subject { described_class.new(secret: vine_secret) } diff --git a/spec/services/vine/voucher_redeemer_service_spec.rb b/spec/services/vine/voucher_redeemer_service_spec.rb index 3b12ad8d59..e9add644bb 100644 --- a/spec/services/vine/voucher_redeemer_service_spec.rb +++ b/spec/services/vine/voucher_redeemer_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Vine::VoucherRedeemerService, feature: :connected_apps do subject(:voucher_redeemer_service) { described_class.new(order: ) } diff --git a/spec/services/vine/voucher_validator_service_spec.rb b/spec/services/vine/voucher_validator_service_spec.rb index 686d95c09c..12f1ff3e78 100644 --- a/spec/services/vine/voucher_validator_service_spec.rb +++ b/spec/services/vine/voucher_validator_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe Vine::VoucherValidatorService, feature: :connected_apps do subject(:validate_voucher_service) { described_class.new(voucher_code:, enterprise: distributor) } diff --git a/spec/services/voucher_adjustments_service_spec.rb b/spec/services/voucher_adjustments_service_spec.rb index d9f05fb1df..8a8bddf771 100644 --- a/spec/services/voucher_adjustments_service_spec.rb +++ b/spec/services/voucher_adjustments_service_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe VoucherAdjustmentsService do describe '#update' do let(:enterprise) { build(:enterprise) } diff --git a/spec/services/weights_and_measures_spec.rb b/spec/services/weights_and_measures_spec.rb index 5b359469e2..08fb93791d 100644 --- a/spec/services/weights_and_measures_spec.rb +++ b/spec/services/weights_and_measures_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.describe WeightsAndMeasures do subject { WeightsAndMeasures.new(variant) } let(:variant) { instance_double(Spree::Variant) } diff --git a/spec/swagger_helper.rb b/spec/swagger_helper.rb index 28cec7a963..51bfb098fa 100644 --- a/spec/swagger_helper.rb +++ b/spec/swagger_helper.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'spec_helper' - RSpec.configure do |config| config.include Devise::Test::IntegrationHelpers, type: :request config.include OpenFoodNetwork::ApiHelper, type: :request diff --git a/spec/validators/date_time_string_validator_spec.rb b/spec/validators/date_time_string_validator_spec.rb index f69301d252..25d1695453 100644 --- a/spec/validators/date_time_string_validator_spec.rb +++ b/spec/validators/date_time_string_validator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe DateTimeStringValidator do describe "internationalization" do it "has translation for NOT_STRING_ERROR" do diff --git a/spec/validators/integer_array_validator_spec.rb b/spec/validators/integer_array_validator_spec.rb index d2775a41f2..fb822e8c51 100644 --- a/spec/validators/integer_array_validator_spec.rb +++ b/spec/validators/integer_array_validator_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe IntegerArrayValidator do describe "internationalization" do it "has translation for NOT_ARRAY_ERROR" do diff --git a/spec/views/admin/products_v3/_filters.html.haml_spec.rb b/spec/views/admin/products_v3/_filters.html.haml_spec.rb index 9c01add0ac..a6bcbfbca3 100644 --- a/spec/views/admin/products_v3/_filters.html.haml_spec.rb +++ b/spec/views/admin/products_v3/_filters.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "admin/products_v3/_filters.html.haml" do helper Admin::ProductsHelper diff --git a/spec/views/admin/shared/_attachment_field.html.haml_spec.rb b/spec/views/admin/shared/_attachment_field.html.haml_spec.rb index ca7020823b..8451388710 100644 --- a/spec/views/admin/shared/_attachment_field.html.haml_spec.rb +++ b/spec/views/admin/shared/_attachment_field.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "admin/shared/_attachment_field.html.haml" do include FileHelper diff --git a/spec/views/checkout/_voucher_section.html.haml_spec.rb b/spec/views/checkout/_voucher_section.html.haml_spec.rb index f60d80d03b..d60c120bf7 100644 --- a/spec/views/checkout/_voucher_section.html.haml_spec.rb +++ b/spec/views/checkout/_voucher_section.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "checkout/_voucher_section.html.haml" do let(:order) { create(:order_with_distributor, total: 10) } let(:flat_voucher) { diff --git a/spec/views/layouts/darkswarm.html.haml_spec.rb b/spec/views/layouts/darkswarm.html.haml_spec.rb index 286f301a94..5f0f363531 100644 --- a/spec/views/layouts/darkswarm.html.haml_spec.rb +++ b/spec/views/layouts/darkswarm.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "layouts/darkswarm.html.haml" do helper InjectionHelper helper I18nHelper diff --git a/spec/views/layouts/registration.html.haml_spec.rb b/spec/views/layouts/registration.html.haml_spec.rb index 07eac91486..1b8965feef 100644 --- a/spec/views/layouts/registration.html.haml_spec.rb +++ b/spec/views/layouts/registration.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "layouts/registration.html.haml" do helper InjectionHelper helper I18nHelper diff --git a/spec/views/registration/steps/_details.html.haml_spec.rb b/spec/views/registration/steps/_details.html.haml_spec.rb index b903b5d748..e1c5b4332d 100644 --- a/spec/views/registration/steps/_details.html.haml_spec.rb +++ b/spec/views/registration/steps/_details.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "registration/steps/_details.html.haml" do subject { render } diff --git a/spec/views/spree/admin/orders/edit.html.haml_spec.rb b/spec/views/spree/admin/orders/edit.html.haml_spec.rb index d53fa5abb7..feafbd1248 100644 --- a/spec/views/spree/admin/orders/edit.html.haml_spec.rb +++ b/spec/views/spree/admin/orders/edit.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/admin/orders/edit.html.haml" do helper Spree::BaseHelper # required to make pretty_time work helper Spree::Admin::NavigationHelper diff --git a/spec/views/spree/admin/orders/index.html.haml_spec.rb b/spec/views/spree/admin/orders/index.html.haml_spec.rb index c28da03214..b942809a11 100644 --- a/spec/views/spree/admin/orders/index.html.haml_spec.rb +++ b/spec/views/spree/admin/orders/index.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/admin/orders/index.html.haml" do helper Spree::Admin::NavigationHelper helper EnterprisesHelper diff --git a/spec/views/spree/admin/orders/invoice.html.haml_spec.rb b/spec/views/spree/admin/orders/invoice.html.haml_spec.rb index a49b25d426..e15dcad4cc 100644 --- a/spec/views/spree/admin/orders/invoice.html.haml_spec.rb +++ b/spec/views/spree/admin/orders/invoice.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/admin/orders/invoice.html.haml" do let(:shop) { create(:distributor_enterprise) } let(:order) { create(:completed_order_with_totals, distributor: shop) } diff --git a/spec/views/spree/admin/payment_methods/index.html.haml_spec.rb b/spec/views/spree/admin/payment_methods/index.html.haml_spec.rb index 5b80c65b96..5aa8a2876f 100644 --- a/spec/views/spree/admin/payment_methods/index.html.haml_spec.rb +++ b/spec/views/spree/admin/payment_methods/index.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/admin/payment_methods/index.html.haml" do include AuthenticationHelper diff --git a/spec/views/spree/orders/edit.html.haml_spec.rb b/spec/views/spree/orders/edit.html.haml_spec.rb index f6b2988edb..caf79fae10 100644 --- a/spec/views/spree/orders/edit.html.haml_spec.rb +++ b/spec/views/spree/orders/edit.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/orders/edit.html.haml" do helper InjectionHelper helper ShopHelper diff --git a/spec/views/spree/orders/show.html.haml_spec.rb b/spec/views/spree/orders/show.html.haml_spec.rb index a1d238f472..0c4b180682 100644 --- a/spec/views/spree/orders/show.html.haml_spec.rb +++ b/spec/views/spree/orders/show.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/orders/show.html.haml" do helper InjectionHelper helper ShopHelper diff --git a/spec/views/spree/shared/_order_details.html.haml_spec.rb b/spec/views/spree/shared/_order_details.html.haml_spec.rb index fe2b49a19b..da1ffe3c94 100644 --- a/spec/views/spree/shared/_order_details.html.haml_spec.rb +++ b/spec/views/spree/shared/_order_details.html.haml_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require "spec_helper" - RSpec.describe "spree/shared/_order_details.html.haml" do include AuthenticationHelper From 315d52961a79a7ec0343142b9bc08ba1bc7b4a03 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 21 Jan 2026 14:29:46 +1100 Subject: [PATCH 103/270] Add "v1" to locale cache key This is to invalidate existing locale cache key, so it will pick up image path changes in cached fragment with locale --- app/helpers/application_helper.rb | 3 ++- spec/helpers/application_helper_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 343f94332c..36733e26e2 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -72,7 +72,8 @@ module ApplicationHelper end end + # Update "v1" to invalidate existing cache key def cache_key_with_locale(key, locale) - Array.wrap(key) + [locale.to_s, I18nDigests.for_locale(locale)] + Array.wrap(key) + ["v1", locale.to_s, I18nDigests.for_locale(locale)] end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index fe2679359c..d6d0c61f03 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -89,13 +89,13 @@ RSpec.describe ApplicationHelper do it "appends locale and digest to a single key" do expect( helper.cache_key_with_locale("single-key", "en") - ).to eq(["single-key", "en", en_digest]) + ).to eq(["single-key", "v1", "en", en_digest]) end it "appends locale and digest to multiple keys" do expect( helper.cache_key_with_locale(["array", "of", "keys"], "es") - ).to eq(["array", "of", "keys", "es", es_digest]) + ).to eq(["array", "of", "keys", "v1", "es", es_digest]) end end end From 8236603f76cdbc0053f8dfe465d5445ff93f2cc7 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 5 Jan 2026 15:48:43 +1100 Subject: [PATCH 104/270] Add ability to specify variant for order I will need this in the following commit. For existing specs where no variant is specified, a product with variant will be created (I think this is what the line item factory would have done before). --- spec/factories/order_factory.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb index 28abe6dd09..f9c5ecb941 100644 --- a/spec/factories/order_factory.rb +++ b/spec/factories/order_factory.rb @@ -141,15 +141,16 @@ FactoryBot.define do factory :order_with_totals_and_distribution, parent: :order_with_distributor do transient do shipping_fee { 3 } + product { variant&.product || create(:simple_product) } + variant { product.variants.first } end order_cycle { create(:simple_order_cycle) } after(:create) do |order, proxy| - product = create(:simple_product) create(:line_item_with_shipment, shipping_fee: proxy.shipping_fee, order:, - product:) + variant: proxy.variant) order.reload end From 5dfef4a3ae9dd71fc65d4f38d5a98cb9f0bdb65a Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 9 Dec 2025 12:06:57 +1100 Subject: [PATCH 105/270] Add specs for data, with product and variant grouping Oh and by the way, we missed something in the product refactor. --- .../services/affiliate_sales_query_spec.rb | 107 +++++++++++++++++- spec/factories/order_factory.rb | 3 +- 2 files changed, 105 insertions(+), 5 deletions(-) diff --git a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb index 74607e2550..b90b410576 100644 --- a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb +++ b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb @@ -6,7 +6,17 @@ RSpec.describe AffiliateSalesQuery do subject(:query) { described_class } describe ".data" do - let(:order) { create(:order_with_totals_and_distribution, :completed) } + let(:product) { create(:simple_product, name: "Tomatoes") } + let(:variant1) { + product.variants.first.tap{ |v| + v.update!( + display_name: "Tomatoes - Roma", + variant_unit: "weight", unit_value: 1000, variant_unit_scale: 1000 # 1kg + ) + } + } + let!(:order1) { create(:order_with_totals_and_distribution, :completed, variant: variant1) } + let(:today) { Time.zone.today } let(:yesterday) { Time.zone.yesterday } let(:tomorrow) { Time.zone.tomorrow } @@ -18,12 +28,12 @@ RSpec.describe AffiliateSalesQuery do travel_to(Time.zone.today.noon) end - it "returns data" do + it "returns records filtered by date" do # Test data creation takes time. # So I'm executing more tests in one `it` block here. # And make it simpler to call the subject many times: count_rows = lambda do |**args| - query.data(order.distributor, **args).count + query.data(order1.distributor, **args).count end # Without any filters: @@ -47,6 +57,86 @@ RSpec.describe AffiliateSalesQuery do # From tomorrow: expect(count_rows.call(start_date: tomorrow)).to eq 0 end + + it "returns data" do + labelled_row = query.label_row(query.data(order1.distributor).first) + + pending "unit_type" + expect(labelled_row).to include( + product_name: "Tomatoes", + unit_name: "Tomatoes - Roma", + unit_type: "weight", + units: 1000.to_f, + unit_presentation: "1kg", + price: 10.to_d, + distributor_postcode: order1.distributor.address.zipcode, + distributor_country: order1.distributor.address.country.name, + supplier_postcode: variant1.supplier.address.zipcode, + supplier_country: variant1.supplier.address.country.name, + quantity_sold: 1, + ) + end + + it "returns data stored in line item at time of order" do + # Records are updated after the orders are created + product.update! name: "Tomatoes Updated" + variant1.update! display_name: "Tomatoes - Updated Roma", price: 11 + + labelled_row = query.label_row(query.data(order1.distributor).first) + + pending "#13220 store product and variant names" + expect(labelled_row).to include( + product_name: "Tomatoes", + unit_name: "Tomatoes - Roma", + price: 10.to_d, + ) + end + + context "with multiple orders" do + let!(:order2) { + create(:order_with_totals_and_distribution, :completed, variant: product.variants.first, + distributor: order1.distributor) + } + + it "returns data grouped by product name" do + labelled_row = query.label_row(query.data(order1.distributor).first) + + expect(labelled_row).to include( + product_name: "Tomatoes", + quantity_sold: 2, + ) + end + + context "and multiple variants" do + let!(:order2) { + create(:order_with_totals_and_distribution, :completed, variant: variant2, + distributor: order1.distributor) + } + let(:variant2) { + create_variant_for(product, + display_name: "Tomatoes - Cherry", + variant_unit: "weight", unit_value: 500, variant_unit_scale: 1) # 500g + } + + it "returns data grouped by variant name" do + labelled_data = query.data(order1.distributor).map{ |row| query.label_row(row) } + + expect(labelled_data).to include a_hash_including( + product_name: "Tomatoes", + unit_name: "Tomatoes - Roma", + quantity_sold: 1, + ) + expect(labelled_data).to include a_hash_including( + product_name: "Tomatoes", + unit_name: "Tomatoes - Cherry", + quantity_sold: 1, + units: 500, + unit_presentation: "500g", + price: 10, + ) + end + end + end end describe ".label_row" do @@ -81,4 +171,15 @@ RSpec.describe AffiliateSalesQuery do ) end end + + # Create variant for product, ready to add to line item + def create_variant_for(product, **attrs) + variant = product.variants.first.dup + variant.update!( + price: 10, + **attrs, + ) + variant.update! on_demand: true + variant + end end diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb index f9c5ecb941..59b72b9c18 100644 --- a/spec/factories/order_factory.rb +++ b/spec/factories/order_factory.rb @@ -141,8 +141,7 @@ FactoryBot.define do factory :order_with_totals_and_distribution, parent: :order_with_distributor do transient do shipping_fee { 3 } - product { variant&.product || create(:simple_product) } - variant { product.variants.first } + variant { create(:simple_product).variants.first } end order_cycle { create(:simple_order_cycle) } From e121a799ed041821db0e2695f2e96e752218f4d3 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 9 Dec 2025 12:10:21 +1100 Subject: [PATCH 106/270] Refer to unit from variant variant_unit was moved to variant as part of product refactor. Old products probably still had a value there, but new ones would have been appearing with nil. --- engines/dfc_provider/app/services/affiliate_sales_query.rb | 2 +- .../dfc_provider/spec/services/affiliate_sales_query_spec.rb | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/engines/dfc_provider/app/services/affiliate_sales_query.rb b/engines/dfc_provider/app/services/affiliate_sales_query.rb index a2a90ad233..155243745a 100644 --- a/engines/dfc_provider/app/services/affiliate_sales_query.rb +++ b/engines/dfc_provider/app/services/affiliate_sales_query.rb @@ -50,7 +50,7 @@ class AffiliateSalesQuery <<~SQL.squish spree_products.name AS product_name, spree_variants.display_name AS unit_name, - spree_products.variant_unit AS unit_type, + spree_variants.variant_unit AS unit_type, spree_variants.unit_value AS units, spree_variants.unit_presentation, spree_line_items.price, diff --git a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb index b90b410576..40852fbae8 100644 --- a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb +++ b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb @@ -61,7 +61,6 @@ RSpec.describe AffiliateSalesQuery do it "returns data" do labelled_row = query.label_row(query.data(order1.distributor).first) - pending "unit_type" expect(labelled_row).to include( product_name: "Tomatoes", unit_name: "Tomatoes - Roma", From f808fe96858035ce9157ba26fb44a2a53e5c5df4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:18:48 +0000 Subject: [PATCH 107/270] Bump cross-spawn from 7.0.3 to 7.0.6 Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6. - [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md) - [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6) --- updated-dependencies: - dependency-name: cross-spawn dependency-version: 7.0.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9d44bfd273..89c0a8ce66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3151,16 +3151,7 @@ cosmiconfig@^9.0.0: js-yaml "^4.1.0" parse-json "^5.2.0" -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== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== From cce37aa9156c148203f2105a5dbd6a4c6f187229 Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 7 Jan 2026 17:10:19 +1100 Subject: [PATCH 108/270] Add explanation for magic number --- .../dfc_provider/spec/services/affiliate_sales_query_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb index 40852fbae8..7b30126378 100644 --- a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb +++ b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb @@ -87,7 +87,7 @@ RSpec.describe AffiliateSalesQuery do expect(labelled_row).to include( product_name: "Tomatoes", unit_name: "Tomatoes - Roma", - price: 10.to_d, + price: 10.to_d, # this price is hardcoded in the line item factory. ) end From ca23f124518b86d11fa6cd120127273bf1dc521d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:32:39 +0000 Subject: [PATCH 109/270] Bump sass-embedded from 1.96.0 to 1.97.2 Bumps [sass-embedded](https://github.com/sass/embedded-host-node) from 1.96.0 to 1.97.2. - [Changelog](https://github.com/sass/embedded-host-node/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/embedded-host-node/compare/1.96.0...1.97.2) --- updated-dependencies: - dependency-name: sass-embedded dependency-version: 1.97.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 198 +++++++++++++++++++++++++++--------------------------- 1 file changed, 99 insertions(+), 99 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9d44bfd273..02cfbdb63e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6407,104 +6407,104 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-embedded-all-unknown@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.96.0.tgz#15dc4103428754442eb8efffca112119146a880d" - integrity sha512-UfUHoWZtxmsDjDfK+fKCy0aJe6zThu7oaIQx0c/vnHgvprcddEPIay01qTXhiUa3cFcsMmvlBvPTVw0gjKVtVQ== +sass-embedded-all-unknown@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.2.tgz#1b3bc5a07a6966f09622bbf8aadfa149169560e3" + integrity sha512-Fj75+vOIDv1T/dGDwEpQ5hgjXxa2SmMeShPa8yrh2sUz1U44bbmY4YSWPCdg8wb7LnwiY21B2KRFM+HF42yO4g== dependencies: - sass "1.96.0" + sass "1.97.2" -sass-embedded-android-arm64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.96.0.tgz#fde75ab439240ba17ebd71ba0b9ee6c7028de096" - integrity sha512-TJiebTo4TBF5Wrn+lFkUfSN3wazvl8kkFm9a1nA9ZtRdaE0nsJLGnMM6KLQLP2Vl+IOf6ovetZseISkClRoGXw== +sass-embedded-android-arm64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.2.tgz#2a31415f07671b2713dcc5ea4e68e5967b5dcce3" + integrity sha512-pF6I+R5uThrscd3lo9B3DyNTPyGFsopycdx0tDAESN6s+dBbiRgNgE4Zlpv50GsLocj/lDLCZaabeTpL3ubhYA== -sass-embedded-android-arm@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.96.0.tgz#765ab941cb95a1b7d0bc0358b1b0d1ce31d169d5" - integrity sha512-0mwVRBFig9hH8vFcRExBuBoR+CfUOcWdwarZwbxIFGI1IyH4BLBGiX85vVn6ssSCVNydpE6lFGm45CN8O0tQig== +sass-embedded-android-arm@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.2.tgz#c31adf02cdd0fdca0d52d9b0059e6a991c5792fa" + integrity sha512-BPT9m19ttY0QVHYYXRa6bmqmS3Fa2EHByNUEtSVcbm5PkIk1ntmYkG9fn5SJpIMbNmFDGwHx+pfcZMmkldhnRg== -sass-embedded-android-riscv64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.96.0.tgz#d6d36f01dec7bb2df28bcb8bb9c51384c254f3eb" - integrity sha512-7AVu/EeJqKN3BGNhm+tc1XzmoqbOtCwHG2VgN6j6Lyqh1JZlx0dglRtyQuKDZ7odTKiWmotEIuYZ6OxLmr2Ejg== +sass-embedded-android-riscv64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.2.tgz#81c9a529419c55d2b654499ceec557c6f8e799fc" + integrity sha512-fprI8ZTJdz+STgARhg8zReI2QhhGIT9G8nS7H21kc3IkqPRzhfaemSxEtCqZyvDbXPcgYiDLV7AGIReHCuATog== -sass-embedded-android-x64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.96.0.tgz#4f781e8ebf82f128c3cb6c5844d408ab4980d478" - integrity sha512-ei/UsT0q8rF5JzWhn1A7B0M1y/IiWVY3l4zibQrXk5MGaOXHlCM6ffZD+2j7C613Jm9/KAQ7yX1NIIu72LPgDQ== +sass-embedded-android-x64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.2.tgz#9e05e782f9e30791237bc04aa49b47d366a3bd48" + integrity sha512-RswwSjURZxupsukEmNt2t6RGvuvIw3IAD5sDq1Pc65JFvWFY3eHqCmH0lG0oXqMg6KJcF0eOxHOp2RfmIm2+4w== -sass-embedded-darwin-arm64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.96.0.tgz#d94f483e02963fd56d9e081ac639fc25f358ab28" - integrity sha512-OMvN5NWcrrisC24ZR3GyaWJ1uFxw25qLnUkpEso9TSlaMWiomjU82/uQ/AkQvIMl+EMlJqeYLxZWvq/byLH5Xg== +sass-embedded-darwin-arm64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.2.tgz#5bee484274c7b15c7baa56972654756eb3da6700" + integrity sha512-xcsZNnU1XZh21RE/71OOwNqPVcGBU0qT9A4k4QirdA34+ts9cDIaR6W6lgHOBR/Bnnu6w6hXJR4Xth7oFrefPA== -sass-embedded-darwin-x64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.96.0.tgz#491375185d9fda266b0b87f70179dfd952a4ed62" - integrity sha512-J/R5sv0eW+/DU98rccHPO1f3lsTFjVTpdkU9d3P1yB7BFmQjw5PYde9BVRlXeOawPwfgT3p/hvY4RELScICdww== +sass-embedded-darwin-x64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.2.tgz#01fb4c55203346cffeba18623f6e769a622f9415" + integrity sha512-T/9DTMpychm6+H4slHCAsYJRJ6eM+9H9idKlBPliPrP4T8JdC2Cs+ZOsYqrObj6eOtAD0fGf+KgyNhnW3xVafA== -sass-embedded-linux-arm64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.96.0.tgz#533c16766336a5909c21c1e3ccd52505fe0ead30" - integrity sha512-VcbVjK0/O/mru0h0FC1WSUWIzMqRrzuJ8eZNMXTs4vApfkh28pxNaUodwU81f1L1nngJ3vpFDBniUKpW6NwJhw== +sass-embedded-linux-arm64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.2.tgz#d5bb195fefedcab01a590170950d1bd2daa904db" + integrity sha512-Wh+nQaFer9tyE5xBPv5murSUZE/+kIcg8MyL5uqww6be9Iq+UmZpcJM7LUk+q8klQ9LfTmoDSNFA74uBqxD6IA== -sass-embedded-linux-arm@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.96.0.tgz#b4fa8eb54080b724d383b043aec9ebd285eaca8a" - integrity sha512-XuQvV6gNld5Bz3rX0SFLtKPGMu4UQdXNp//9A+bDmtVGZ6yu8REIqphQBxOMpgkAKsA4JZLKKk1N97woeVsIlA== +sass-embedded-linux-arm@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.2.tgz#bd51af620ef13549e1d23e5e6f7793cba1342202" + integrity sha512-yDRe1yifGHl6kibkDlRIJ2ZzAU03KJ1AIvsAh4dsIDgK5jx83bxZLV1ZDUv7a8KK/iV/80LZnxnu/92zp99cXQ== -sass-embedded-linux-musl-arm64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.96.0.tgz#7c42226812455447ee07227072ea05681d384836" - integrity sha512-lVyLObEeu8Wgw8riC6dSMlkF7jVNAjdZ1jIBhvX1yDsrQwwaI60pM21YXmnZSFyCE6KVFkKAgwRQNO/IkoCwMA== +sass-embedded-linux-musl-arm64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.2.tgz#eb4f6b047aa3ae6907ab511a51da01b6e20c4c60" + integrity sha512-NfUqZSjHwnHvpSa7nyNxbWfL5obDjNBqhHUYmqbHUcmqBpFfHIQsUPgXME9DKn1yBlBc3mWnzMxRoucdYTzd2Q== -sass-embedded-linux-musl-arm@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.96.0.tgz#ba9580bf21216903e1a09d8bc958daf6335aaf6f" - integrity sha512-qK7FrnczCVECZXtyYOoI3azFlMDZn70GI1yJPPuZLpWvwIPYoZOLv3u6JSec5o3wT6KeKyWG3ZpGIpigLUjPig== +sass-embedded-linux-musl-arm@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.2.tgz#3370a960f658d322d4fd57a302bc9082cd83c926" + integrity sha512-GIO6xfAtahJAWItvsXZ3MD1HM6s8cKtV1/HL088aUpKJaw/2XjTCveiOO2AdgMpLNztmq9DZ1lx5X5JjqhS45g== -sass-embedded-linux-musl-riscv64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.96.0.tgz#3389f5e98bfbb2122b12b15fd79e069df84b9945" - integrity sha512-Y+DuGVRsM2zGl268QN5aF/Y6OFYTILb3f+6huEXKlGL6FK2MXadsmeoVbmKVrTamQHzyA2bWWMU1C0jhVFtlzg== +sass-embedded-linux-musl-riscv64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.2.tgz#c0fb96880580ef719485502e3fff1d0bb336a250" + integrity sha512-qtM4dJ5gLfvyTZ3QencfNbsTEShIWImSEpkThz+Y2nsCMbcMP7/jYOA03UWgPfEOKSehQQ7EIau7ncbFNoDNPQ== -sass-embedded-linux-musl-x64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.96.0.tgz#a09f72924d4789ca2f2e61cce3afeb2e123b8d15" - integrity sha512-sAQtUQ8fFNxnxSf3fncOh892Hfxa4PW4e5qrnSE0Y1IGV/wsTzk7m5Z6IeT7sa3BsvXh5TFN6+JGbUoOJ5RigA== +sass-embedded-linux-musl-x64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.2.tgz#32ab41dd6027a5e5d282670e7f10e516ada012af" + integrity sha512-ZAxYOdmexcnxGnzdsDjYmNe3jGj+XW3/pF/n7e7r8y+5c6D2CQRrCUdapLgaqPt1edOPQIlQEZF8q5j6ng21yw== -sass-embedded-linux-riscv64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.96.0.tgz#501c2a71fb70a2f54f2d150f0facce9f6deb954b" - integrity sha512-Bf6bAjuUm6sfGHo0XoZEstjVkEWwmmtOSomGoPuAwXFS9GQnFcqDz9EXKNkZEOsQi2D+aDeDxs8HcU9/OLMT9g== +sass-embedded-linux-riscv64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.2.tgz#f6079c543279cd442030d3ea2c90181ed877d89a" + integrity sha512-reVwa9ZFEAOChXpDyNB3nNHHyAkPMD+FTctQKECqKiVJnIzv2EaFF6/t0wzyvPgBKeatA8jszAIeOkkOzbYVkQ== -sass-embedded-linux-x64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.96.0.tgz#b73027c9b1c3ac1a10f215115fcb13a80c36f28e" - integrity sha512-U4GROkS0XM6ekqs/ubroWwFAGY9N35wqrt5q6Y+MJCpTK5bHPHlgFo7J75ZUSaEObL+UrDqvMDQkCdYEFiiQbg== +sass-embedded-linux-x64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.2.tgz#c056d90dd80ce4d8996aae7afd50f0d88b773de4" + integrity sha512-bvAdZQsX3jDBv6m4emaU2OMTpN0KndzTAMgJZZrKUgiC0qxBmBqbJG06Oj/lOCoXGCxAvUOheVYpezRTF+Feog== -sass-embedded-unknown-all@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.96.0.tgz#1c3c8214974da05b1657212ec8f595b491b2caaa" - integrity sha512-OHzGEr2VElK2SaQdkkTX0O0KwTbiv1N/EhnHgzXYaZWOTvv0gxEfR7q7x/oScCBIZc2x8dSfvThfBnohIClo/w== +sass-embedded-unknown-all@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.2.tgz#a640959f8f209fa7a9bd6d08f7733d9471875ffb" + integrity sha512-86tcYwohjPgSZtgeU9K4LikrKBJNf8ZW/vfsFbdzsRlvc73IykiqanufwQi5qIul0YHuu9lZtDWyWxM2dH/Rsg== dependencies: - sass "1.96.0" + sass "1.97.2" -sass-embedded-win32-arm64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.96.0.tgz#d4d0d4eafc1ddd2581956bef365232cadf687107" - integrity sha512-KKz1h5pr45fwrKcxrxHsujo3f/HgVkX64YNJ9PRPuOuX7lU8g18IEgDxoTGQ64PPBQ5RXOt6jxpT+x2OLPVnCw== +sass-embedded-win32-arm64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.2.tgz#cc5807787e714a5279981789c033610ca865ae18" + integrity sha512-Cv28q8qNjAjZfqfzTrQvKf4JjsZ6EOQ5FxyHUQQeNzm73R86nd/8ozDa1Vmn79Hq0kwM15OCM9epanDuTG1ksA== -sass-embedded-win32-x64@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.96.0.tgz#f5349af406f6552984df6293525b0e177241b9c9" - integrity sha512-MDreKaWcgiyKD5YPShaRvUBoe5dC2y8IPJK49G7iQjoMfw9INDCBkDdLcz00Mn0eJq4nJJp5UEE98M6ljIrBRg== +sass-embedded-win32-x64@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.2.tgz#88993deffdfa048f60fef6d4dca853a7c0862a3d" + integrity sha512-DVxLxkeDCGIYeyHLAvWW3yy9sy5Ruk5p472QWiyfyyG1G1ASAR8fgfIY5pT0vE6Rv+VAKVLwF3WTspUYu7S1/Q== sass-embedded@^1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.96.0.tgz#9bee58c9143d77f220ceea1cee2e4a95a595f62e" - integrity sha512-z9PQ7owvdhn7UuZGrpPccdkcH9xJd9iCv+UQhcPqppBslYEp0R9LRQVyyPTZg7jfA77bGxz/I8V48LXJR5LjXQ== + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.97.2.tgz#03622086bd0f43af4df92972d9bf1d6d76655c36" + integrity sha512-lKJcskySwAtJ4QRirKrikrWMFa2niAuaGenY2ElHjd55IwHUiur5IdKu6R1hEmGYMs4Qm+6rlRW0RvuAkmcryg== dependencies: "@bufbuild/protobuf" "^2.5.0" buffer-builder "^0.2.0" @@ -6515,24 +6515,24 @@ sass-embedded@^1.96.0: sync-child-process "^1.0.2" varint "^6.0.0" optionalDependencies: - sass-embedded-all-unknown "1.96.0" - sass-embedded-android-arm "1.96.0" - sass-embedded-android-arm64 "1.96.0" - sass-embedded-android-riscv64 "1.96.0" - sass-embedded-android-x64 "1.96.0" - sass-embedded-darwin-arm64 "1.96.0" - sass-embedded-darwin-x64 "1.96.0" - sass-embedded-linux-arm "1.96.0" - sass-embedded-linux-arm64 "1.96.0" - sass-embedded-linux-musl-arm "1.96.0" - sass-embedded-linux-musl-arm64 "1.96.0" - sass-embedded-linux-musl-riscv64 "1.96.0" - sass-embedded-linux-musl-x64 "1.96.0" - sass-embedded-linux-riscv64 "1.96.0" - sass-embedded-linux-x64 "1.96.0" - sass-embedded-unknown-all "1.96.0" - sass-embedded-win32-arm64 "1.96.0" - sass-embedded-win32-x64 "1.96.0" + sass-embedded-all-unknown "1.97.2" + sass-embedded-android-arm "1.97.2" + sass-embedded-android-arm64 "1.97.2" + sass-embedded-android-riscv64 "1.97.2" + sass-embedded-android-x64 "1.97.2" + sass-embedded-darwin-arm64 "1.97.2" + sass-embedded-darwin-x64 "1.97.2" + sass-embedded-linux-arm "1.97.2" + sass-embedded-linux-arm64 "1.97.2" + sass-embedded-linux-musl-arm "1.97.2" + sass-embedded-linux-musl-arm64 "1.97.2" + sass-embedded-linux-musl-riscv64 "1.97.2" + sass-embedded-linux-musl-x64 "1.97.2" + sass-embedded-linux-riscv64 "1.97.2" + sass-embedded-linux-x64 "1.97.2" + sass-embedded-unknown-all "1.97.2" + sass-embedded-win32-arm64 "1.97.2" + sass-embedded-win32-x64 "1.97.2" sass-loader@^16.0.6: version "16.0.6" @@ -6541,10 +6541,10 @@ sass-loader@^16.0.6: dependencies: neo-async "^2.6.2" -sass@1.96.0: - version "1.96.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.96.0.tgz#dca45b6b08ae829500f448124afc7c15150bbb34" - integrity sha512-8u4xqqUeugGNCYwr9ARNtQKTOj4KmYiJAVKXf2CTIivTCR51j96htbMKWDru8H5SaQWpyVgTfOF8Ylyf5pun1Q== +sass@1.97.2: + version "1.97.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.2.tgz#e515a319092fd2c3b015228e3094b40198bff0da" + integrity sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw== dependencies: chokidar "^4.0.0" immutable "^5.0.2" From 1e5888221786b082a5bb958be658b3fe1735242e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:32:46 +0000 Subject: [PATCH 110/270] Bump postcss-preset-env from 10.5.0 to 10.6.1 Bumps [postcss-preset-env](https://github.com/csstools/postcss-plugins/tree/HEAD/plugin-packs/postcss-preset-env) from 10.5.0 to 10.6.1. - [Changelog](https://github.com/csstools/postcss-plugins/blob/main/plugin-packs/postcss-preset-env/CHANGELOG.md) - [Commits](https://github.com/csstools/postcss-plugins/commits/HEAD/plugin-packs/postcss-preset-env) --- updated-dependencies: - dependency-name: postcss-preset-env dependency-version: 10.6.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 87 ++++++++++++++++++++++--------------------------------- 1 file changed, 35 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9d44bfd273..ddf224117b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1248,10 +1248,10 @@ "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-normalize-display-values@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" - integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== +"@csstools/postcss-normalize-display-values@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz#3738ecadb38cd6521c9565635d61aa4bf5457d27" + integrity sha512-TQUGBuRvxdc7TgNSTevYqrL8oItxiwPDixk20qCB5me/W8uF7BPbhRrAvFuhEoywQp/woRsUZ6SJ+sU5idZAIA== dependencies: postcss-value-parser "^4.2.0" @@ -1278,6 +1278,14 @@ dependencies: postcss-value-parser "^4.2.0" +"@csstools/postcss-property-rule-prelude-list@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-property-rule-prelude-list/-/postcss-property-rule-prelude-list-1.0.0.tgz#700b7aa41228c02281bda074ae778f36a09da188" + integrity sha512-IxuQjUXq19fobgmSSvUDO7fVwijDJaZMvWQugxfEUxmjBeDCVaDuMpsZ31MsTm5xbnhA+ElDi0+rQ7sQQGisFA== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.5" + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-random-function@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz#3191f32fe72936e361dadf7dbfb55a0209e2691e" @@ -1323,6 +1331,13 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" +"@csstools/postcss-syntax-descriptor-syntax-production@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-syntax-descriptor-syntax-production/-/postcss-syntax-descriptor-syntax-production-1.0.1.tgz#98590e372e547cdae60aef47cfee11f3881307dd" + integrity sha512-GneqQWefjM//f4hJ/Kbox0C6f2T7+pi4/fqTqOFGTL3EjnvOReTqO1qUQ30CaUjkwjYq9qZ41hzarrAxCc4gow== + dependencies: + "@csstools/css-tokenizer" "^3.0.4" + "@csstools/postcss-system-ui-font-family@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@csstools/postcss-system-ui-font-family/-/postcss-system-ui-font-family-1.0.0.tgz#bd65b79078debf6f67b318dc9b71a8f9fa16f8c8" @@ -2600,7 +2615,7 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -autoprefixer@^10.4.22: +autoprefixer@^10.4.23: version "10.4.23" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6" integrity sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA== @@ -2715,11 +2730,6 @@ base64id@2.0.0, base64id@~2.0.0: resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== -baseline-browser-mapping@^2.8.19: - version "2.8.23" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.23.tgz#cd43e17eff5cbfb67c92153e7fe856cf6d426421" - integrity sha512-616V5YX4bepJFzNyOfce5Fa8fDJMfoxzOIzDCZwaGL8MKVpFrXqfNUoIpRn9YMI5pXf/VKgzjB4htFMsFKKdiQ== - baseline-browser-mapping@^2.9.0: version "2.9.7" resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz#d36ce64f2a2c468f6f743c8db495d319120007db" @@ -2793,7 +2803,7 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -2804,17 +2814,6 @@ browserslist@^4.0.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4 node-releases "^2.0.27" update-browserslist-db "^1.2.0" -browserslist@^4.24.0: - version "4.27.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697" - integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw== - dependencies: - baseline-browser-mapping "^2.8.19" - caniuse-lite "^1.0.30001751" - electron-to-chromium "^1.5.238" - node-releases "^2.0.26" - update-browserslist-db "^1.1.4" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -2890,11 +2889,6 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== -caniuse-lite@^1.0.30001751: - version "1.0.30001753" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001753.tgz#419f8fc9bab6f1a1d10d9574d0b3374f823c5b00" - integrity sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw== - chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3253,10 +3247,10 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== -cssdb@^8.5.2: - version "8.5.2" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.5.2.tgz#8a8c16c43785e32749453e589f18debcd936c7d1" - integrity sha512-Pmoj9RmD8RIoIzA2EQWO4D4RMeDts0tgAH0VXdlNdxjuBGI3a9wMOIcUwaPNmD4r2qtIa06gqkIf7sECl+cBCg== +cssdb@^8.6.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.7.0.tgz#5a0846fabf863a4d397d980d8d29eb3eb26dfde1" + integrity sha512-UxiWVpV953ENHqAKjKRPZHNDfRo3uOymvO5Ef7MFCWlenaohkYj7PTO7WCBdjZm8z/aDZd6rXyUIlwZ0AjyFSg== cssesc@^3.0.0: version "3.0.0" @@ -3518,11 +3512,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.238: - version "1.5.244" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz#b9b61e3d24ef4203489951468614f2a360763820" - integrity sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw== - electron-to-chromium@^1.5.263: version "1.5.267" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" @@ -5333,7 +5322,7 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.26, node-releases@^2.0.27: +node-releases@^2.0.27: version "2.0.27" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== @@ -5956,9 +5945,9 @@ postcss-place@^10.0.0: postcss-value-parser "^4.2.0" postcss-preset-env@^10.5.0: - version "10.5.0" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.5.0.tgz#fa9af5b635c053f6d68f91132eab3a0b5c4e53c8" - integrity sha512-xgxFQPAPxeWmsgy8cR7GM1PGAL/smA5E9qU7K//D4vucS01es3M0fDujhDJn3kY8Ip7/vVYcecbe1yY+vBo3qQ== + version "10.6.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz#df30cfc54e90af2dcff5f94104e6f272359c9f65" + integrity sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g== dependencies: "@csstools/postcss-alpha-function" "^1.0.1" "@csstools/postcss-cascade-layers" "^5.0.2" @@ -5985,25 +5974,27 @@ postcss-preset-env@^10.5.0: "@csstools/postcss-media-minmax" "^2.0.9" "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.1" "@csstools/postcss-oklab-function" "^4.0.12" "@csstools/postcss-position-area-property" "^1.0.0" "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-property-rule-prelude-list" "^1.0.0" "@csstools/postcss-random-function" "^2.0.1" "@csstools/postcss-relative-color-syntax" "^3.0.12" "@csstools/postcss-scope-pseudo-class" "^4.0.1" "@csstools/postcss-sign-functions" "^1.1.4" "@csstools/postcss-stepped-value-functions" "^4.0.9" + "@csstools/postcss-syntax-descriptor-syntax-production" "^1.0.1" "@csstools/postcss-system-ui-font-family" "^1.0.0" "@csstools/postcss-text-decoration-shorthand" "^4.0.3" "@csstools/postcss-trigonometric-functions" "^4.0.9" "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.22" - browserslist "^4.28.0" + autoprefixer "^10.4.23" + browserslist "^4.28.1" css-blank-pseudo "^7.0.1" css-has-pseudo "^7.0.3" css-prefers-color-scheme "^10.0.0" - cssdb "^8.5.2" + cssdb "^8.6.0" postcss-attribute-case-insensitive "^7.0.1" postcss-clamp "^4.1.0" postcss-color-functional-notation "^7.0.12" @@ -7316,14 +7307,6 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-ia32-msvc" "1.11.1" "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" -update-browserslist-db@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" - integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - update-browserslist-db@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" From 52ee5929cfb6760dd854784cbe703a1500c01b46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 23:05:03 +0000 Subject: [PATCH 111/270] Bump lodash from 4.17.21 to 4.17.23 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9d44bfd273..f28e5f0540 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5064,9 +5064,9 @@ lodash.uniq@^4.5.0: integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== log4js@^6.4.1: version "6.9.1" From 9fa715c709a5adca01eaf145387bd4523496faee Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 09:12:04 +0100 Subject: [PATCH 112/270] Handle user registration with turbo stream --- app/controllers/spree/users_controller.rb | 34 ++----------------- app/views/layouts/_signup_tab.html.haml | 4 +-- .../spree/users/create.turbo_stream.haml | 2 ++ ..._timestamp_error_message.turbo_stream.haml | 3 ++ config/routes.rb | 1 - .../spree/users_controller_spec.rb | 16 --------- 6 files changed, 10 insertions(+), 50 deletions(-) create mode 100644 app/views/spree/users/create.turbo_stream.haml create mode 100644 app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml diff --git a/app/controllers/spree/users_controller.rb b/app/controllers/spree/users_controller.rb index 6d22dc86e3..73a3b92ea0 100644 --- a/app/controllers/spree/users_controller.rb +++ b/app/controllers/spree/users_controller.rb @@ -3,7 +3,6 @@ module Spree class UsersController < ::BaseController include I18nHelper - include CablecarResponses layout 'darkswarm' @@ -25,34 +24,14 @@ module Spree @unconfirmed_email = spree_current_user.unconfirmed_email end - # Endpoint for queries to check if a user is already registered - def registered_email - registered = Spree::User.find_by(email: params[:email]).present? - - if registered - render status: :ok, cable_ready: cable_car. - inner_html( - "#login-feedback", - partial("layouts/alert", - locals: { type: "alert", message: t('devise.failure.already_registered') }) - ). - dispatch_event(name: "login:modal:open") - else - head :not_found - end - end - def create @user = Spree::User.new(user_params) if @user.save flash[:success] = t('devise.user_registrations.spree_user.signed_up_but_unconfirmed') - render cable_ready: cable_car.redirect_to(url: main_app.root_path) + redirect_to main_app.root_path else - render status: :unprocessable_entity, cable_ready: cable_car.morph( - "#signup-tab", - partial("layouts/signup_tab", locals: { signup_form_user: @user }) - ) + render :create, status: :unprocessable_entity end end @@ -97,14 +76,7 @@ module Spree end def render_alert_timestamp_error_message - render cable_ready: cable_car.inner_html( - "#signup-feedback", - partial("layouts/alert", - locals: { - type: "alert", - message: InvisibleCaptcha.timestamp_error_message - }) - ) + render :render_alert_timestamp_error_message end end end diff --git a/app/views/layouts/_signup_tab.html.haml b/app/views/layouts/_signup_tab.html.haml index f25bf2024d..929e56c58f 100644 --- a/app/views/layouts/_signup_tab.html.haml +++ b/app/views/layouts/_signup_tab.html.haml @@ -1,14 +1,14 @@ - signup_form_user = Spree::User.new if local_assigns[:signup_form_user].nil? #signup-tab - = form_with model: signup_form_user, url: spree.account_path, scope: :user, data: { remote: "true" } do |form| + = form_with model: signup_form_user, url: spree.account_path, scope: :user, data: { turbo: true } do |form| .row .large-12.columns#signup-feedback .row .large-12.columns = form.label :email, t(:signup_email) - = form.email_field :email, { tabindex: 1, "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" } + = form.email_field :email, { tabindex: 1 } = form.error_message_on :email .row .large-12.columns diff --git a/app/views/spree/users/create.turbo_stream.haml b/app/views/spree/users/create.turbo_stream.haml new file mode 100644 index 0000000000..86fdd86ea6 --- /dev/null +++ b/app/views/spree/users/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'signup-tab' do + = render partial: 'layouts/signup_tab', locals: { signup_form_user: @user } diff --git a/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml b/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml new file mode 100644 index 0000000000..99bb2e4fca --- /dev/null +++ b/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml @@ -0,0 +1,3 @@ += turbo_stream.update 'signup-feedback' do + = render partial: 'layouts/alert', + locals: { type: "alert", message: InvisibleCaptcha.timestamp_error_message } diff --git a/config/routes.rb b/config/routes.rb index 0946d21ab7..44d2549921 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,7 +16,6 @@ Openfoodnetwork::Application.routes.draw do get "/register", to: "registration#index", as: :registration get "/register/auth", to: "registration#authenticate", as: :registration_auth - post "/user/registered_email", to: "spree/users#registered_email" resources :locales, only: [:show] # Redirects to global website diff --git a/spec/controllers/spree/users_controller_spec.rb b/spec/controllers/spree/users_controller_spec.rb index 2ff2d2aa42..5c1a9d0749 100644 --- a/spec/controllers/spree/users_controller_spec.rb +++ b/spec/controllers/spree/users_controller_spec.rb @@ -55,22 +55,6 @@ RSpec.describe Spree::UsersController do end end - describe "#registered_email" do - routes { Openfoodnetwork::Application.routes } - - let!(:user) { create(:user) } - - it "returns ok (200) if email corresponds to a registered user" do - post :registered_email, params: { email: user.email } - expect(response).to have_http_status(:ok) - end - - it "returns not_found (404) if email does not correspond to a registered user" do - post :registered_email, params: { email: 'nonregistereduser@example.com' } - expect(response).to have_http_status(:not_found) - end - end - describe '#load_object' do it 'redirects to signup path if user is not found' do allow(controller).to receive_messages(spree_current_user: nil) From e3431c7954752fd32b0744924ea0d52f04738965 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 10:24:20 +0100 Subject: [PATCH 113/270] Handle user sessions with turbo stream --- .../spree/user_sessions_controller.rb | 21 +++++++------------ app/views/layouts/_alert.html.haml | 3 ++- app/views/layouts/_login_tab.html.haml | 6 +++--- .../user_sessions/create.turbo_stream.haml | 2 ++ .../unconfirmed_user.turbo_stream.haml | 2 ++ .../spree/user_sessions_controller_spec.rb | 7 ++++--- 6 files changed, 21 insertions(+), 20 deletions(-) create mode 100644 app/views/spree/user_sessions/create.turbo_stream.haml create mode 100644 app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml diff --git a/app/controllers/spree/user_sessions_controller.rb b/app/controllers/spree/user_sessions_controller.rb index c22c6162fd..92d64f0046 100644 --- a/app/controllers/spree/user_sessions_controller.rb +++ b/app/controllers/spree/user_sessions_controller.rb @@ -9,7 +9,6 @@ module Spree include Spree::Core::ControllerHelpers::Auth include Spree::Core::ControllerHelpers::Common include Spree::Core::ControllerHelpers::Order - include CablecarResponses helper 'spree/base' @@ -24,14 +23,10 @@ module Spree if spree_user_signed_in? flash[:success] = t('devise.success.logged_in_succesfully') - render cable_ready: cable_car.redirect_to( - url: return_url_or_default(after_sign_in_path_for(spree_current_user)) - ) + redirect_to after_sign_in_path_for(spree_current_user) else - render status: :unauthorized, cable_ready: cable_car.inner_html( - "#login-feedback", - partial("layouts/alert", locals: { type: "alert", message: t('devise.failure.invalid') }) - ) + @message = t('devise.failure.invalid') + render :create, status: :unauthorized end end @@ -60,11 +55,11 @@ module Spree end def render_unconfirmed_response - render status: :unprocessable_entity, cable_ready: cable_car.inner_html( - "#login-feedback", - partial("layouts/alert", locals: { type: "alert", message: t(:email_unconfirmed), - unconfirmed: true, tab: "login" }) - ) + message = t(:email_unconfirmed) + @local_values = { type: "alert", message:, unconfirmed: true, + tab: "login", email: params.dig(:spree_user, :email) } + + render :unconfirmed_user, status: :unprocessable_entity end def ensure_valid_locale_persisted diff --git a/app/views/layouts/_alert.html.haml b/app/views/layouts/_alert.html.haml index 36db8b7e31..be1bc76ba9 100644 --- a/app/views/layouts/_alert.html.haml +++ b/app/views/layouts/_alert.html.haml @@ -1,5 +1,6 @@ .alert-box{ class: "#{type}" } = message - if local_assigns[:unconfirmed] - %a{ "data-action": "login-modal#resend_confirmation", "data-tab": local_assigns[:tab] } + - params = { spree_user: { email: email }, tab: local_assigns[:tab] } + = link_to spree_user_confirmation_path(params), params:, data: { turbo_method: :post } do = t('devise.confirmations.resend_confirmation_email') diff --git a/app/views/layouts/_login_tab.html.haml b/app/views/layouts/_login_tab.html.haml index a80a39acce..681ca1ee16 100644 --- a/app/views/layouts/_login_tab.html.haml +++ b/app/views/layouts/_login_tab.html.haml @@ -1,5 +1,5 @@ #login-content - = form_with url: spree_user_session_path, scope: :spree_user, data: { remote: "true" } do |form| + = form_with url: spree_user_session_path, scope: :spree_user, data: { turbo: true } do |form| .row .large-12.columns#login-feedback - confirmation_result = request.query_parameters[:validation] @@ -10,7 +10,7 @@ .row .large-12.columns = form.label :email, t(:email) - = form.email_field :email, { tabindex: 1, inputmode: "email", autocomplete: "off", "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" } + = form.email_field :email, { tabindex: 1, inputmode: "email", autocomplete: "off" } .row .large-12.columns = form.label :password, t(:password) @@ -21,4 +21,4 @@ = form.label :remember_me, t(:remember_me) .row .large-12.columns - = form.submit t(:label_login), { class: "button primary", tabindex: 4 } + = form.submit t(:label_login), { class: "button primary", tabindex: 4 } \ No newline at end of file diff --git a/app/views/spree/user_sessions/create.turbo_stream.haml b/app/views/spree/user_sessions/create.turbo_stream.haml new file mode 100644 index 0000000000..2621c4fb5d --- /dev/null +++ b/app/views/spree/user_sessions/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'login-feedback' do + = render partial: 'layouts/alert', locals: { message: @message, type: 'alert' } \ No newline at end of file diff --git a/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml b/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml new file mode 100644 index 0000000000..52984d1171 --- /dev/null +++ b/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'login-feedback' do + = render partial: 'layouts/alert', locals: @local_values \ No newline at end of file diff --git a/spec/controllers/spree/user_sessions_controller_spec.rb b/spec/controllers/spree/user_sessions_controller_spec.rb index cea3cc23e6..808b6320af 100644 --- a/spec/controllers/spree/user_sessions_controller_spec.rb +++ b/spec/controllers/spree/user_sessions_controller_spec.rb @@ -15,7 +15,7 @@ RSpec.describe Spree::UserSessionsController do it "redirects to root" do spree_post :create, spree_user: { email: user.email, password: user.password } - expect(response).to have_http_status(:ok) + expect(response).to have_http_status(:found) expect(response.body).to match(root_path).and match("redirect") end end @@ -26,7 +26,7 @@ RSpec.describe Spree::UserSessionsController do it "redirects to checkout" do spree_post :create, spree_user: { email: user.email, password: user.password } - expect(response).to have_http_status(:ok) + expect(response).to have_http_status(:found) expect(response.body).to match(checkout_path).and match("redirect") end end @@ -36,7 +36,8 @@ RSpec.describe Spree::UserSessionsController do render_views it "returns an error" do - spree_post :create, spree_user: { email: user.email, password: "wrong" } + spree_post :create, spree_user: { email: user.email, password: "wrong" }, + format: :turbo_stream expect(response).to have_http_status(:unauthorized) expect(response.body).to include "Invalid email or password" From 3fd007fa3d63a8776170e310b328765dae17b7e2 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 10:24:56 +0100 Subject: [PATCH 114/270] Handle user password with turbo stream --- app/controllers/user_passwords_controller.rb | 23 ++++++------------- app/views/layouts/_forgot_tab.html.haml | 4 ++-- .../user_passwords/create.turbo_stream.haml | 2 ++ .../user_passwords_controller_spec.rb | 6 ++--- 4 files changed, 14 insertions(+), 21 deletions(-) create mode 100644 app/views/user_passwords/create.turbo_stream.haml diff --git a/app/controllers/user_passwords_controller.rb b/app/controllers/user_passwords_controller.rb index b0ad3970d1..62d2259e27 100644 --- a/app/controllers/user_passwords_controller.rb +++ b/app/controllers/user_passwords_controller.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true class UserPasswordsController < Spree::UserPasswordsController - include CablecarResponses - layout 'darkswarm' def create @@ -11,27 +9,20 @@ class UserPasswordsController < Spree::UserPasswordsController self.resource = resource_class.send_reset_password_instructions(raw_params[resource_name]) if resource.errors.empty? - render cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", locals: { type: "success", message: t(:password_reset_sent) }) - ) + @message, @type = [t(:password_reset_sent), :success] + render :create else - render status: :not_found, cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", locals: { type: "alert", message: t(:email_not_found) }) - ) + @message, @type = [t(:email_not_found), :alert] + render :create, status: :not_found end end private def render_unconfirmed_response - render status: :unprocessable_entity, cable_ready: cable_car.inner_html( - "#forgot-feedback", - partial("layouts/alert", - locals: { type: "alert", message: t(:email_unconfirmed), - unconfirmed: true, tab: "forgot" }) - ) + @message, @type, @unconfirmed, @tab = [t(:email_unconfirmed), :alert, true, 'forgot'] + + render :create, status: :unprocessable_entity end def user_unconfirmed? diff --git a/app/views/layouts/_forgot_tab.html.haml b/app/views/layouts/_forgot_tab.html.haml index 47ad3c03d2..c1b8e36e88 100644 --- a/app/views/layouts/_forgot_tab.html.haml +++ b/app/views/layouts/_forgot_tab.html.haml @@ -1,12 +1,12 @@ #forgot-tab - = form_with url: spree_user_password_path, scope: :spree_user, data: { remote: "true" } do |form| + = form_with url: spree_user_password_path, scope: :spree_user, data: { turbo: true } do |form| .row .large-12.columns#forgot-feedback .row .large-12.columns = form.label :email, t(:signup_email) - = form.email_field :email, { tabindex: 1, inputmode: "email", "data-login-modal-target": "email", "data-action": "input->login-modal#emailOnInput" } + = form.email_field :email, { tabindex: 1, inputmode: "email" } .row .large-12.columns = form.submit t(:reset_password), { class: "button primary", tabindex: 2 } diff --git a/app/views/user_passwords/create.turbo_stream.haml b/app/views/user_passwords/create.turbo_stream.haml new file mode 100644 index 0000000000..9783307018 --- /dev/null +++ b/app/views/user_passwords/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update 'forgot-feedback' do + = render partial: 'layouts/alert', locals: { type: @type, message: @message, tab: @tab, unconfirmed: @unconfirmed, email: params.dig(:spree_user, :email) } \ No newline at end of file diff --git a/spec/controllers/user_passwords_controller_spec.rb b/spec/controllers/user_passwords_controller_spec.rb index d873c7df96..543072ecec 100644 --- a/spec/controllers/user_passwords_controller_spec.rb +++ b/spec/controllers/user_passwords_controller_spec.rb @@ -14,20 +14,20 @@ RSpec.describe UserPasswordsController do describe "create" do it "returns 404 if user is not found" do - spree_post :create, spree_user: { email: "xxxxxxxxxx@example.com" } + spree_post :create, spree_user: { email: "xxxxxxxxxx@example.com" }, format: :turbo_stream expect(response).to have_http_status :not_found expect(response.body).to match 'Email address not found' end it "returns 422 if user is registered but not confirmed" do - spree_post :create, spree_user: { email: unconfirmed_user.email } + spree_post :create, spree_user: { email: unconfirmed_user.email }, format: :turbo_stream expect(response).to have_http_status :unprocessable_entity expect(response.body).to match "You must confirm your email \ address before you can reset your password." end it "returns 200 when password reset was successful" do - spree_post :create, spree_user: { email: user.email } + spree_post :create, spree_user: { email: user.email }, format: :turbo_stream expect(response).to have_http_status :ok expect(response.body).to match "An email with instructions on resetting \ your password has been sent!" From 2cde74b91ad3dc8561cbb335233f8cd0655ed601 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Tue, 26 Nov 2024 10:25:17 +0100 Subject: [PATCH 115/270] Handle user confirmation with turbo stream --- .../user_confirmations_controller.rb | 8 ++----- .../create.turbo_stream.haml | 2 ++ .../controllers/login_modal_controller.js | 23 +------------------ 3 files changed, 5 insertions(+), 28 deletions(-) create mode 100644 app/views/spree/user_confirmations/create.turbo_stream.haml diff --git a/app/controllers/user_confirmations_controller.rb b/app/controllers/user_confirmations_controller.rb index d8b6b221fe..fe963c2062 100644 --- a/app/controllers/user_confirmations_controller.rb +++ b/app/controllers/user_confirmations_controller.rb @@ -3,7 +3,6 @@ class UserConfirmationsController < DeviseController # Needed for access to current_ability, so we can authorize! actions include Spree::Core::ControllerHelpers::Auth - include CablecarResponses # GET /resource/confirmation?confirmation_token=abcdef def show @@ -29,11 +28,8 @@ class UserConfirmationsController < DeviseController set_flash_message(:error, :confirmation_not_sent) end else - render cable_ready: cable_car.inner_html( - "##{params[:tab] || 'forgot'}-feedback", - partial("layouts/alert", - locals: { type: "success", message: t("devise.confirmations.send_instructions") }) - ) + flash.now[:sucess] = t("devise.confirmations.send_instructions") + render "spree/user_confirmations/create" return end diff --git a/app/views/spree/user_confirmations/create.turbo_stream.haml b/app/views/spree/user_confirmations/create.turbo_stream.haml new file mode 100644 index 0000000000..76aebb29cf --- /dev/null +++ b/app/views/spree/user_confirmations/create.turbo_stream.haml @@ -0,0 +1,2 @@ += turbo_stream.update "#{params[:tab] || 'forgot'}-feedback" do + = render partial: 'shared/flashes', locals: { flashes: flash } \ No newline at end of file diff --git a/app/webpacker/controllers/login_modal_controller.js b/app/webpacker/controllers/login_modal_controller.js index 92c3f6516d..8ef8f049f0 100644 --- a/app/webpacker/controllers/login_modal_controller.js +++ b/app/webpacker/controllers/login_modal_controller.js @@ -1,8 +1,7 @@ import { Controller } from "stimulus"; export default class extends Controller { - static targets = ["background", "modal", "email"]; - static values = { email: String }; + static targets = ["background", "modal"]; connect() { if (this.hasModalTarget) { @@ -19,13 +18,6 @@ export default class extends Controller { window.dispatchEvent(new Event("login:modal:open")); } - emailOnInput(event) { - this.emailValue = event.currentTarget.value; - this.emailTargets.forEach((element) => { - element.value = this.emailValue; - }); - } - open = () => { if (!location.hash.substr(1).includes("/login")) { history.pushState({}, "", "#/login"); @@ -57,19 +49,6 @@ export default class extends Controller { }, 200); } - resend_confirmation(event) { - fetch("/user/spree_user/confirmation", { - method: "POST", - body: JSON.stringify({ - spree_user: { email: this.emailValue }, - tab: event.currentTarget.dataset.tab, - }), - headers: { "Content-type": "application/json; charset=UTF-8" }, - }) - .then((data) => data.json()) - .then(CableReady.perform); - } - returnHome() { window.location = "/"; } From d9453979b1164aafaf4e1acd300185c9c67a2224 Mon Sep 17 00:00:00 2001 From: wandji20 Date: Mon, 2 Dec 2024 18:04:27 +0100 Subject: [PATCH 116/270] Small improvements --- app/controllers/spree/user_sessions_controller.rb | 2 +- app/views/layouts/_alert.html.haml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/controllers/spree/user_sessions_controller.rb b/app/controllers/spree/user_sessions_controller.rb index 92d64f0046..0705a506d1 100644 --- a/app/controllers/spree/user_sessions_controller.rb +++ b/app/controllers/spree/user_sessions_controller.rb @@ -23,7 +23,7 @@ module Spree if spree_user_signed_in? flash[:success] = t('devise.success.logged_in_succesfully') - redirect_to after_sign_in_path_for(spree_current_user) + redirect_to return_url_or_default(after_sign_in_path_for(spree_current_user)) else @message = t('devise.failure.invalid') render :create, status: :unauthorized diff --git a/app/views/layouts/_alert.html.haml b/app/views/layouts/_alert.html.haml index be1bc76ba9..c77aeb80f1 100644 --- a/app/views/layouts/_alert.html.haml +++ b/app/views/layouts/_alert.html.haml @@ -1,6 +1,5 @@ .alert-box{ class: "#{type}" } = message - if local_assigns[:unconfirmed] - - params = { spree_user: { email: email }, tab: local_assigns[:tab] } - = link_to spree_user_confirmation_path(params), params:, data: { turbo_method: :post } do + = link_to spree_user_confirmation_path(spree_user: { email: }, tab: local_assigns[:tab]), data: { turbo_method: :post } do = t('devise.confirmations.resend_confirmation_email') From f5823bd618f99931caa25a999d4906467ee14c1f Mon Sep 17 00:00:00 2001 From: wandji20 Date: Sat, 12 Apr 2025 02:23:47 +0100 Subject: [PATCH 117/270] Refactor to render turbo responses inline --- .../spree/user_sessions_controller.rb | 14 +++++++---- app/controllers/spree/users_controller.rb | 11 +++++++-- .../user_confirmations_controller.rb | 7 ++++-- app/controllers/user_passwords_controller.rb | 24 ++++++++++++++----- .../create.turbo_stream.haml | 2 -- .../user_sessions/create.turbo_stream.haml | 2 -- .../unconfirmed_user.turbo_stream.haml | 2 -- .../spree/users/create.turbo_stream.haml | 2 -- ..._timestamp_error_message.turbo_stream.haml | 3 --- .../user_passwords/create.turbo_stream.haml | 2 -- 10 files changed, 41 insertions(+), 28 deletions(-) delete mode 100644 app/views/spree/user_confirmations/create.turbo_stream.haml delete mode 100644 app/views/spree/user_sessions/create.turbo_stream.haml delete mode 100644 app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml delete mode 100644 app/views/spree/users/create.turbo_stream.haml delete mode 100644 app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml delete mode 100644 app/views/user_passwords/create.turbo_stream.haml diff --git a/app/controllers/spree/user_sessions_controller.rb b/app/controllers/spree/user_sessions_controller.rb index 0705a506d1..521349c995 100644 --- a/app/controllers/spree/user_sessions_controller.rb +++ b/app/controllers/spree/user_sessions_controller.rb @@ -25,8 +25,10 @@ module Spree redirect_to return_url_or_default(after_sign_in_path_for(spree_current_user)) else - @message = t('devise.failure.invalid') - render :create, status: :unauthorized + message = t('devise.failure.invalid') + render turbo_stream: turbo_stream.update( + 'login-feedback', partial: 'layouts/alert', locals: { message:, type: 'alert' } + ), status: :unauthorized end end @@ -56,10 +58,12 @@ module Spree def render_unconfirmed_response message = t(:email_unconfirmed) - @local_values = { type: "alert", message:, unconfirmed: true, - tab: "login", email: params.dig(:spree_user, :email) } - render :unconfirmed_user, status: :unprocessable_entity + render turbo_stream: turbo_stream.update( + 'login-feedback', + partial: 'layouts/alert', locals: { type: "alert", message:, unconfirmed: true, + tab: "login", email: params.dig(:spree_user, :email) } + ), status: :unprocessable_entity end def ensure_valid_locale_persisted diff --git a/app/controllers/spree/users_controller.rb b/app/controllers/spree/users_controller.rb index 73a3b92ea0..583fb13087 100644 --- a/app/controllers/spree/users_controller.rb +++ b/app/controllers/spree/users_controller.rb @@ -31,7 +31,10 @@ module Spree flash[:success] = t('devise.user_registrations.spree_user.signed_up_but_unconfirmed') redirect_to main_app.root_path else - render :create, status: :unprocessable_entity + render turbo_stream: turbo_stream.update( + 'signup-tab', + partial: 'layouts/signup_tab', locals: { signup_form_user: @user } + ), status: :unprocessable_entity end end @@ -76,7 +79,11 @@ module Spree end def render_alert_timestamp_error_message - render :render_alert_timestamp_error_message + render turbo_stream: turbo_stream.update( + 'signup-feedback', + partial: 'layouts/alert', + locals: { type: "alert", message: InvisibleCaptcha.timestamp_error_message } + ) end end end diff --git a/app/controllers/user_confirmations_controller.rb b/app/controllers/user_confirmations_controller.rb index fe963c2062..ee65e9c6a9 100644 --- a/app/controllers/user_confirmations_controller.rb +++ b/app/controllers/user_confirmations_controller.rb @@ -29,8 +29,11 @@ class UserConfirmationsController < DeviseController end else flash.now[:sucess] = t("devise.confirmations.send_instructions") - render "spree/user_confirmations/create" - return + + return render turbo_stream: turbo_stream.update( + "#{params[:tab] || 'forgot'}-feedback", + partial: 'shared/flashes', locals: { flashes: flash } + ) end respond_with_navigational(resource){ redirect_to login_path } diff --git a/app/controllers/user_passwords_controller.rb b/app/controllers/user_passwords_controller.rb index 62d2259e27..72f947fec9 100644 --- a/app/controllers/user_passwords_controller.rb +++ b/app/controllers/user_passwords_controller.rb @@ -7,22 +7,34 @@ class UserPasswordsController < Spree::UserPasswordsController return render_unconfirmed_response if user_unconfirmed? self.resource = resource_class.send_reset_password_instructions(raw_params[resource_name]) + status = :ok if resource.errors.empty? - @message, @type = [t(:password_reset_sent), :success] - render :create + message, type = [t(:password_reset_sent), :success] else - @message, @type = [t(:email_not_found), :alert] - render :create, status: :not_found + message, type = [t(:email_not_found), :alert] + status = :not_found end + + render turbo_stream: turbo_stream.update( + 'forgot-feedback', + partial: 'layouts/alert', + locals: { type:, message:, tab: 'forgot', + unconfirmed: false, email: params.dig(:spree_user, :email) } + ), status: end private def render_unconfirmed_response - @message, @type, @unconfirmed, @tab = [t(:email_unconfirmed), :alert, true, 'forgot'] + message, type, unconfirmed, tab = [t(:email_unconfirmed), :alert, true, 'forgot'] - render :create, status: :unprocessable_entity + render turbo_stream: turbo_stream.update( + 'forgot-feedback', + partial: 'layouts/alert', + locals: { type:, message:, tab:, + unconfirmed:, email: params.dig(:spree_user, :email) } + ), status: :unprocessable_entity end def user_unconfirmed? diff --git a/app/views/spree/user_confirmations/create.turbo_stream.haml b/app/views/spree/user_confirmations/create.turbo_stream.haml deleted file mode 100644 index 76aebb29cf..0000000000 --- a/app/views/spree/user_confirmations/create.turbo_stream.haml +++ /dev/null @@ -1,2 +0,0 @@ -= turbo_stream.update "#{params[:tab] || 'forgot'}-feedback" do - = render partial: 'shared/flashes', locals: { flashes: flash } \ No newline at end of file diff --git a/app/views/spree/user_sessions/create.turbo_stream.haml b/app/views/spree/user_sessions/create.turbo_stream.haml deleted file mode 100644 index 2621c4fb5d..0000000000 --- a/app/views/spree/user_sessions/create.turbo_stream.haml +++ /dev/null @@ -1,2 +0,0 @@ -= turbo_stream.update 'login-feedback' do - = render partial: 'layouts/alert', locals: { message: @message, type: 'alert' } \ No newline at end of file diff --git a/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml b/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml deleted file mode 100644 index 52984d1171..0000000000 --- a/app/views/spree/user_sessions/unconfirmed_user.turbo_stream.haml +++ /dev/null @@ -1,2 +0,0 @@ -= turbo_stream.update 'login-feedback' do - = render partial: 'layouts/alert', locals: @local_values \ No newline at end of file diff --git a/app/views/spree/users/create.turbo_stream.haml b/app/views/spree/users/create.turbo_stream.haml deleted file mode 100644 index 86fdd86ea6..0000000000 --- a/app/views/spree/users/create.turbo_stream.haml +++ /dev/null @@ -1,2 +0,0 @@ -= turbo_stream.update 'signup-tab' do - = render partial: 'layouts/signup_tab', locals: { signup_form_user: @user } diff --git a/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml b/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml deleted file mode 100644 index 99bb2e4fca..0000000000 --- a/app/views/spree/users/render_alert_timestamp_error_message.turbo_stream.haml +++ /dev/null @@ -1,3 +0,0 @@ -= turbo_stream.update 'signup-feedback' do - = render partial: 'layouts/alert', - locals: { type: "alert", message: InvisibleCaptcha.timestamp_error_message } diff --git a/app/views/user_passwords/create.turbo_stream.haml b/app/views/user_passwords/create.turbo_stream.haml deleted file mode 100644 index 9783307018..0000000000 --- a/app/views/user_passwords/create.turbo_stream.haml +++ /dev/null @@ -1,2 +0,0 @@ -= turbo_stream.update 'forgot-feedback' do - = render partial: 'layouts/alert', locals: { type: @type, message: @message, tab: @tab, unconfirmed: @unconfirmed, email: params.dig(:spree_user, :email) } \ No newline at end of file From b0b03cbb5f9f7b4617ecbb6bc197ce400ba96fd4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 22 Jan 2026 12:19:43 +1100 Subject: [PATCH 118/270] Delete old screenshots when updating app --- bin/setup | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/setup b/bin/setup index 1f75470d94..41f98b93d8 100755 --- a/bin/setup +++ b/bin/setup @@ -31,6 +31,7 @@ FileUtils.chdir APP_ROOT do puts "\n== Preparing database, removing old logs and tempfiles ==" system! "bin/rails db:prepare log:clear tmp:clear" + system! "rm -f tmp/capybara/screenshots/*.png" puts "\n== Restarting application server ==" # system! "bin/rails restart" From 88a0737916628b456b2fd4e694e10895b0961e90 Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 22 Jan 2026 12:26:24 +1100 Subject: [PATCH 119/270] Return correct http code for bad login params This tells our generic ajax (Turbo) error handling to ignore the error and let the application display the response as usual. --- app/controllers/spree/user_sessions_controller.rb | 2 +- spec/controllers/spree/user_sessions_controller_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/spree/user_sessions_controller.rb b/app/controllers/spree/user_sessions_controller.rb index 521349c995..c3880fc28b 100644 --- a/app/controllers/spree/user_sessions_controller.rb +++ b/app/controllers/spree/user_sessions_controller.rb @@ -28,7 +28,7 @@ module Spree message = t('devise.failure.invalid') render turbo_stream: turbo_stream.update( 'login-feedback', partial: 'layouts/alert', locals: { message:, type: 'alert' } - ), status: :unauthorized + ), status: :unprocessable_entity end end diff --git a/spec/controllers/spree/user_sessions_controller_spec.rb b/spec/controllers/spree/user_sessions_controller_spec.rb index 808b6320af..7bc3970938 100644 --- a/spec/controllers/spree/user_sessions_controller_spec.rb +++ b/spec/controllers/spree/user_sessions_controller_spec.rb @@ -39,7 +39,7 @@ RSpec.describe Spree::UserSessionsController do spree_post :create, spree_user: { email: user.email, password: "wrong" }, format: :turbo_stream - expect(response).to have_http_status(:unauthorized) + expect(response).to have_http_status(:unprocessable_entity) expect(response.body).to include "Invalid email or password" end end From 6cbc6fbca3ac005b6af4cb404a875ea54f872aa6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 22 Jan 2026 12:27:04 +1100 Subject: [PATCH 120/270] Remove precompiled assets on update --- bin/setup | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/setup b/bin/setup index 41f98b93d8..c31e9ab26f 100755 --- a/bin/setup +++ b/bin/setup @@ -33,6 +33,9 @@ FileUtils.chdir APP_ROOT do system! "bin/rails db:prepare log:clear tmp:clear" system! "rm -f tmp/capybara/screenshots/*.png" + puts "\n== Removing any precompiled assets that would be out of date now ==" + system! "rm -rf public/assets/" + puts "\n== Restarting application server ==" # system! "bin/rails restart" # Faster to do it manually: From 1e2b8bad3f5a55e3dd1a29c5ca350c46a6979e3c Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 22 Jan 2026 12:32:12 +1100 Subject: [PATCH 121/270] Fix linter error --- app/views/layouts/_login_tab.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_login_tab.html.haml b/app/views/layouts/_login_tab.html.haml index 681ca1ee16..a1a21f2647 100644 --- a/app/views/layouts/_login_tab.html.haml +++ b/app/views/layouts/_login_tab.html.haml @@ -21,4 +21,4 @@ = form.label :remember_me, t(:remember_me) .row .large-12.columns - = form.submit t(:label_login), { class: "button primary", tabindex: 4 } \ No newline at end of file + = form.submit t(:label_login), { class: "button primary", tabindex: 4 } From 35724bec810562a6433a0af13f0f04c14b273c73 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 22 Jan 2026 12:39:10 +1100 Subject: [PATCH 122/270] Delete generated JS for tests on update --- bin/setup | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/setup b/bin/setup index c31e9ab26f..51eb039b61 100755 --- a/bin/setup +++ b/bin/setup @@ -32,6 +32,7 @@ FileUtils.chdir APP_ROOT do puts "\n== Preparing database, removing old logs and tempfiles ==" system! "bin/rails db:prepare log:clear tmp:clear" system! "rm -f tmp/capybara/screenshots/*.png" + system! "rm -f tmp/javascripts/*.js" puts "\n== Removing any precompiled assets that would be out of date now ==" system! "rm -rf public/assets/" From 30804da259e415ee75186f1ffc9fe443567436cb Mon Sep 17 00:00:00 2001 From: David Cook Date: Thu, 22 Jan 2026 12:45:01 +1100 Subject: [PATCH 123/270] Fix spec The controller now responds with a standard HTTP redirect, instead of an app-specific redirect encoded in the body. --- spec/controllers/spree/user_sessions_controller_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/spree/user_sessions_controller_spec.rb b/spec/controllers/spree/user_sessions_controller_spec.rb index 7bc3970938..b99d7c1cec 100644 --- a/spec/controllers/spree/user_sessions_controller_spec.rb +++ b/spec/controllers/spree/user_sessions_controller_spec.rb @@ -16,7 +16,7 @@ RSpec.describe Spree::UserSessionsController do spree_post :create, spree_user: { email: user.email, password: user.password } expect(response).to have_http_status(:found) - expect(response.body).to match(root_path).and match("redirect") + expect(response.location).to eq root_url end end @@ -27,7 +27,7 @@ RSpec.describe Spree::UserSessionsController do spree_post :create, spree_user: { email: user.email, password: user.password } expect(response).to have_http_status(:found) - expect(response.body).to match(checkout_path).and match("redirect") + expect(response.location).to eq checkout_url end end end From 85439b4b545bf96dc1793a813ce5261187497426 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 22 Jan 2026 13:58:46 +1100 Subject: [PATCH 124/270] Delete even more tmp dev files --- bin/setup | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/setup b/bin/setup index 51eb039b61..48d344fb83 100755 --- a/bin/setup +++ b/bin/setup @@ -32,10 +32,15 @@ FileUtils.chdir APP_ROOT do puts "\n== Preparing database, removing old logs and tempfiles ==" system! "bin/rails db:prepare log:clear tmp:clear" system! "rm -f tmp/capybara/screenshots/*.png" + system! "rm -f tmp/invoices/*.pdf" system! "rm -f tmp/javascripts/*.js" + system! "rm -f tmp/karma_unit.js*" + system! "rm -f tmp/product_import-*" puts "\n== Removing any precompiled assets that would be out of date now ==" system! "rm -rf public/assets/" + system! "rm -rf public/packs/" + system! "rm -rf public/packs-test/" puts "\n== Restarting application server ==" # system! "bin/rails restart" From a82b2c279923079aa0bfcdf9e6628c4af9985987 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:32:43 +0000 Subject: [PATCH 125/270] Bump @babel/core from 7.28.5 to 7.28.6 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.28.5 to 7.28.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-version: 7.28.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 192 +++++++++++++++++++++++------------------------------- 1 file changed, 82 insertions(+), 110 deletions(-) diff --git a/yarn.lock b/yarn.lock index 21a9af151c..7b05b4aabb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,34 +13,39 @@ "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" + integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== dependencies: - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": +"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== +"@babel/compat-data@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" + integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== + "@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" - integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f" + integrity sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw== dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.5" - "@babel/types" "^7.28.5" + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -48,13 +53,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.27.5", "@babel/generator@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" - integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== +"@babel/generator@^7.27.5", "@babel/generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1" + integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw== dependencies: - "@babel/parser" "^7.28.5" - "@babel/types" "^7.28.5" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -73,12 +78,12 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2", "@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== dependencies: - "@babel/compat-data" "^7.27.2" + "@babel/compat-data" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" @@ -147,14 +152,22 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" - integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3", "@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" @@ -199,22 +212,12 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== - "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": +"@babel/helper-validator-identifier@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== @@ -233,25 +236,20 @@ "@babel/traverse" "^7.28.3" "@babel/types" "^7.28.2" -"@babel/helpers@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" - integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== dependencies: - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/parser@^7.1.0", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" + integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== dependencies: - "@babel/types" "^7.28.5" - -"@babel/parser@^7.20.7": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" - integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== + "@babel/types" "^7.28.6" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" @@ -935,45 +933,36 @@ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.27.1", "@babel/template@^7.27.2": - version "7.27.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== +"@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" - integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" + integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg== dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.5" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" + integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" -"@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.4.4": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" - integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== - dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -3337,20 +3326,13 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@^4.1.0, debug@^4.1.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" @@ -5250,11 +5232,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -7139,11 +7116,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -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" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" From 5c3308de364171e8f3d9cc53d34cedb0ea206fcf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:32:50 +0000 Subject: [PATCH 126/270] Bump webpack from 5.104.0 to 5.104.1 Bumps [webpack](https://github.com/webpack/webpack) from 5.104.0 to 5.104.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack/compare/v5.104.0...v5.104.1) --- updated-dependencies: - dependency-name: webpack dependency-version: 5.104.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 21a9af151c..be7b103e34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4015,12 +4015,7 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -7479,9 +7474,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.104.0: - version "5.104.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.0.tgz#2b919a4f2526cdc42731142ae295019264fcfb76" - integrity sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g== + version "5.104.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a" + integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" From 76c6362db0f575620a9bd59313f8b4f6e61a5982 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:32:58 +0000 Subject: [PATCH 127/270] Bump mini-css-extract-plugin from 2.9.4 to 2.10.0 Bumps [mini-css-extract-plugin](https://github.com/webpack/mini-css-extract-plugin) from 2.9.4 to 2.10.0. - [Release notes](https://github.com/webpack/mini-css-extract-plugin/releases) - [Changelog](https://github.com/webpack/mini-css-extract-plugin/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/mini-css-extract-plugin/compare/v2.9.4...v2.10.0) --- updated-dependencies: - dependency-name: mini-css-extract-plugin dependency-version: 2.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 21a9af151c..fb876d7ef2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5180,9 +5180,9 @@ mimic-fn@^2.1.0: integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mini-css-extract-plugin@^2.9.4: - version "2.9.4" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz#cafa1a42f8c71357f49cd1566810d74ff1cb0200" - integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== + version "2.10.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz#d801a1f388f8fac7333c01b7c15c9222c811def4" + integrity sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" From 3152362b9daf714f6c7cfeffa087a7d9911c3ae4 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 12 Jan 2026 16:27:51 +1100 Subject: [PATCH 128/270] Upgrade to Shakapacker 7.2.3 --- Gemfile | 2 +- Gemfile.lock | 6 ++++-- package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index ffdcd75728..44c1d371f1 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'activemerchant' gem 'angular-rails-templates' gem 'ransack', '~> 4.1.0' gem 'responders' -gem 'shakapacker', '6.6.0' +gem 'shakapacker', '7.2.3' # Indirect dependency but we access it directly in JS specs. # It turns out to be hard to upgrade but please do if you can. diff --git a/Gemfile.lock b/Gemfile.lock index b08dc19dd7..500251293e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -553,6 +553,7 @@ GEM webfinger (~> 2.0) orm_adapter (0.5.0) ostruct (0.6.1) + package_json (0.2.0) pagy (9.4.0) paper_trail (17.0.0) activerecord (>= 7.1) @@ -815,8 +816,9 @@ GEM sd_notify (0.1.1) securerandom (0.4.1) semantic_range (3.1.0) - shakapacker (6.6.0) + shakapacker (7.2.3) activesupport (>= 5.2) + package_json rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) @@ -1083,7 +1085,7 @@ DEPENDENCIES rubocop-rspec_rails sd_notify select2-rails! - shakapacker (= 6.6.0) + shakapacker (= 7.2.3) shoulda-matchers sidekiq sidekiq-scheduler diff --git a/package.json b/package.json index 6cafd278b6..5426be00cd 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "sass-embedded": "^1.96.0", "sass-loader": "^16.0.6", "select2": "*", - "shakapacker": "6.6.0", + "shakapacker": "7.2.3", "shortcut-buttons-flatpickr": "*", "stimulus": "*", "stimulus-autocomplete": "*", diff --git a/yarn.lock b/yarn.lock index e22c245dfa..f4e36b9fad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6652,10 +6652,10 @@ setprototypeof@1.2.0, setprototypeof@~1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shakapacker@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-6.6.0.tgz#1e372a7ce6fa93f1a7bd1820737b8168679eb220" - integrity sha512-7sNnv8PXMlgm2Ob7vZOayLKu0+PPMN3q0HEyAlkFIJtHJt7wA3p1rObhlk0/OrNeBa4dio/9HiBUeEU7bZsHvw== +shakapacker@7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-7.2.3.tgz#12613e8ca3139e47d42003f8d01846dea28f6c40" + integrity sha512-+qF74Y6+hEARqtsmJmBtdc2L0q6eXO21PlPsvtw6aqoxtqhM2VpCCDt51/5Cqnj/5IyEOEICZqStRCSO/q38hg== dependencies: glob "^7.2.0" js-yaml "^4.1.0" From ee087f9effe7b5133cf0033f7160a61995307b71 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 10:29:00 +1100 Subject: [PATCH 129/270] Change spelling to Shakapacker --- Procfile | 2 +- Procfile.docker | 4 +-- bin/shakapacker | 13 +++++++++ bin/shakapacker-dev-server | 13 +++++++++ bin/webpacker | 14 ---------- bin/webpacker-dev-server | 17 ------------ compose.yaml | 10 +++---- config/ci_shakapacker.yml | 34 +++++++++++++++++++++++ config/{webpacker.yml => shakapacker.yml} | 2 -- 9 files changed, 68 insertions(+), 41 deletions(-) create mode 100755 bin/shakapacker create mode 100755 bin/shakapacker-dev-server delete mode 100755 bin/webpacker delete mode 100755 bin/webpacker-dev-server create mode 100644 config/ci_shakapacker.yml rename config/{webpacker.yml => shakapacker.yml} (98%) diff --git a/Procfile b/Procfile index c8f01d2a22..ef7489e2af 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ # Foreman Procfile. Start all dev server processes with: `foreman start` rails: DEV_CACHING=true bundle exec rails s -p 3000 -webpack: ./bin/webpacker-dev-server +webpack: ./bin/shakacker-dev-server sidekiq: DEV_CACHING=true bundle exec sidekiq -q mailers -q default diff --git a/Procfile.docker b/Procfile.docker index 08270a03a6..1e61946ee3 100644 --- a/Procfile.docker +++ b/Procfile.docker @@ -1,5 +1,5 @@ # Foreman Procfile for Docker env. Start all dev server processes with: `bundle exec foreman start -f Procfile.docker` -webpack: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/webpacker-dev-server +webpack: SHAKAPACKER_DEV_SERVER_HOST=0.0.0.0 ./bin/shakapacker-dev-server sidekiq: DEV_CACHING=true bundle exec sidekiq -q mailers -q default -rails: WEBPACKER_DEV_SERVER_HOST=0.0.0.0 DEV_CACHING=true bundle exec rails s -p 3000 -b 0.0.0.0 +rails: SHAKAPACKER_DEV_SERVER_HOST=0.0.0.0 DEV_CACHING=true bundle exec rails s -p 3000 -b 0.0.0.0 diff --git a/bin/shakapacker b/bin/shakapacker new file mode 100755 index 0000000000..13a008dcfe --- /dev/null +++ b/bin/shakapacker @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" +require "shakapacker" +require "shakapacker/webpack_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::WebpackRunner.run(ARGV) +end diff --git a/bin/shakapacker-dev-server b/bin/shakapacker-dev-server new file mode 100755 index 0000000000..5ae8897989 --- /dev/null +++ b/bin/shakapacker-dev-server @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= "development" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__) + +require "bundler/setup" +require "shakapacker" +require "shakapacker/dev_server_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Shakapacker::DevServerRunner.run(ARGV) +end diff --git a/bin/webpacker b/bin/webpacker deleted file mode 100755 index 8a952955e9..0000000000 --- a/bin/webpacker +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby - -require "pathname" -require "bundler/setup" -require "webpacker" -require "webpacker/webpack_runner" - -ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath) - -APP_ROOT = File.expand_path("..", __dir__) -Dir.chdir(APP_ROOT) do - Webpacker::WebpackRunner.run(ARGV) -end diff --git a/bin/webpacker-dev-server b/bin/webpacker-dev-server deleted file mode 100755 index e921e0e53e..0000000000 --- a/bin/webpacker-dev-server +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env ruby - -ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" - -require "pathname" -ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", - Pathname.new(__FILE__).realpath) - -require "bundler/setup" - -require "webpacker" -require "webpacker/dev_server_runner" - -APP_ROOT = File.expand_path("..", __dir__) -Dir.chdir(APP_ROOT) do - Webpacker::DevServerRunner.run(ARGV) -end diff --git a/compose.yaml b/compose.yaml index b02b0077e1..b879e2be72 100644 --- a/compose.yaml +++ b/compose.yaml @@ -53,9 +53,9 @@ services: OFN_REDIS_URL: redis://redis/ OFN_REDIS_JOBS_URL: redis://redis OFN_REDIS_TEST_URL: redis://redis/3 - WEBPACKER_DEV_SERVER_HOST: webpack - WEBPACKER_DEV_SERVER_PORT: 3035 - WEBPACKER_DEV_SERVER_PUBLIC: localhost:3035 + SHAKAPACKER_DEV_SERVER_HOST: webpack + SHAKAPACKER_DEV_SERVER_PORT: 3035 + SHAKAPACKER_DEV_SERVER_PUBLIC: localhost:3035 command: > sh -lc 'rm -f tmp/pids/server.pid; @@ -89,7 +89,7 @@ services: build: . command: > sh -lc 'until [ -f /bundles/.Gemfile.lock.sha ] && sha256sum -c /bundles/.Gemfile.lock.sha >/dev/null 2>&1; do sleep 0.5; done; - exec ./bin/webpacker-dev-server' + exec ./bin/shakapacker-dev-server' ports: - "3035:3035" volumes: @@ -102,7 +102,7 @@ services: retries: 30 environment: - WEBPACKER_DEV_SERVER_HOST: 0.0.0.0 + SHAKAPACKER_DEV_SERVER_HOST: 0.0.0.0 volumes: gems: postgres: diff --git a/config/ci_shakapacker.yml b/config/ci_shakapacker.yml new file mode 100644 index 0000000000..425e975f13 --- /dev/null +++ b/config/ci_shakapacker.yml @@ -0,0 +1,34 @@ +# Note: You must restart bin/webpack-dev-server for changes to take effect + +default: &default + source_path: app/webpacker + source_entry_path: packs + public_root_path: public + public_output_path: packs + cache_path: tmp/cache/webpacker + webpack_compile_output: true + + # Additional paths webpack should look up modules + # ['app/assets', 'engine/foo/app/assets'] + additional_paths: [ + 'vendor', + 'app/webpacker/css', + 'app/webpacker/fonts', + 'app/webpacker/images', + 'engines/web/app/assets/stylesheets', + 'app/components' + ] + + # Reload manifest.json on all requests so we reload latest compiled packs + cache_manifest: false + + # Extract and emit a css file + extract_css: true + +test: + <<: *default + # Asset are precomiled on CI, so no need to compile here + compile: false + + # Compile test packs to a separate directory + public_output_path: packs-test diff --git a/config/webpacker.yml b/config/shakapacker.yml similarity index 98% rename from config/webpacker.yml rename to config/shakapacker.yml index 565596797b..2fba7f9380 100644 --- a/config/webpacker.yml +++ b/config/shakapacker.yml @@ -51,8 +51,6 @@ development: compress: true # Note that apps that do not check the host are vulnerable to DNS rebinding attacks allowed_hosts: "all" - #TODO Old config - #pretty: false pretty: true headers: 'Access-Control-Allow-Origin': '*' From 26b8f62325f83bfcc7156a5556d27f3a87afbd71 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 11:01:24 +1100 Subject: [PATCH 130/270] Fix wepack config, move to `generateWebpackConfig` --- config/webpack/webpack.config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js index 5fbe79ce63..00528036b3 100644 --- a/config/webpack/webpack.config.js +++ b/config/webpack/webpack.config.js @@ -1,4 +1,6 @@ -const { webpackConfig, merge } = require("shakapacker") +const { generateWebpackConfig, merge } = require("shakapacker") + +const webpackConfig = generateWebpackConfig() const options = { resolve: { From 4e5238d1bb8901a153609cfc276a9b98867885eb Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 11:04:18 +1100 Subject: [PATCH 131/270] Update dependencies --- yarn.lock | 605 +++++++++++++++++++++++++----------------------------- 1 file changed, 275 insertions(+), 330 deletions(-) diff --git a/yarn.lock b/yarn.lock index f4e36b9fad..d34c9dd51f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,12 +22,7 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" - integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== - -"@babel/compat-data@^7.28.6": +"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== @@ -64,13 +59,6 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": version "7.27.3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" @@ -89,29 +77,20 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" - integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== +"@babel/helper-create-class-features-plugin@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz#611ff5482da9ef0db6291bcd24303400bca170fb" + integrity sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-replace-supers" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.5" + "@babel/traverse" "^7.28.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" - integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.3.1" - semver "^6.3.0" - -"@babel/helper-create-regexp-features-plugin@^7.27.1": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1", "@babel/helper-create-regexp-features-plugin@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== @@ -136,7 +115,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": +"@babel/helper-member-expression-to-functions@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== @@ -144,15 +123,7 @@ "@babel/traverse" "^7.28.5" "@babel/types" "^7.28.5" -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-imports@^7.28.6": +"@babel/helper-module-imports@^7.27.1", "@babel/helper-module-imports@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== @@ -176,16 +147,21 @@ dependencies: "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" - integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== +"@babel/helper-plugin-utils@^7.14.5": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" + integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + "@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" @@ -195,14 +171,14 @@ "@babel/helper-wrap-function" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/helper-replace-supers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" - integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== +"@babel/helper-replace-supers@^7.27.1", "@babel/helper-replace-supers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz#94aa9a1d7423a00aead3f204f78834ce7d53fe44" + integrity sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/traverse" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers@^7.27.1": version "7.27.1" @@ -228,13 +204,13 @@ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== "@babel/helper-wrap-function@^7.27.1": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" - integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz#4e349ff9222dab69a93a019cc296cdd8442e279a" + integrity sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ== dependencies: - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" "@babel/helpers@^7.28.6": version "7.28.6" @@ -282,13 +258,13 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz#373f6e2de0016f73caf8f27004f61d167743742a" - integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz#0e8289cec28baaf05d54fd08d81ae3676065f69f" + integrity sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/traverse" "^7.28.6" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -323,20 +299,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-import-assertions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" - integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== +"@babel/plugin-syntax-import-assertions@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": +"@babel/plugin-syntax-import-attributes@^7.24.7": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: "@babel/helper-plugin-utils" "^7.27.1" +"@babel/plugin-syntax-import-attributes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" + integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -436,22 +419,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" - integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== +"@babel/plugin-transform-async-generator-functions@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz#80cb86d3eaa2102e18ae90dd05ab87bdcad3877d" + integrity sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" - integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== +"@babel/plugin-transform-async-to-generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz#bd97b42237b2d1bc90d74bcb486c39be5b4d7e77" + integrity sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-remap-async-to-generator" "^7.27.1" "@babel/plugin-transform-block-scoped-functions@^7.27.1": @@ -461,50 +444,50 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" - integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== +"@babel/plugin-transform-block-scoping@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz#e1ef5633448c24e76346125c2534eeb359699a99" + integrity sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" - integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== +"@babel/plugin-transform-class-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz#d274a4478b6e782d9ea987fda09bdb6d28d66b72" + integrity sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-class-static-block@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz#d1b8e69b54c9993bc558203e1f49bfc979bfd852" - integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== +"@babel/plugin-transform-class-static-block@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz#1257491e8259c6d125ac4d9a6f39f9d2bf3dba70" + integrity sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-classes@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" - integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== +"@babel/plugin-transform-classes@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz#8f6fb79ba3703978e701ce2a97e373aae7dda4b7" + integrity sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-globals" "^7.28.0" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/traverse" "^7.28.4" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/helper-replace-supers" "^7.28.6" + "@babel/traverse" "^7.28.6" -"@babel/plugin-transform-computed-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" - integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== +"@babel/plugin-transform-computed-properties@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz#936824fc71c26cb5c433485776d79c8e7b0202d2" + integrity sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/template" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/template" "^7.28.6" -"@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": +"@babel/plugin-transform-destructuring@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== @@ -512,13 +495,13 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/traverse" "^7.28.5" -"@babel/plugin-transform-dotall-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" - integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== +"@babel/plugin-transform-dotall-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz#def31ed84e0fb6e25c71e53c124e7b76a4ab8e61" + integrity sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-duplicate-keys@^7.27.1": version "7.27.1" @@ -527,13 +510,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" - integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz#e0c59ba54f1655dd682f2edf5f101b5910a8f6f3" + integrity sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-dynamic-import@^7.27.1": version "7.27.1" @@ -542,20 +525,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-explicit-resource-management@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" - integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== +"@babel/plugin-transform-explicit-resource-management@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz#dd6788f982c8b77e86779d1d029591e39d9d8be7" + integrity sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" -"@babel/plugin-transform-exponentiation-operator@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" - integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== +"@babel/plugin-transform-exponentiation-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz#5e477eb7eafaf2ab5537a04aaafcf37e2d7f1091" + integrity sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-export-namespace-from@^7.27.1": version "7.27.1" @@ -581,12 +564,12 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" - integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== +"@babel/plugin-transform-json-strings@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz#4c8c15b2dc49e285d110a4cf3dac52fd2dfc3038" + integrity sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-literals@^7.27.1": version "7.27.1" @@ -595,12 +578,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" - integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== +"@babel/plugin-transform-logical-assignment-operators@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz#53028a3d77e33c50ef30a8fce5ca17065936e605" + integrity sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-member-expression-literals@^7.27.1": version "7.27.1" @@ -617,13 +600,13 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== +"@babel/plugin-transform-modules-commonjs@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz#c0232e0dfe66a734cc4ad0d5e75fc3321b6fdef1" + integrity sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-modules-systemjs@^7.28.5": version "7.28.5" @@ -658,30 +641,30 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" - integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz#9bc62096e90ab7a887f3ca9c469f6adec5679757" + integrity sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-numeric-separator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" - integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== +"@babel/plugin-transform-numeric-separator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz#1310b0292762e7a4a335df5f580c3320ee7d9e9f" + integrity sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-object-rest-spread@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" - integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== +"@babel/plugin-transform-object-rest-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz#fdd4bc2d72480db6ca42aed5c051f148d7b067f7" + integrity sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-transform-destructuring" "^7.28.5" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.4" + "@babel/traverse" "^7.28.6" "@babel/plugin-transform-object-super@^7.27.1": version "7.27.1" @@ -691,19 +674,19 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-optional-catch-binding@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" - integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== +"@babel/plugin-transform-optional-catch-binding@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz#75107be14c78385978201a49c86414a150a20b4c" + integrity sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" - integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz#926cf150bd421fc8362753e911b4a1b1ce4356cd" + integrity sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-parameters@^7.27.7": @@ -713,22 +696,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" - integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== +"@babel/plugin-transform-private-methods@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz#c76fbfef3b86c775db7f7c106fff544610bdb411" + integrity sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-private-property-in-object@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" - integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== +"@babel/plugin-transform-private-property-in-object@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz#4fafef1e13129d79f1d75ac180c52aafefdb2811" + integrity sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-property-literals@^7.27.1": version "7.27.1" @@ -737,20 +720,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" - integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== +"@babel/plugin-transform-regenerator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz#6ca2ed5b76cff87980f96eaacfc2ce833e8e7a1b" + integrity sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-regexp-modifiers@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" - integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== +"@babel/plugin-transform-regexp-modifiers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz#7ef0163bd8b4a610481b2509c58cf217f065290b" + integrity sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-reserved-words@^7.27.1": version "7.27.1" @@ -778,12 +761,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" - integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== +"@babel/plugin-transform-spread@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz#40a2b423f6db7b70f043ad027a58bcb44a9757b6" + integrity sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-transform-sticky-regex@^7.27.1": @@ -814,13 +797,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" - integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== +"@babel/plugin-transform-unicode-property-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz#63a7a6c21a0e75dae9b1861454111ea5caa22821" + integrity sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-unicode-regex@^7.27.1": version "7.27.1" @@ -830,83 +813,83 @@ "@babel/helper-create-regexp-features-plugin" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" - integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== +"@babel/plugin-transform-unicode-sets-regex@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz#924912914e5df9fe615ec472f88ff4788ce04d4e" + integrity sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/preset-env@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" - integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.6.tgz#b4586bb59d8c61be6c58997f4912e7ea6bd17178" + integrity sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw== dependencies: - "@babel/compat-data" "^7.28.5" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/compat-data" "^7.28.6" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.27.1" - "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-import-assertions" "^7.28.6" + "@babel/plugin-syntax-import-attributes" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.28.0" - "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.6" + "@babel/plugin-transform-async-to-generator" "^7.28.6" "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.5" - "@babel/plugin-transform-class-properties" "^7.27.1" - "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.4" - "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.6" + "@babel/plugin-transform-class-properties" "^7.28.6" + "@babel/plugin-transform-class-static-block" "^7.28.6" + "@babel/plugin-transform-classes" "^7.28.6" + "@babel/plugin-transform-computed-properties" "^7.28.6" "@babel/plugin-transform-destructuring" "^7.28.5" - "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-dotall-regex" "^7.28.6" "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.28.6" "@babel/plugin-transform-dynamic-import" "^7.27.1" - "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.28.5" + "@babel/plugin-transform-explicit-resource-management" "^7.28.6" + "@babel/plugin-transform-exponentiation-operator" "^7.28.6" "@babel/plugin-transform-export-namespace-from" "^7.27.1" "@babel/plugin-transform-for-of" "^7.27.1" "@babel/plugin-transform-function-name" "^7.27.1" - "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.28.6" "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.6" "@babel/plugin-transform-member-expression-literals" "^7.27.1" "@babel/plugin-transform-modules-amd" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.28.6" "@babel/plugin-transform-modules-systemjs" "^7.28.5" "@babel/plugin-transform-modules-umd" "^7.27.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" "@babel/plugin-transform-new-target" "^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" - "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.4" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" + "@babel/plugin-transform-numeric-separator" "^7.28.6" + "@babel/plugin-transform-object-rest-spread" "^7.28.6" "@babel/plugin-transform-object-super" "^7.27.1" - "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.28.5" + "@babel/plugin-transform-optional-catch-binding" "^7.28.6" + "@babel/plugin-transform-optional-chaining" "^7.28.6" "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/plugin-transform-private-methods" "^7.27.1" - "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-private-methods" "^7.28.6" + "@babel/plugin-transform-private-property-in-object" "^7.28.6" "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.4" - "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.6" + "@babel/plugin-transform-regexp-modifiers" "^7.28.6" "@babel/plugin-transform-reserved-words" "^7.27.1" "@babel/plugin-transform-shorthand-properties" "^7.27.1" - "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-spread" "^7.28.6" "@babel/plugin-transform-sticky-regex" "^7.27.1" "@babel/plugin-transform-template-literals" "^7.27.1" "@babel/plugin-transform-typeof-symbol" "^7.27.1" "@babel/plugin-transform-unicode-escapes" "^7.27.1" - "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.28.6" "@babel/plugin-transform-unicode-regex" "^7.27.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.14" babel-plugin-polyfill-corejs3 "^0.13.0" @@ -923,17 +906,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.28.4", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== -"@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.28.6": +"@babel/runtime@^7.28.4": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + +"@babel/template@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== @@ -942,7 +925,7 @@ "@babel/parser" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6": +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg== @@ -955,7 +938,7 @@ "@babel/types" "^7.28.6" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== @@ -2720,9 +2703,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== baseline-browser-mapping@^2.9.0: - version "2.9.7" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.7.tgz#d36ce64f2a2c468f6f743c8db495d319120007db" - integrity sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg== + version "2.9.14" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz#3b6af0bc032445bca04de58caa9a87cfe921cbb3" + integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg== batch@0.6.1: version "0.6.1" @@ -2873,11 +2856,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001760: version "1.0.30001760" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== +caniuse-lite@^1.0.30001759: + version "1.0.30001764" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005" + integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g== + chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2914,11 +2902,9 @@ chokidar@^4.0.0: readdirp "^4.0.1" chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^4.2.0: version "4.3.1" @@ -3653,9 +3639,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -4839,11 +4825,6 @@ jsesc@^3.0.2, jsesc@~3.1.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - 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" @@ -6198,13 +6179,6 @@ rechoir@^0.7.0: dependencies: resolve "^1.9.0" -regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties@^10.2.2: version "10.2.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" @@ -6224,18 +6198,6 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - regexpu-core@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" @@ -6260,13 +6222,6 @@ regjsparser@^0.13.0: dependencies: jsesc "~3.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -6564,7 +6519,7 @@ selfsigned@^2.1.1: "@types/node-forge" "^1.3.0" node-forge "^1" -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -7157,11 +7112,6 @@ ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" @@ -7201,9 +7151,9 @@ undici-types@~7.16.0: integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -7213,20 +7163,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - unicode-match-property-value-ecmascript@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1" + integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== universalify@^0.1.0: version "0.1.2" @@ -7266,9 +7211,9 @@ unrs-resolver@^1.7.11: "@unrs/resolver-binding-win32-x64-msvc" "1.11.1" update-browserslist-db@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" - integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d" + integrity sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -7334,9 +7279,9 @@ walker@^1.0.8: makeerror "1.0.12" watchpack@^2.4.4: - version "2.4.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" - integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.0.tgz#fa115d5ccaa4bf3aa594f586257c0bc4768939fd" + integrity sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" From a0c23825b8dd25a53e18351da198a5a0e26de8cb Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 11:09:18 +1100 Subject: [PATCH 132/270] Top level dir is not stripped anymore for static assets --- app/views/admin/producer_properties/_form.html.haml | 2 +- app/views/components/_spinner.html.haml | 2 +- app/views/home/_tagline.html.haml | 2 +- app/views/layouts/darkswarm.html.haml | 2 +- app/views/layouts/registration.html.haml | 2 +- app/views/producers/_fat.html.haml | 2 +- app/views/registration/steps/_limit_reached.html.haml | 2 +- app/views/shared/_footer.html.haml | 2 +- app/views/shared/menu/_cart.html.haml | 2 +- app/views/shared/menu/_mobile_menu.html.haml | 4 ++-- app/views/shared/menu/_signed_in.html.haml | 2 +- app/views/shared/menu/_signed_out.html.haml | 2 +- app/views/shop/products/_searchbar.haml | 2 +- app/views/shopping_shared/tabs/_contact.html.haml | 2 +- .../spree/admin/payments/source_forms/_gateway.html.haml | 2 +- app/views/spree/admin/product_properties/index.html.haml | 2 +- app/views/spree/admin/states/index.html.haml | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/views/admin/producer_properties/_form.html.haml b/app/views/admin/producer_properties/_form.html.haml index 05ad2d874d..743bbdbd86 100644 --- a/app/views/admin/producer_properties/_form.html.haml +++ b/app/views/admin/producer_properties/_form.html.haml @@ -1,6 +1,6 @@ %fieldset.no-border-top .add_producer_properties - = image_pack_tag 'spinner.gif', :plugin => 'spree', :style => 'display:none;', :id => 'busy_indicator' + = image_pack_tag 'images/spinner.gif', :plugin => 'spree', :style => 'display:none;', :id => 'busy_indicator' %table.index.sortable{"data-sortable-link" => main_app.update_positions_admin_enterprise_producer_properties_url(@enterprise)} %thead %tr diff --git a/app/views/components/_spinner.html.haml b/app/views/components/_spinner.html.haml index b4492c4b14..dc86cc3d12 100644 --- a/app/views/components/_spinner.html.haml +++ b/app/views/components/_spinner.html.haml @@ -1,2 +1,2 @@ = cache do - %img.spinner{ src: image_pack_path("spinning-circles.svg"), style: "max-width: 100%" } + %img.spinner{ src: image_pack_path("images/spinning-circles.svg"), style: "max-width: 100%" } diff --git a/app/views/home/_tagline.html.haml b/app/views/home/_tagline.html.haml index 56dc937f25..c485337901 100644 --- a/app/views/home/_tagline.html.haml +++ b/app/views/home/_tagline.html.haml @@ -3,7 +3,7 @@ .row .small-12.text-center.columns %h1 - %img{src: image_pack_path("logo-white-notext.png"), title: Spree::Config.site_name} + %img{src: image_pack_path("images/logo-white-notext.png"), title: Spree::Config.site_name} %br/ %a.button.transparent{href: "/shops"} = t :home_shop diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index 0d048daaa7..c0a49f953a 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -13,7 +13,7 @@ - else = favicon_link_tag "/favicon-staging.ico" %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} - %link{href: asset_pack_path("static/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} + %link{href: asset_pack_path("static/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} = render "layouts/matomo_tag" = language_meta_tags diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index a89f6f8857..a99a45870f 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -20,7 +20,7 @@ = csrf_meta_tags - %body.off-canvas{ style: "background-image: url(#{image_pack_path('tile-wide.png')})", "data-turbo": "false" } + %body.off-canvas{ style: "background-image: url(#{image_pack_path('images/tile-wide.png')})", "data-turbo": "false" } .off-canvas-wrap{offcanvas: true} .inner-wrap diff --git a/app/views/producers/_fat.html.haml b/app/views/producers/_fat.html.haml index bf580f4b06..92d026abab 100644 --- a/app/views/producers/_fat.html.haml +++ b/app/views/producers/_fat.html.haml @@ -41,7 +41,7 @@ %p.word-wrap{"ng-if" => "::producer.whatsapp_phone"} %a{"ng-href" => "{{::producer.whatsapp_url}}", target: "_blank"} - %img{ src: image_pack_path("social-logos/whatsapp.svg") } + %img{ src: image_pack_path("images/social-logos/whatsapp.svg") } %span{"ng-bind" => "::producer.whatsapp_phone"} %p.word-wrap{"ng-if" => "::producer.email_address"} diff --git a/app/views/registration/steps/_limit_reached.html.haml b/app/views/registration/steps/_limit_reached.html.haml index 6f07dd80b9..edadf76aaa 100644 --- a/app/views/registration/steps/_limit_reached.html.haml +++ b/app/views/registration/steps/_limit_reached.html.haml @@ -6,7 +6,7 @@ %h4= t(".message") .row .small-12.medium-3.large-2.columns.text-right.hide-for-small-only - %img{:src => image_pack_path("potatoes.png") } + %img{:src => image_pack_path("images/potatoes.png") } .small-12.medium-9.large-10.columns %p = t(".text") diff --git a/app/views/shared/_footer.html.haml b/app/views/shared/_footer.html.haml index 5d121a4ea2..915455b5e7 100644 --- a/app/views/shared/_footer.html.haml +++ b/app/views/shared/_footer.html.haml @@ -4,7 +4,7 @@ .row .small-12.columns.text-center .logo - %img{src: image_pack_path("logo-white-notext.png") } + %img{src: image_pack_path("images/logo-white-notext.png") } .row .small-12.medium-8.medium-offset-2.columns.text-center .alert-box diff --git a/app/views/shared/menu/_cart.html.haml b/app/views/shared/menu/_cart.html.haml index eb5fe0a563..79217c8627 100644 --- a/app/views/shared/menu/_cart.html.haml +++ b/app/views/shared/menu/_cart.html.haml @@ -4,6 +4,6 @@ %span = t '.cart' %span.count - %img{ src: image_pack_path("menu/icn-cart.svg") } + %img{ src: image_pack_path("images/menu/icn-cart.svg") } %span {{ Cart.total_item_count() }} diff --git a/app/views/shared/menu/_mobile_menu.html.haml b/app/views/shared/menu/_mobile_menu.html.haml index 544cb65631..be90bbd6e3 100644 --- a/app/views/shared/menu/_mobile_menu.html.haml +++ b/app/views/shared/menu/_mobile_menu.html.haml @@ -2,7 +2,7 @@ %nav.tab-bar.show-for-medium-down %section.left %a.left-off-canvas-toggle.menu-icon - = image_pack_tag "menu/btn-menu-mobile.png" + = image_pack_tag "images/menu/btn-menu-mobile.png" %section.left .ofn-logo @@ -18,7 +18,7 @@ %span = t '.cart' %span.count - = image_pack_tag "menu/icn-cart.svg" + = image_pack_tag "images/menu/icn-cart.svg" %span {{ Cart.total_item_count() }} diff --git a/app/views/shared/menu/_signed_in.html.haml b/app/views/shared/menu/_signed_in.html.haml index 8d5fec0fae..f6456b4b21 100644 --- a/app/views/shared/menu/_signed_in.html.haml +++ b/app/views/shared/menu/_signed_in.html.haml @@ -1,7 +1,7 @@ %li.user-menu.has-dropdown.not-click %a{href: "#", class: "top-bar--menu-item-with-icon"} - %img{ src: image_pack_path("menu/icn-profile.svg") } + %img{ src: image_pack_path("images/menu/icn-profile.svg") } %span = t '.profile' diff --git a/app/views/shared/menu/_signed_out.html.haml b/app/views/shared/menu/_signed_out.html.haml index d6913ec554..b8aead9de7 100644 --- a/app/views/shared/menu/_signed_out.html.haml +++ b/app/views/shared/menu/_signed_out.html.haml @@ -1,6 +1,6 @@ = cache_with_locale do %li#login-link{ "data-controller": "login-modal" } %a{"auth": "login", "data-action": "click->login-modal#call" } - %img{ src: image_pack_path("menu/icn-login.svg") } + %img{ src: image_pack_path("images/menu/icn-login.svg") } %span = t 'label_login' diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index f069c0bd6a..25ce5fed3c 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -9,7 +9,7 @@ "ng-debounce" => "200", "disable-enter-with-blur" => true} %a.clear{ type: 'button', "focus-search": true, "ng-show": 'query', "ng-click": 'clearQuery()' } - = image_pack_tag "icn-close.png" + = image_pack_tag "images/icn-close.png" .hide-for-large-up %button{ type: 'button', "ng-click": 'toggleFilterSidebar()' } diff --git a/app/views/shopping_shared/tabs/_contact.html.haml b/app/views/shopping_shared/tabs/_contact.html.haml index de78ddcfd1..edf32a754f 100644 --- a/app/views/shopping_shared/tabs/_contact.html.haml +++ b/app/views/shopping_shared/tabs/_contact.html.haml @@ -27,7 +27,7 @@ %br - if current_distributor.whatsapp_phone.present? %a{href: current_distributor.whatsapp_url, target: "_blank" } - %img{ src: image_pack_path("social-logos/whatsapp.svg") } + %img{ src: image_pack_path("images/social-logos/whatsapp.svg") } = current_distributor.whatsapp_phone %br - if current_distributor.website.present? diff --git a/app/views/spree/admin/payments/source_forms/_gateway.html.haml b/app/views/spree/admin/payments/source_forms/_gateway.html.haml index ac20d73609..019021c9c8 100644 --- a/app/views/spree/admin/payments/source_forms/_gateway.html.haml +++ b/app/views/spree/admin/payments/source_forms/_gateway.html.haml @@ -41,5 +41,5 @@ %a.info.cvvLink{href: "/content/cvv", target: "_blank"} (#{t(:what_is_this)}) .nine.columns - = image_pack_tag 'credit_cards/credit_card.gif', class: 'credit-card-image' + = image_pack_tag 'images/credit_cards/credit_card.gif', class: 'credit-card-image' .clear diff --git a/app/views/spree/admin/product_properties/index.html.haml b/app/views/spree/admin/product_properties/index.html.haml index cd07017706..593c2e376a 100644 --- a/app/views/spree/admin/product_properties/index.html.haml +++ b/app/views/spree/admin/product_properties/index.html.haml @@ -12,7 +12,7 @@ = form_for @product, url: admin_product_url(@product, @url_filters), method: :put do |f| %fieldset.no-border-top .add_product_properties - = image_pack_tag 'select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' + = image_pack_tag 'images/select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' %table.index.sortable{"data-sortable-link" => update_positions_admin_product_product_properties_url} %thead diff --git a/app/views/spree/admin/states/index.html.haml b/app/views/spree/admin/states/index.html.haml index b9e72fa193..b0956a725b 100644 --- a/app/views/spree/admin/states/index.html.haml +++ b/app/views/spree/admin/states/index.html.haml @@ -11,6 +11,6 @@ - databaseurl = "#{admin_states_path(format: :js)}?country_id=" %select#country.observe_field.select2.fullwidth{"data-base-url" => databaseurl, "data-update" => "#state-list"} = options_from_collection_for_select(@countries, :id, :name, @country.id) -= image_pack_tag 'select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' += image_pack_tag 'images/select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' #state-list = render partial: 'state_list' From 9af57e1fc43f6278a86f6660a878801d5a43e04f Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 13 Jan 2026 15:44:21 +1100 Subject: [PATCH 133/270] Remove deprecated config options --- config/shakapacker.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/shakapacker.yml b/config/shakapacker.yml index 2fba7f9380..172d943073 100644 --- a/config/shakapacker.yml +++ b/config/shakapacker.yml @@ -32,7 +32,6 @@ development: # Reference: https://webpack.js.org/configuration/dev-server/ dev_server: - https: false host: localhost port: 3035 # Hot Module Replacement updates modules while the application is running without a full reload From e502aad7c92c1900ae170c979f85f12665a76063 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 14:10:28 +1100 Subject: [PATCH 134/270] Coffee scripts are managed by sproket There is no need to add coffee script dependencies for webpack --- package.json | 2 -- yarn.lock | 10 ---------- 2 files changed, 12 deletions(-) diff --git a/package.json b/package.json index 5426be00cd..4ec4289707 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,6 @@ "@stimulus-components/rails-nested-form": "*", "babel-loader": "^8.2.2", "cable_ready": "5.0.6", - "coffee-loader": "^5.0.0", - "coffeescript": "^2.7.0", "compression-webpack-plugin": "^9.0.0", "css-loader": "^7.1.2", "css-minimizer-webpack-plugin": "^7.0.4", diff --git a/yarn.lock b/yarn.lock index d34c9dd51f..7589b53533 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2948,21 +2948,11 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -coffee-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/coffee-loader/-/coffee-loader-5.0.0.tgz#376de71ea3dc648a9c4cac5b02fbadb7c19c8e6e" - integrity sha512-gUIfnuyjVEkjuugx6uRHHhnqmjqsL5dlhYgvhAUla25EoQhI57IFBQvsHvJHtBv5BMB2IzTKezDU2SrZkEiPdQ== - coffee-script@~1: version "1.12.7" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== -coffeescript@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.7.0.tgz#a43ec03be6885d6d1454850ea70b9409c391279c" - integrity sha512-hzWp6TUE2d/jCcN67LrW1eh5b/rSDKQK6oD6VMLlggYVUUFexgTH9z3dNYihzX4RMhze5FTUsUmOXViJKFQR/A== - collect-v8-coverage@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" From 108e313e4858a7e16a37f0bc62028dcbbfaec5c2 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 20 Jan 2026 11:20:51 +1100 Subject: [PATCH 135/270] Remove ci config that was missed during rebase --- config/ci_shakapacker.yml | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 config/ci_shakapacker.yml diff --git a/config/ci_shakapacker.yml b/config/ci_shakapacker.yml deleted file mode 100644 index 425e975f13..0000000000 --- a/config/ci_shakapacker.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Note: You must restart bin/webpack-dev-server for changes to take effect - -default: &default - source_path: app/webpacker - source_entry_path: packs - public_root_path: public - public_output_path: packs - cache_path: tmp/cache/webpacker - webpack_compile_output: true - - # Additional paths webpack should look up modules - # ['app/assets', 'engine/foo/app/assets'] - additional_paths: [ - 'vendor', - 'app/webpacker/css', - 'app/webpacker/fonts', - 'app/webpacker/images', - 'engines/web/app/assets/stylesheets', - 'app/components' - ] - - # Reload manifest.json on all requests so we reload latest compiled packs - cache_manifest: false - - # Extract and emit a css file - extract_css: true - -test: - <<: *default - # Asset are precomiled on CI, so no need to compile here - compile: false - - # Compile test packs to a separate directory - public_output_path: packs-test From 988f90316427ddb116cf8750e1bd85b687a92705 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 21 Jan 2026 15:14:14 +1100 Subject: [PATCH 136/270] Update locale cache key to invalidate cache --- app/helpers/application_helper.rb | 2 +- spec/helpers/application_helper_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 36733e26e2..4da992b8ef 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -74,6 +74,6 @@ module ApplicationHelper # Update "v1" to invalidate existing cache key def cache_key_with_locale(key, locale) - Array.wrap(key) + ["v1", locale.to_s, I18nDigests.for_locale(locale)] + Array.wrap(key) + ["v2", locale.to_s, I18nDigests.for_locale(locale)] end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index b11c72b3df..59dd6c4013 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -87,13 +87,13 @@ RSpec.describe ApplicationHelper do it "appends locale and digest to a single key" do expect( helper.cache_key_with_locale("single-key", "en") - ).to eq(["single-key", "v1", "en", en_digest]) + ).to eq(["single-key", "v2", "en", en_digest]) end it "appends locale and digest to multiple keys" do expect( helper.cache_key_with_locale(["array", "of", "keys"], "es") - ).to eq(["array", "of", "keys", "v1", "es", es_digest]) + ).to eq(["array", "of", "keys", "v2", "es", es_digest]) end end end From 77fe1fa6f9306d38466bb97a3db47df612fa424e Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 25 Jan 2026 11:14:49 +0500 Subject: [PATCH 137/270] Refactor SearchableDropdownComponent and integrate remote data loading with TomSelect --- .../searchable_dropdown_component.rb | 37 +- .../searchable_dropdown_component.html.haml | 5 +- .../concerns/reports/ajax_search.rb | 2 +- ...se_fees_with_tax_report_by_order.html.haml | 35 +- ...fees_with_tax_report_by_producer.html.haml | 41 ++- .../controllers/select2_ajax_controller.js | 105 ------ .../controllers/tom_select_controller.js | 156 ++++++++- jest.config.js | 2 +- .../admin/reports_controller_spec.rb | 46 +-- .../stimulus/select2_ajax_controller_test.js | 156 --------- .../stimulus/tom_select_controller_test.js | 318 ++++++++++++++++++ 11 files changed, 577 insertions(+), 326 deletions(-) delete mode 100644 app/webpacker/controllers/select2_ajax_controller.js delete mode 100644 spec/javascripts/stimulus/select2_ajax_controller_test.js create mode 100644 spec/javascripts/stimulus/tom_select_controller_test.js diff --git a/app/components/searchable_dropdown_component.rb b/app/components/searchable_dropdown_component.rb index 1f4d5f9e87..821bf89979 100644 --- a/app/components/searchable_dropdown_component.rb +++ b/app/components/searchable_dropdown_component.rb @@ -1,17 +1,18 @@ # frozen_string_literal: true class SearchableDropdownComponent < ViewComponent::Base - REMOVED_SEARCH_PLUGIN = { 'tom-select-options-value': '{ "plugins": [] }' }.freeze MINIMUM_OPTIONS_FOR_SEARCH_FIELD = 11 # at least 11 options are required for the search field def initialize( - form:, name:, options:, selected_option:, - placeholder_value:, + form: nil, + placeholder_value: '', include_blank: false, aria_label: '', + multiple: false, + remote_url: nil, other_attrs: {} ) @f = form @@ -21,13 +22,15 @@ class SearchableDropdownComponent < ViewComponent::Base @placeholder_value = placeholder_value @include_blank = include_blank @aria_label = aria_label + @multiple = multiple + @remote_url = remote_url @other_attrs = other_attrs end private attr_reader :f, :name, :options, :selected_option, :placeholder_value, :include_blank, - :aria_label, :other_attrs + :aria_label, :multiple, :remote_url, :other_attrs def classes "fullwidth #{'no-input' if remove_search_plugin?}" @@ -36,11 +39,31 @@ class SearchableDropdownComponent < ViewComponent::Base def data { controller: "tom-select", - 'tom-select-placeholder-value': placeholder_value - }.merge(remove_search_plugin? ? REMOVED_SEARCH_PLUGIN : {}) + 'tom-select-placeholder-value': placeholder_value, + 'tom-select-options-value': tom_select_options_value, + 'tom-select-remote-url-value': remote_url, + } + end + + def tom_select_options_value + plugins = remove_search_plugin? ? [] : ['dropdown_input'] + multiple ? plugins << 'remove_button' : plugins + + { + plugins:, + maxItems: multiple ? nil : 1, + } + end + + def uses_form_builder? + f.present? end def remove_search_plugin? - @remove_search_plugin ||= options.count < MINIMUM_OPTIONS_FOR_SEARCH_FIELD + # Remove the search plugin when: + # - the select is multiple (it already includes a search field), or + # - there is no remote URL and the options are below the search threshold + @remove_search_plugin ||= multiple || + (@remote_url.nil? && options.count < MINIMUM_OPTIONS_FOR_SEARCH_FIELD) end end diff --git a/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml b/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml index 14d8969348..85529d4c89 100644 --- a/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml +++ b/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml @@ -1 +1,4 @@ -= f.select name, options_for_select(options, selected_option), { include_blank: }, class: classes, data:, 'aria-label': aria_label, **other_attrs +- if uses_form_builder? + = f.select name, options, { selected: selected_option, include_blank:, multiple: }, class: classes, data:, 'aria-label': aria_label, **other_attrs +- else + = select_tag name, options_for_select(options, selected_option), include_blank: include_blank, multiple: multiple, class: classes, data: data, 'aria-label': aria_label, **other_attrs diff --git a/app/controllers/concerns/reports/ajax_search.rb b/app/controllers/concerns/reports/ajax_search.rb index dc397c84e4..7194dc77a7 100644 --- a/app/controllers/concerns/reports/ajax_search.rb +++ b/app/controllers/concerns/reports/ajax_search.rb @@ -87,7 +87,7 @@ module Reports end def format_results(items) - items.map { |name, id| { id: id, text: name } } + items.map { |label, value| { value:, label: } } end def frontend_data diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml index 6939f28eb7..1001886995 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml @@ -2,24 +2,49 @@ .row .alpha.two.columns= label_tag nil, t(:report_hubs) .omega.fourteen.columns - = f.select(:distributor_id_in, [], {selected: params.dig(:q, :distributor_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_distributors_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :distributor_id_in, + options: [], + selected_option: params.dig(:q, :distributor_id_in), + multiple: true, + remote_url: admin_search_distributors_reports_url)) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) .omega.fourteen.columns - = f.select(:order_cycle_id_in, [], {selected: params.dig(:q, :order_cycle_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_cycles_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :order_cycle_id_in, + options: [], + selected_option: params.dig(:q, :order_cycle_id_in), + multiple: true, + remote_url: admin_search_order_cycles_reports_url)) .row .alpha.two.columns= label_tag nil, t(:fee_name) .omega.fourteen.columns - = f.select(:enterprise_fee_id_in, [], {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fees_reports_url(search_url_query)}}) + = render(SearchableDropdownComponent.new(form: f, + name: :enterprise_fee_id_in, + options: [], + selected_option: params.dig(:q, :enterprise_fee_id_in), + multiple: true, + remote_url: admin_search_enterprise_fees_reports_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:fee_owner) .omega.fourteen.columns - = f.select(:enterprise_fee_owner_id_in, [], {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fee_owners_reports_url(search_url_query)}}) + = render(SearchableDropdownComponent.new(form: f, + name: :enterprise_fee_owner_id_in, + options: [], + selected_option: params.dig(:q, :enterprise_fee_owner_id_in), + multiple: true, + remote_url: admin_search_enterprise_fee_owners_reports_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:report_customers) .omega.fourteen.columns - = f.select(:customer_id_in, [], {selected: params.dig(:q, :customer_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_customers_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :customer_id_in, + options: [], + selected_option: params.dig(:q, :customer_id_in), + multiple: true, + remote_url: admin_search_order_customers_reports_url)) diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml index ef0b54245c..c71e92ae58 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml @@ -2,27 +2,56 @@ .row .alpha.two.columns= label_tag nil, t(:report_hubs) .omega.fourteen.columns - = f.select(:distributor_id_in, [], {selected: params.dig(:q, :distributor_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_distributors_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :distributor_id_in, + options: [], + selected_option: params.dig(:q, :distributor_id_in), + multiple: true, + remote_url: admin_search_distributors_reports_url)) .row .alpha.two.columns= label_tag nil, t(:report_producers) .omega.fourteen.columns - = select_tag(:supplier_id_in, [], {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_suppliers_reports_url}}) + = render(SearchableDropdownComponent.new(name: :supplier_id_in, + options: [], + selected_option: params.dig(:supplier_id_in), + multiple: true, + remote_url: admin_search_suppliers_reports_url)) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) .omega.fourteen.columns - = f.select(:order_cycle_id_in, [], {selected: params.dig(:q, :order_cycle_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_cycles_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :order_cycle_id_in, + options: [], + selected_option: params.dig(:q, :order_cycle_id_in), + multiple: true, + remote_url: admin_search_order_cycles_reports_url)) .row .alpha.two.columns= label_tag nil, t(:fee_name) .omega.fourteen.columns - = f.select(:enterprise_fee_id_in, [], {selected: params.dig(:q, :enterprise_fee_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fees_reports_url(search_url_query)}}) + = render(SearchableDropdownComponent.new(form: f, + name: :enterprise_fee_id_in, + options: [], + selected_option: params.dig(:q, :enterprise_fee_id_in), + multiple: true, + remote_url: admin_search_enterprise_fees_reports_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:fee_owner) .omega.fourteen.columns - = f.select(:enterprise_fee_owner_id_in, [], {selected: params.dig(:q, :enterprise_fee_owner_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_enterprise_fee_owners_reports_url(search_url_query)}}) + = render(SearchableDropdownComponent.new(form: f, + name: :enterprise_fee_owner_id_in, + options: [], + selected_option: params.dig(:q, :enterprise_fee_owner_id_in), + multiple: true, + remote_url: admin_search_enterprise_fee_owners_reports_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:report_customers) .omega.fourteen.columns - = f.select(:customer_id_in, [], {selected: params.dig(:q, :customer_id_in)}, {class: "fullwidth", multiple: true, data: {controller: "select2-ajax", select2_ajax_url_value: admin_search_order_customers_reports_url}}) + = render(SearchableDropdownComponent.new(form: f, + name: :customer_id_in, + options: [], + selected_option: params.dig(:q, :customer_id_in), + multiple: true, + remote_url: admin_search_order_customers_reports_url)) diff --git a/app/webpacker/controllers/select2_ajax_controller.js b/app/webpacker/controllers/select2_ajax_controller.js deleted file mode 100644 index 24735406e0..0000000000 --- a/app/webpacker/controllers/select2_ajax_controller.js +++ /dev/null @@ -1,105 +0,0 @@ -import { Controller } from "stimulus"; - -export default class extends Controller { - static values = { - url: String, - }; - - connect() { - if (typeof $ === "undefined" || typeof $.fn.select2 === "undefined") { - console.error("Select2 AJAX Controller: jQuery or Select2 not loaded"); - return; - } - - const ajaxUrl = this.urlValue; - if (!ajaxUrl) return; - - const selectName = this.element.name; - const selectId = this.element.id; - const isMultiple = this.element.multiple; - - const container = document.createElement("div"); - container.dataset.select2HiddenContainer = "true"; - - this.element.replaceWith(container); - - // select2 methods are accessible via jQuery - // Plus, ajax calls with multi-select require a hidden input in select2 - const $select2Input = $(''); - $select2Input.attr("id", selectId); - container.appendChild($select2Input[0]); - - // IN-MEMORY cache to avoid repeated ajax calls for same query/page - const ajaxCache = {}; - - const select2Options = { - ajax: { - url: ajaxUrl, - dataType: "json", - quietMillis: 300, - data: function (term, page) { - return { - q: term || "", - page: page || 1, - }; - }, - transport: function (params) { - const term = params.data.q || ""; - const page = params.data.page || 1; - const cacheKey = `${term}::${page}`; - - if (ajaxCache[cacheKey]) { - params.success(ajaxCache[cacheKey]); - return; - } - - const request = $.ajax(params); - - request.then((data) => { - ajaxCache[cacheKey] = data; - params.success(data); - }); - - return request; - }, - results: function (data, _page) { - return { - results: data.results || [], - more: (data.pagination && data.pagination.more) || false, - }; - }, - }, - allowClear: true, - minimumInputLength: 0, - multiple: isMultiple, - width: "100%", - formatResult: (item) => item.text, - formatSelection: (item) => item.text, - }; - - // Initialize select2 with ajax options on hidden input - $select2Input.select2(select2Options); - - // Rails-style array submission requires multiple hidden inputs with same name - const syncHiddenInputs = (values) => { - // remove old inputs - container.querySelectorAll(`input[name="${selectName}"]`).forEach((e) => e.remove()); - - values.forEach((value) => { - const input = document.createElement("input"); - input.type = "hidden"; - input.name = selectName; - input.value = value; - container.appendChild(input); - }); - }; - - // On change → rebuild hidden inputs to submit filter values - $select2Input.on("change", () => { - const valuesString = $select2Input.val() || ""; - const values = valuesString.split(",") || []; - - syncHiddenInputs(Array.isArray(values) ? values : [values]); - }); - } -} diff --git a/app/webpacker/controllers/tom_select_controller.js b/app/webpacker/controllers/tom_select_controller.js index d1d3ade58a..81651f038b 100644 --- a/app/webpacker/controllers/tom_select_controller.js +++ b/app/webpacker/controllers/tom_select_controller.js @@ -2,10 +2,14 @@ import { Controller } from "stimulus"; import TomSelect from "tom-select/dist/esm/tom-select.complete"; export default class extends Controller { - static values = { options: Object, placeholder: String }; + static values = { + options: Object, + placeholder: String, + remoteUrl: String, + }; connect(options = {}) { - this.control = new TomSelect(this.element, { + let tomSelectOptions = { maxItems: 1, maxOptions: null, plugins: ["dropdown_input"], @@ -16,7 +20,13 @@ export default class extends Controller { }, ...this.optionsValue, ...options, - }); + }; + + if (this.remoteUrlValue) { + this.#addRemoteOptions(tomSelectOptions); + } + + this.control = new TomSelect(this.element, tomSelectOptions); } disconnect() { @@ -29,4 +39,144 @@ export default class extends Controller { const optionsArray = [...this.element.options]; return optionsArray.find((option) => [null, ""].includes(option.value))?.text; } + + #addRemoteOptions(options) { + // --- Pagination & request state --- + this.page = 1; + this.hasMore = true; + this.loading = false; + this.lastQuery = ""; + this.scrollAttached = false; + + const buildUrl = (query) => { + const url = new URL(this.remoteUrlValue, window.location.origin); + url.searchParams.set("q", query); + url.searchParams.set("page", this.page); + return url; + }; + + /** + * Shared remote fetch handler. + * Owns: + * - request lifecycle + * - pagination state + * - loading UI when appending + */ + const fetchOptions = ({ query, append = false, callback }) => { + if (this.loading || !this.hasMore) { + callback?.(); + return; + } + + this.loading = true; + + const dropdown = this.control?.dropdown_content; + const previousScrollTop = dropdown?.scrollTop; + let loader; + + /** + * When appending (infinite scroll), TomSelect does NOT + * manage loading UI automatically — we must do it manually. + */ + if (append && dropdown) { + loader = this.control.render("loading"); + dropdown.appendChild(loader); + this.control.wrapper.classList.add(this.control.settings.loadingClass); + } + + fetch(buildUrl(query)) + .then((response) => response.json()) + .then((json) => { + /** + * Expected API shape: + * { + * results: [{ value, label }], + * pagination: { more: boolean } + * } + */ + this.hasMore = Boolean(json.pagination?.more); + this.page += 1; + + const results = json.results || []; + + if (append && dropdown) { + this.control.addOptions(results); + this.control.refreshOptions(false); + /** + * Preserve scroll position so newly appended + * options don’t cause visual jumping. + */ + requestAnimationFrame(() => { + dropdown.scrollTop = previousScrollTop; + }); + } else { + callback?.(results); + } + }) + .catch(() => { + callback?.(); + }) + .finally(() => { + this.loading = false; + + if (append && loader) { + this.control.wrapper.classList.remove(this.control.settings.loadingClass); + loader.remove(); + } + }); + }; + + options.load = function (query, callback) { + fetchOptions({ query, callback }); + }.bind(this); + + options.onType = function (query) { + if (query === this.lastQuery) return; + + this.lastQuery = query; + this.page = 1; + this.hasMore = true; + }.bind(this); + + options.onDropdownOpen = function () { + if (this.scrollAttached) return; + this.scrollAttached = true; + + const dropdown = this.control.dropdown_content; + + dropdown.addEventListener( + "scroll", + function () { + const nearBottom = + dropdown.scrollTop + dropdown.clientHeight >= dropdown.scrollHeight - 20; + + if (nearBottom) { + this.#fetchNextPage(); + } + }.bind(this), + ); + }.bind(this); + + options.onFocus = function () { + if (this.loading) return; + + this.lastQuery = ""; + this.control.load("", () => {}); + }.bind(this); + + options.valueField = "value"; + options.labelField = "label"; + options.searchField = "label"; + + this._fetchOptions = fetchOptions; + } + + #fetchNextPage() { + if (this.loading || !this.hasMore) return; + + this._fetchOptions({ + query: this.lastQuery, + append: true, + }); + } } diff --git a/jest.config.js b/jest.config.js index df6f89cec9..2e451b9051 100644 --- a/jest.config.js +++ b/jest.config.js @@ -179,7 +179,7 @@ module.exports = { // transform: { "\\.[jt]sx?$": "babel-jest" }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: ["/node_modules/(?!(stimulus.+)/)"], + transformIgnorePatterns: ["/node_modules/(?!(stimulus.+|tom-select)/)"], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb index 2f6404cba6..14d7a53463 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/controllers/admin/reports_controller_spec.rb @@ -406,27 +406,9 @@ RSpec.describe Admin::ReportsController do expect(response).to have_http_status(:ok) json_response = response.parsed_body - names = json_response["results"].pluck("text") + names = json_response["results"].pluck("label") expect(names).to eq(['Admin Fee', 'Delivery Fee']) end - - it "caches and works with different report types" do - spree_get( - :search_enterprise_fees, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - first_response = response.parsed_body - - spree_get( - :search_enterprise_fees, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - second_response = response.parsed_body - - expect(first_response).to eq(second_response) - end end describe "#search_enterprise_fee_owners" do @@ -443,27 +425,9 @@ RSpec.describe Admin::ReportsController do expect(response).to have_http_status(:ok) json_response = response.parsed_body - names = json_response["results"].pluck("text") + names = json_response["results"].pluck("label") expect(names).to eq(['Alpha Market', 'Zebra Farm']) end - - it "caches results" do - spree_get( - :search_enterprise_fee_owners, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - first_response = response.parsed_body - - spree_get( - :search_enterprise_fee_owners, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - second_response = response.parsed_body - - expect(first_response).to eq(second_response) - end end describe "#search_order_customers" do @@ -481,7 +445,7 @@ RSpec.describe Admin::ReportsController do ) json_response = response.parsed_body - expect(json_response["results"].pluck("text")).to eq(["alice@example.com"]) + expect(json_response["results"].pluck("label")).to eq(["alice@example.com"]) end end @@ -498,7 +462,7 @@ RSpec.describe Admin::ReportsController do ) json_response = response.parsed_body - expect(json_response["results"].pluck("text")).to eq(["Winter Market"]) + expect(json_response["results"].pluck("label")).to eq(["Winter Market"]) end end @@ -515,7 +479,7 @@ RSpec.describe Admin::ReportsController do ) json_response = response.parsed_body - expect(json_response["results"].pluck("text")).to eq(["Alpha Farm"]) + expect(json_response["results"].pluck("label")).to eq(["Alpha Farm"]) end end end diff --git a/spec/javascripts/stimulus/select2_ajax_controller_test.js b/spec/javascripts/stimulus/select2_ajax_controller_test.js deleted file mode 100644 index 3b1d449a7a..0000000000 --- a/spec/javascripts/stimulus/select2_ajax_controller_test.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * @jest-environment jsdom - */ - -import { Application } from "stimulus"; -import select2_ajax_controller from "../../../app/webpacker/controllers/select2_ajax_controller.js"; - -describe("Select2AjaxController", () => { - let select2InitOptions = null; - let application; - - beforeAll(() => { - application = Application.start(); - application.register("select2-ajax", select2_ajax_controller); - }); - - beforeEach(() => { - select2InitOptions = null; - - // Mock jQuery and select2 - const mockVal = jest.fn(function (value) { - if (value !== undefined) { - this._value = value; - return this; - } - return this._value || ""; - }); - - const mockOn = jest.fn().mockReturnThis(); - - const mockSelect2 = jest.fn(function (options) { - if (typeof options === "string" && options === "destroy") { - return this; - } - select2InitOptions = options; - return this; - }); - - const jQueryMock = jest.fn((selector) => { - let element; - if (typeof selector === "string" && selector.startsWith(" - - - `; - }); - - afterEach(() => { - document.body.innerHTML = ""; - delete global.$; - }); - - describe("#connect", () => { - it("initializes select2 with correct AJAX URL", () => { - expect(select2InitOptions).not.toBeNull(); - expect(select2InitOptions.ajax.url).toBe("/api/search"); - }); - - it("configures select2 with correct options", () => { - expect(select2InitOptions.ajax.dataType).toBe("json"); - expect(select2InitOptions.ajax.quietMillis).toBe(300); - expect(select2InitOptions.allowClear).toBe(true); - expect(select2InitOptions.minimumInputLength).toBe(0); - expect(select2InitOptions.width).toBe("100%"); - }); - - it("configures AJAX data function", () => { - const dataFunc = select2InitOptions.ajax.data; - const result = dataFunc("search term", 2); - - expect(result).toEqual({ - q: "search term", - page: 2, - }); - }); - - it("handles empty search term", () => { - const dataFunc = select2InitOptions.ajax.data; - const result = dataFunc(null, null); - - expect(result).toEqual({ - q: "", - page: 1, - }); - }); - - it("configures results function with pagination", () => { - const resultsFunc = select2InitOptions.ajax.results; - const mockData = { - results: [{ id: 1, text: "Item 1" }], - pagination: { more: true }, - }; - - const result = resultsFunc(mockData, 1); - - expect(result).toEqual({ - results: mockData.results, - more: true, - }); - }); - - it("handles missing pagination", () => { - const resultsFunc = select2InitOptions.ajax.results; - const mockData = { - results: [{ id: 1, text: "Item 1" }], - }; - - const result = resultsFunc(mockData, 1); - - expect(result).toEqual({ - results: mockData.results, - more: false, - }); - }); - - it("configures format functions", () => { - const item = { id: 1, text: "Test Item" }; - - expect(select2InitOptions.formatResult(item)).toBe("Test Item"); - expect(select2InitOptions.formatSelection(item)).toBe("Test Item"); - }); - }); -}); diff --git a/spec/javascripts/stimulus/tom_select_controller_test.js b/spec/javascripts/stimulus/tom_select_controller_test.js new file mode 100644 index 0000000000..f53bae3ff7 --- /dev/null +++ b/spec/javascripts/stimulus/tom_select_controller_test.js @@ -0,0 +1,318 @@ +/** + * @jest-environment jsdom + */ + +import { Application } from "stimulus"; +import tom_select_controller from "../../../app/webpacker/controllers/tom_select_controller.js"; + +describe("TomSelectController", () => { + let application; + + beforeAll(() => { + application = Application.start(); + application.register("tom-select", tom_select_controller); + }); + + beforeEach(() => { + global.requestAnimationFrame = jest.fn((cb) => { + cb(); + return 1; + }); + + // Mock fetch for remote data tests + global.fetch = jest.fn(); + }); + + afterEach(() => { + document.body.innerHTML = ""; + jest.clearAllMocks(); + }); + + describe("basic initialization", () => { + it("initializes TomSelect with default options and settings", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.getElementById("test-select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.control).toBeDefined(); + expect(controller.control.settings.maxItems).toBe(1); + expect(controller.control.settings.maxOptions).toBeNull(); + expect(controller.control.settings.allowEmptyOption).toBe(true); + expect(controller.control.settings.placeholder).toBe("Choose an option"); + expect(controller.control.settings.plugins).toContain("dropdown_input"); + expect(controller.control.settings.onItemAdd).toBeDefined(); + }); + + it("uses empty option text as placeholder when no placeholder value provided", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.control.settings.placeholder).toBe("-- Default Placeholder --"); + }); + + it("accepts custom options via data attribute", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.control.settings.maxItems).toBe(3); + expect(controller.control.settings.create).toBe(true); + }); + + it("cleans up on disconnect", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + const destroySpy = jest.spyOn(controller.control, "destroy"); + controller.disconnect(); + + expect(destroySpy).toHaveBeenCalled(); + }); + }); + + describe("remote data loading (#addRemoteOptions)", () => { + it("configures remote loading with proper field and pagination setup", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.page).toBe(1); + expect(controller.hasMore).toBe(true); + expect(controller.loading).toBe(false); + expect(controller.scrollAttached).toBe(false); + expect(controller.control.settings.valueField).toBe("value"); + expect(controller.control.settings.labelField).toBe("label"); + expect(controller.control.settings.searchField).toBe("label"); + }); + + it("resets pagination on new query but preserves on same query", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + + controller.page = 5; + controller.hasMore = false; + controller.lastQuery = "old"; + + // Same query preserves state + controller.control.settings.onType("old"); + expect(controller.page).toBe(5); + + // New query resets state + controller.control.settings.onType("new"); + expect(controller.page).toBe(1); + expect(controller.hasMore).toBe(true); + expect(controller.lastQuery).toBe("new"); + }); + + it("loads initial data on focus when not loading", async () => { + global.fetch.mockResolvedValue({ + json: jest.fn().mockResolvedValue({ + results: [], + pagination: { more: false }, + }), + }); + + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + + const loadSpy = jest.spyOn(controller.control, "load"); + controller.control.settings.onFocus(); + + expect(loadSpy).toHaveBeenCalledWith("", expect.any(Function)); + expect(controller.lastQuery).toBe(""); + + // Does not load when already loading + controller.loading = true; + loadSpy.mockClear(); + controller.control.settings.onFocus(); + expect(loadSpy).not.toHaveBeenCalled(); + }); + + it("attaches scroll listener once on dropdown open", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.scrollAttached).toBe(false); + + const addEventListenerSpy = jest.spyOn( + controller.control.dropdown_content, + "addEventListener", + ); + + controller.control.settings.onDropdownOpen(); + expect(controller.scrollAttached).toBe(true); + expect(addEventListenerSpy).toHaveBeenCalledWith("scroll", expect.any(Function)); + + // Does not attach multiple times + controller.control.settings.onDropdownOpen(); + expect(addEventListenerSpy).toHaveBeenCalledTimes(1); + }); + }); + + describe("infinite scroll (#fetchNextPage)", () => { + it("initializes pagination infrastructure", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller._fetchOptions).toBeDefined(); + expect(typeof controller._fetchOptions).toBe("function"); + expect(controller.lastQuery).toBe(""); + expect(controller.control.settings.onDropdownOpen).toBeDefined(); + }); + + it("manages pagination state correctly", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + + // Initial state + expect(controller.page).toBe(1); + expect(controller.hasMore).toBe(true); + expect(controller.loading).toBe(false); + + // Can increment page + controller.page += 1; + expect(controller.page).toBe(2); + + // Can update hasMore flag + controller.hasMore = false; + expect(controller.hasMore).toBe(false); + + // Can track loading + controller.loading = true; + expect(controller.loading).toBe(true); + }); + + it("provides dropdown element access for scroll detection", async () => { + document.body.innerHTML = ` + + `; + + await new Promise((resolve) => setTimeout(resolve, 0)); + + const select = document.querySelector("select"); + const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + + expect(controller).not.toBeNull(); + expect(controller.control.dropdown_content).toBeDefined(); + + const dropdown = controller.control.dropdown_content; + expect(typeof dropdown.scrollTop).toBe("number"); + expect(typeof dropdown.clientHeight).toBe("number"); + expect(typeof dropdown.scrollHeight).toBe("number"); + }); + }); +}); From b58834b11f3d15e8cf2f3abe7a23402a9378a887 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 25 Jan 2026 19:13:43 +0500 Subject: [PATCH 138/270] Fix failing specs --- jest.config.js | 2 +- ...ry_fee_with_tax_report_by_producer_spec.rb | 26 +++++-------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/jest.config.js b/jest.config.js index 513257c467..2e451b9051 100644 --- a/jest.config.js +++ b/jest.config.js @@ -179,7 +179,7 @@ module.exports = { // transform: { "\\.[jt]sx?$": "babel-jest" }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: ["/node_modules/(?!(stimulus|tom-select)/)"], + transformIgnorePatterns: ["/node_modules/(?!(stimulus.+|tom-select)/)"], // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/spec/system/admin/reports/enterprise_summary_fees/enterprise_summary_fee_with_tax_report_by_producer_spec.rb b/spec/system/admin/reports/enterprise_summary_fees/enterprise_summary_fee_with_tax_report_by_producer_spec.rb index 002e0a7247..2218908fac 100644 --- a/spec/system/admin/reports/enterprise_summary_fees/enterprise_summary_fee_with_tax_report_by_producer_spec.rb +++ b/spec/system/admin/reports/enterprise_summary_fees/enterprise_summary_fee_with_tax_report_by_producer_spec.rb @@ -296,11 +296,8 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do end it "should filter by distributor and order cycle" do - page.find("#s2id_autogen1").click - find('li', text: distributor.name).click # selects Distributor - - page.find("#s2id_q_order_cycle_id_in").click - find('li', text: order_cycle.name).click + tomselect_multiselect distributor.name, from: 'q[distributor_id_in][]' + tomselect_multiselect order_cycle.name, from: 'q[order_cycle_id_in][]' run_report expect(page.find("table.report__table thead tr")).to have_content(table_header) @@ -455,9 +452,6 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do } context "filtering" do - let(:fee_name_selector){ "#s2id_q_enterprise_fee_id_in" } - let(:fee_owner_selector){ "#s2id_q_enterprise_fee_owner_id_in" } - let(:summary_row_after_filtering_by_fee_name){ [cost_of_produce1, "TOTAL", "120.0", "4.8", "124.8"].join(" ") } @@ -471,11 +465,8 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do end it "should filter by distributor and order cycle" do - page.find("#s2id_autogen1").click - find('li', text: distributor.name).click # selects Distributor - - page.find("#s2id_q_order_cycle_id_in").click - find('li', text: order_cycle3.name).click + tomselect_multiselect distributor.name, from: 'q[distributor_id_in][]' + tomselect_multiselect order_cycle3.name, from: 'q[order_cycle_id_in][]' run_report expect(page.find("table.report__table thead tr")).to have_content(table_header) @@ -504,8 +495,7 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do end it "should filter by producer" do - page.find("#s2id_supplier_id_in").click - find('li', text: supplier2.name).click + tomselect_multiselect supplier2.name, from: 'supplier_id_in[]' run_report expect(page.find("table.report__table thead tr")).to have_content(table_header) @@ -528,8 +518,7 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do end it "should filter by fee name" do - page.find(fee_name_selector).click - find('li', text: supplier_fees.name).click + tomselect_multiselect supplier_fees.name, from: 'q[enterprise_fee_id_in][]' run_report @@ -557,8 +546,7 @@ RSpec.describe "Enterprise Summary Fee with Tax Report By Producer" do end it "should filter by fee owner" do - page.find(fee_owner_selector).click - find('li', text: supplier.name).click + tomselect_multiselect supplier.name, from: 'q[enterprise_fee_owner_id_in][]' run_report expect(page.find("table.report__table thead tr")).to have_content(table_header) From 8cfab08f9e96509b0930a31d1392c3ee2d59aa3c Mon Sep 17 00:00:00 2001 From: Prikesh Savla Date: Sun, 11 Jan 2026 10:18:16 +0530 Subject: [PATCH 139/270] Refactor admin CSS: Promote v3 to canonical admin styles The Admin V3 styles are now the primary styles for the application. This change promotes the `admin_v3` directory to `admin` and archives the old styles. Changes: - Renamed `app/webpacker/css/admin_v3` to `app/webpacker/css/admin`. - Renamed the previous `app/webpacker/css/admin` to `app/webpacker/css/admin_legacy`. - Moved all files referenced by V3 styles from the legacy directory to the new `admin` directory. - Updated imports in `all.scss` to distinct local files instead of relative paths. - Cleaned up `admin_legacy` by removing files that are duplicates (by name or content) of the new admin styles. - Updated `admin-style-v3` pack to point to the new location. --- app/webpacker/css/admin/all.scss | 135 +++++++++++++++++ .../components/actions.scss | 0 .../components/buttons.scss | 0 .../components/date-picker.scss | 0 .../components/dropdown.scss | 0 .../components/messages.scss | 0 .../components/navigation.scss | 0 .../components/pagination.scss | 0 .../components/select2.scss | 0 .../components/sidebar-item.scss | 0 .../components/sidebar.scss | 0 .../components/spinner.scss | 0 .../components/tom_select.scss | 0 .../dashboard/dashboard_item.scss | 0 app/webpacker/css/admin/globals/palette.scss | 56 ++++--- .../globals/variables.scss | 0 .../css/{admin_v3 => admin}/mixins.scss | 0 .../pages/_unit_popout.scss | 0 .../pages/change_type_form.scss | 0 .../pages/dashboard-single-ent.scss | 0 .../pages/dfc_product_imports.scss | 0 .../pages/edit_variant.scss | 0 .../pages/enterprise_index_panels.scss | 0 .../pages/product_import.scss | 0 .../pages/product_preview.scss | 0 .../plugins/flatpickr-customization.scss | 0 .../{admin_v3 => admin}/plugins/powertip.scss | 0 app/webpacker/css/admin/products_v3.scss | 10 +- .../{admin_v3 => admin}/sections/orders.scss | 0 .../css/{admin_v3 => admin}/shared/forms.scss | 0 .../css/{admin_v3 => admin}/shared/icons.scss | 0 .../{admin_v3 => admin}/shared/layout.scss | 0 .../shared/question-mark-icon.scss | 0 .../{admin_v3 => admin}/shared/tables.scss | 0 .../shared/typography.scss | 0 .../terms_of_service_banner.scss | 0 .../css/{admin_v3 => admin}/variables.scss | 0 .../change_type_form.scss | 0 .../dashboard-single-ent.scss | 0 .../dashboard_item.scss | 0 .../css/{admin => admin_legacy}/dropdown.scss | 0 .../enterprise_index_panels.scss | 0 .../plugins/select2.scss | 0 .../product_import.scss | 0 .../css/{admin => admin_legacy}/select2.scss | 0 .../{admin => admin_legacy}/sidebar-item.scss | 0 app/webpacker/css/admin_v3/all.scss | 137 ------------------ .../css/admin_v3/globals/palette.scss | 38 ----- app/webpacker/packs/admin-style-v3.scss | 4 +- 49 files changed, 183 insertions(+), 197 deletions(-) create mode 100644 app/webpacker/css/admin/all.scss rename app/webpacker/css/{admin_v3 => admin}/components/actions.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/buttons.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/date-picker.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/dropdown.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/messages.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/navigation.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/pagination.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/select2.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/sidebar-item.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/sidebar.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/spinner.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/components/tom_select.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/dashboard/dashboard_item.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/globals/variables.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/mixins.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/_unit_popout.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/change_type_form.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/dashboard-single-ent.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/dfc_product_imports.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/edit_variant.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/enterprise_index_panels.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/product_import.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/pages/product_preview.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/plugins/flatpickr-customization.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/plugins/powertip.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/sections/orders.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/forms.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/icons.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/layout.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/question-mark-icon.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/tables.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/shared/typography.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/terms_of_service_banner.scss (100%) rename app/webpacker/css/{admin_v3 => admin}/variables.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/change_type_form.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/dashboard-single-ent.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/dashboard_item.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/dropdown.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/enterprise_index_panels.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/plugins/select2.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/product_import.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/select2.scss (100%) rename app/webpacker/css/{admin => admin_legacy}/sidebar-item.scss (100%) delete mode 100644 app/webpacker/css/admin_v3/all.scss delete mode 100644 app/webpacker/css/admin_v3/globals/palette.scss diff --git a/app/webpacker/css/admin/all.scss b/app/webpacker/css/admin/all.scss new file mode 100644 index 0000000000..24bd84b9b3 --- /dev/null +++ b/app/webpacker/css/admin/all.scss @@ -0,0 +1,135 @@ +// Admin v3 styles +// While in feature-toggle, we inherit all files from old admin design. +// Individual files may be copied in order to replace the old files. + +@import "assets/stylesheets/normalize"; +@import "assets/stylesheets/responsive-tables"; +@import "assets/stylesheets/jquery.powertip"; +@import "jquery-ui/themes/base/core"; +@import "jquery-ui/themes/base/button"; +@import "jquery-ui/themes/base/resizable"; +@import "assets/stylesheets/jquery-ui-theme"; +@import "jquery-ui/themes/base/dialog"; +@import "../shared/ng-tags-input.min"; +@import "assets/stylesheets/select2"; +@import "flatpickr/dist/flatpickr"; +@import "flatpickr/dist/themes/material_blue"; +@import "shortcut-buttons-flatpickr/dist/themes/light"; + +@import "globals/functions"; +@import "globals/palette"; // admin_v3 +@import "globals/variables"; // admin_v3 +@import "globals/mixins"; +@import "mixins"; // admin_v3 + +@import "plugins/font-awesome"; + +@import "../shared/variables/layout"; +@import "../shared/variables/variables"; +@import "../shared/utilities"; +@import "shared/typography"; // admin_v3 +@import "shared/tables"; // admin_v3 +@import "shared/icons"; // admin_v3 +@import "shared/forms"; // admin_v3 +@import "shared/layout"; // admin_v3 +@import "shared/scroll_bar"; + +@import "../shared/trix"; + +@import "plugins/flatpickr-customization"; // admin_v3 +@import "plugins/powertip"; // admin_v3 + +@import "sections/orders"; // admin_v3 +@import "sections/products"; + +@import "hacks/mozilla"; +@import "hacks/opera"; +@import "hacks/ie"; + +@import "components/actions"; // admin_v3 +@import "components/alert-box"; +@import "components/alert_row"; +@import "components/buttons"; // admin_v3 +@import "components/date-picker"; // admin_v3 +@import "components/dialogs"; +@import "components/input"; +@import "components/jquery_dialog"; +@import "components/messages"; // admin_v3 +@import "components/navigation"; // admin_v3 +@import "components/ng-cloak"; +@import "components/page_actions"; +@import "components/pagination"; // admin_v3 +@import "components/per_page_controls"; +@import "components/product_autocomplete"; +@import "components/progress"; +@import "components/save_bar"; +@import "components/sidebar"; // admin_v3 +@import "components/simple_modal"; +@import "components/states"; +@import "components/stripe_connect_button"; +@import "components/subscriptions_states"; +@import "components/table-filter"; +@import "components/table_loading"; +@import "components/timepicker"; +@import "components/todo"; +@import "components/tooltip"; +@import "components/wizard_progress"; + +@import "pages/enterprise_form"; +@import "pages/subscription_form"; +@import "pages/subscription_line_items"; +@import "pages/subscription_review"; + +@import "advanced_settings"; +@import "alert"; +@import "animations"; +@import "pages/change_type_form"; // admin_v3 +@import "connected_apps"; +@import "customers"; +@import "dashboard/dashboard_item"; // admin_v3 +@import "pages/dashboard-single-ent"; // admin_v3 +@import "dialog"; +@import "disabled"; +@import "components/dropdown"; // admin_v3 +@import "pages/edit_variant"; // admin_v3 +@import "pages/enterprise_index_panels"; // admin_v3 +@import "enterprises"; +@import "filters_and_controls"; +@import "grid"; +@import "icons"; +@import "index_panel_buttons"; +@import "index_panels"; +@import "modals"; +@import "offsets"; +@import "openfoodnetwork"; +@import "order_cycles"; +@import "orders"; +@import "pages/product_import"; // admin_v3 +@import "products"; +@import "products_v3"; +@import "question-mark-tooltip"; +@import "relationships"; +@import "reports"; +@import "components/select2"; // admin_v3 +@import "components/sidebar-item"; // admin_v3 +@import "side_menu"; +@import "tables"; +@import "tag_rules"; +@import "terms_of_service_files"; +@import "validation"; +@import "variant_overrides"; +@import "welcome"; + +@import "shared/question-mark-icon"; +@import "~tom-select/src/scss/tom-select.default"; +@import "components/tom_select"; // admin_v3 + +@import "modal_component/modal_component"; +@import "vertical_ellipsis_menu_component/vertical_ellipsis_menu_component"; // admin_v3 and only V3 +@import "tag_list_input_component/tag_list_input_component"; +@import "trix"; + +@import "terms_of_service_banner"; // admin_v3 + +@import "pages/product_preview"; // admin_v3 +@import "pages/dfc_product_imports"; // admin_v3 \ No newline at end of file diff --git a/app/webpacker/css/admin_v3/components/actions.scss b/app/webpacker/css/admin/components/actions.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/actions.scss rename to app/webpacker/css/admin/components/actions.scss diff --git a/app/webpacker/css/admin_v3/components/buttons.scss b/app/webpacker/css/admin/components/buttons.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/buttons.scss rename to app/webpacker/css/admin/components/buttons.scss diff --git a/app/webpacker/css/admin_v3/components/date-picker.scss b/app/webpacker/css/admin/components/date-picker.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/date-picker.scss rename to app/webpacker/css/admin/components/date-picker.scss diff --git a/app/webpacker/css/admin_v3/components/dropdown.scss b/app/webpacker/css/admin/components/dropdown.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/dropdown.scss rename to app/webpacker/css/admin/components/dropdown.scss diff --git a/app/webpacker/css/admin_v3/components/messages.scss b/app/webpacker/css/admin/components/messages.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/messages.scss rename to app/webpacker/css/admin/components/messages.scss diff --git a/app/webpacker/css/admin_v3/components/navigation.scss b/app/webpacker/css/admin/components/navigation.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/navigation.scss rename to app/webpacker/css/admin/components/navigation.scss diff --git a/app/webpacker/css/admin_v3/components/pagination.scss b/app/webpacker/css/admin/components/pagination.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/pagination.scss rename to app/webpacker/css/admin/components/pagination.scss diff --git a/app/webpacker/css/admin_v3/components/select2.scss b/app/webpacker/css/admin/components/select2.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/select2.scss rename to app/webpacker/css/admin/components/select2.scss diff --git a/app/webpacker/css/admin_v3/components/sidebar-item.scss b/app/webpacker/css/admin/components/sidebar-item.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/sidebar-item.scss rename to app/webpacker/css/admin/components/sidebar-item.scss diff --git a/app/webpacker/css/admin_v3/components/sidebar.scss b/app/webpacker/css/admin/components/sidebar.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/sidebar.scss rename to app/webpacker/css/admin/components/sidebar.scss diff --git a/app/webpacker/css/admin_v3/components/spinner.scss b/app/webpacker/css/admin/components/spinner.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/spinner.scss rename to app/webpacker/css/admin/components/spinner.scss diff --git a/app/webpacker/css/admin_v3/components/tom_select.scss b/app/webpacker/css/admin/components/tom_select.scss similarity index 100% rename from app/webpacker/css/admin_v3/components/tom_select.scss rename to app/webpacker/css/admin/components/tom_select.scss diff --git a/app/webpacker/css/admin_v3/dashboard/dashboard_item.scss b/app/webpacker/css/admin/dashboard/dashboard_item.scss similarity index 100% rename from app/webpacker/css/admin_v3/dashboard/dashboard_item.scss rename to app/webpacker/css/admin/dashboard/dashboard_item.scss diff --git a/app/webpacker/css/admin/globals/palette.scss b/app/webpacker/css/admin/globals/palette.scss index 5a64d064f7..225b00b368 100644 --- a/app/webpacker/css/admin/globals/palette.scss +++ b/app/webpacker/css/admin/globals/palette.scss @@ -1,20 +1,38 @@ -// Basic color palette for admin -$spree-green: #9fc820; -$spree-blue: #5498da; +// Basic color palette for admin styles v3 +$white: #ffffff !default; // White +$green: #9fc820 !default; // Green +$teal: #008397 !default; // Teal (Allports) +$orient: #006878 !default; // Orient (Cerulean) +$dark-blue: #004e5b !default; // Dark Blue (Sherpa) +$pale-blue: #cee1f4; // Pale blue +$red: #c85136 !default; // Red/Orange (Mojo) +$bright-orange: #ffa92e; // Bright orange +$yellow: #ff9300 !default; // Yellow +$mystic: #d9e8eb !default; // Mystic +$lighter-grey: #f8f9fa !default; // Lighter grey +$light-grey: #eff1f2 !default; // Light grey (Porcelain) +$medium-light-grey: #babdbe !default; // Silver Sand +$medium-grey: #919191 !default; // Medium grey +$dark-grey: #2e3132 !default; // Dark Grey +$near-black: #191c1d !default; // Near-black (Shark) +$fair-pink: #ffefeb !default; // Fair Pink +$roof-terracotta: #b83b1f !default; // Roof Terracotta + +// Old colour variables for backwards compatibility +$spree-green: $green; +$spree-blue: $teal; $spree-light-blue: #eff5fc; -$pale-blue: #cee1f4; -$bright-orange: #ffa92e; -$medium-grey: #919191; -$light-grey: #ccc; - -$color-1: #ffffff !default; // White -$color-2: $spree-green !default; // Green -$color-3: $spree-blue !default; // Light Blue -$color-4: #6788a2 !default; // Dark Blue -$color-5: #c60f13 !default; // Red -$color-6: #ff9300 !default; // Yellow -$color-14: #f8f9fa !default; // Lighter grey - -$dark-grey: #333; -$light-grey: #ddd; -$near-black: #222; +$color-1: $white; +$color-2: $green; +$color-3: $teal; +$color-4: $dark-blue; +$color-5: $red; +$color-6: $yellow; +$color-7: $light-grey; +$color-8: $near-black; +$color-9: $dark-grey; +$color-10: $orient; +$color-11: $mystic; +$color-12: $fair-pink; +$color-13: $roof-terracotta; +$color-14: $lighter-grey; diff --git a/app/webpacker/css/admin_v3/globals/variables.scss b/app/webpacker/css/admin/globals/variables.scss similarity index 100% rename from app/webpacker/css/admin_v3/globals/variables.scss rename to app/webpacker/css/admin/globals/variables.scss diff --git a/app/webpacker/css/admin_v3/mixins.scss b/app/webpacker/css/admin/mixins.scss similarity index 100% rename from app/webpacker/css/admin_v3/mixins.scss rename to app/webpacker/css/admin/mixins.scss diff --git a/app/webpacker/css/admin_v3/pages/_unit_popout.scss b/app/webpacker/css/admin/pages/_unit_popout.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/_unit_popout.scss rename to app/webpacker/css/admin/pages/_unit_popout.scss diff --git a/app/webpacker/css/admin_v3/pages/change_type_form.scss b/app/webpacker/css/admin/pages/change_type_form.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/change_type_form.scss rename to app/webpacker/css/admin/pages/change_type_form.scss diff --git a/app/webpacker/css/admin_v3/pages/dashboard-single-ent.scss b/app/webpacker/css/admin/pages/dashboard-single-ent.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/dashboard-single-ent.scss rename to app/webpacker/css/admin/pages/dashboard-single-ent.scss diff --git a/app/webpacker/css/admin_v3/pages/dfc_product_imports.scss b/app/webpacker/css/admin/pages/dfc_product_imports.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/dfc_product_imports.scss rename to app/webpacker/css/admin/pages/dfc_product_imports.scss diff --git a/app/webpacker/css/admin_v3/pages/edit_variant.scss b/app/webpacker/css/admin/pages/edit_variant.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/edit_variant.scss rename to app/webpacker/css/admin/pages/edit_variant.scss diff --git a/app/webpacker/css/admin_v3/pages/enterprise_index_panels.scss b/app/webpacker/css/admin/pages/enterprise_index_panels.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/enterprise_index_panels.scss rename to app/webpacker/css/admin/pages/enterprise_index_panels.scss diff --git a/app/webpacker/css/admin_v3/pages/product_import.scss b/app/webpacker/css/admin/pages/product_import.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/product_import.scss rename to app/webpacker/css/admin/pages/product_import.scss diff --git a/app/webpacker/css/admin_v3/pages/product_preview.scss b/app/webpacker/css/admin/pages/product_preview.scss similarity index 100% rename from app/webpacker/css/admin_v3/pages/product_preview.scss rename to app/webpacker/css/admin/pages/product_preview.scss diff --git a/app/webpacker/css/admin_v3/plugins/flatpickr-customization.scss b/app/webpacker/css/admin/plugins/flatpickr-customization.scss similarity index 100% rename from app/webpacker/css/admin_v3/plugins/flatpickr-customization.scss rename to app/webpacker/css/admin/plugins/flatpickr-customization.scss diff --git a/app/webpacker/css/admin_v3/plugins/powertip.scss b/app/webpacker/css/admin/plugins/powertip.scss similarity index 100% rename from app/webpacker/css/admin_v3/plugins/powertip.scss rename to app/webpacker/css/admin/plugins/powertip.scss diff --git a/app/webpacker/css/admin/products_v3.scss b/app/webpacker/css/admin/products_v3.scss index 4dd6331775..7ea346638a 100644 --- a/app/webpacker/css/admin/products_v3.scss +++ b/app/webpacker/css/admin/products_v3.scss @@ -1,6 +1,6 @@ // Customisations for the new Bulk Edit Products page only // Scoped to containing div, because Turbo messes with body classes -@import "../admin_v3/pages/unit_popout"; +@import "pages/unit_popout"; #products_v3_page { #content > .row:first-child > .container:first-child { @@ -59,6 +59,7 @@ overflow: visible; background-color: white; } + .form-actions-wrapper2 { position: relative; // Stretch to cover table side borders @@ -157,6 +158,7 @@ tr:first-child td { border-top: 4px solid $color-tbl-bg; } + tr:last-child td { border-bottom: 1px solid $color-tbl-cell-shadow; } @@ -187,6 +189,7 @@ $columns: "image", "name", "sku", "unit_scale", "unit", "price", "on_hand", "producer", "category", "tax_category", "tags", "inherits_properties"; + @each $col in $columns { &.hide-#{$col} { .col-#{$col} { @@ -237,6 +240,7 @@ align-items: center; gap: 10px; } + .per-page { width: 9em; } @@ -286,6 +290,7 @@ .search-button { position: relative; + > input { padding-left: 30px; } @@ -295,6 +300,7 @@ // Blurred and non-clickable $disabled-blur: 1.5px; + .disabled-section { position: relative; @@ -346,6 +352,7 @@ from { transform: scaleY(1); } + to { transform: scaleY(0); } @@ -360,6 +367,7 @@ from { transform: scaleY(0); } + to { transform: scaleY(1); } diff --git a/app/webpacker/css/admin_v3/sections/orders.scss b/app/webpacker/css/admin/sections/orders.scss similarity index 100% rename from app/webpacker/css/admin_v3/sections/orders.scss rename to app/webpacker/css/admin/sections/orders.scss diff --git a/app/webpacker/css/admin_v3/shared/forms.scss b/app/webpacker/css/admin/shared/forms.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/forms.scss rename to app/webpacker/css/admin/shared/forms.scss diff --git a/app/webpacker/css/admin_v3/shared/icons.scss b/app/webpacker/css/admin/shared/icons.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/icons.scss rename to app/webpacker/css/admin/shared/icons.scss diff --git a/app/webpacker/css/admin_v3/shared/layout.scss b/app/webpacker/css/admin/shared/layout.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/layout.scss rename to app/webpacker/css/admin/shared/layout.scss diff --git a/app/webpacker/css/admin_v3/shared/question-mark-icon.scss b/app/webpacker/css/admin/shared/question-mark-icon.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/question-mark-icon.scss rename to app/webpacker/css/admin/shared/question-mark-icon.scss diff --git a/app/webpacker/css/admin_v3/shared/tables.scss b/app/webpacker/css/admin/shared/tables.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/tables.scss rename to app/webpacker/css/admin/shared/tables.scss diff --git a/app/webpacker/css/admin_v3/shared/typography.scss b/app/webpacker/css/admin/shared/typography.scss similarity index 100% rename from app/webpacker/css/admin_v3/shared/typography.scss rename to app/webpacker/css/admin/shared/typography.scss diff --git a/app/webpacker/css/admin_v3/terms_of_service_banner.scss b/app/webpacker/css/admin/terms_of_service_banner.scss similarity index 100% rename from app/webpacker/css/admin_v3/terms_of_service_banner.scss rename to app/webpacker/css/admin/terms_of_service_banner.scss diff --git a/app/webpacker/css/admin_v3/variables.scss b/app/webpacker/css/admin/variables.scss similarity index 100% rename from app/webpacker/css/admin_v3/variables.scss rename to app/webpacker/css/admin/variables.scss diff --git a/app/webpacker/css/admin/change_type_form.scss b/app/webpacker/css/admin_legacy/change_type_form.scss similarity index 100% rename from app/webpacker/css/admin/change_type_form.scss rename to app/webpacker/css/admin_legacy/change_type_form.scss diff --git a/app/webpacker/css/admin/dashboard-single-ent.scss b/app/webpacker/css/admin_legacy/dashboard-single-ent.scss similarity index 100% rename from app/webpacker/css/admin/dashboard-single-ent.scss rename to app/webpacker/css/admin_legacy/dashboard-single-ent.scss diff --git a/app/webpacker/css/admin/dashboard_item.scss b/app/webpacker/css/admin_legacy/dashboard_item.scss similarity index 100% rename from app/webpacker/css/admin/dashboard_item.scss rename to app/webpacker/css/admin_legacy/dashboard_item.scss diff --git a/app/webpacker/css/admin/dropdown.scss b/app/webpacker/css/admin_legacy/dropdown.scss similarity index 100% rename from app/webpacker/css/admin/dropdown.scss rename to app/webpacker/css/admin_legacy/dropdown.scss diff --git a/app/webpacker/css/admin/enterprise_index_panels.scss b/app/webpacker/css/admin_legacy/enterprise_index_panels.scss similarity index 100% rename from app/webpacker/css/admin/enterprise_index_panels.scss rename to app/webpacker/css/admin_legacy/enterprise_index_panels.scss diff --git a/app/webpacker/css/admin/plugins/select2.scss b/app/webpacker/css/admin_legacy/plugins/select2.scss similarity index 100% rename from app/webpacker/css/admin/plugins/select2.scss rename to app/webpacker/css/admin_legacy/plugins/select2.scss diff --git a/app/webpacker/css/admin/product_import.scss b/app/webpacker/css/admin_legacy/product_import.scss similarity index 100% rename from app/webpacker/css/admin/product_import.scss rename to app/webpacker/css/admin_legacy/product_import.scss diff --git a/app/webpacker/css/admin/select2.scss b/app/webpacker/css/admin_legacy/select2.scss similarity index 100% rename from app/webpacker/css/admin/select2.scss rename to app/webpacker/css/admin_legacy/select2.scss diff --git a/app/webpacker/css/admin/sidebar-item.scss b/app/webpacker/css/admin_legacy/sidebar-item.scss similarity index 100% rename from app/webpacker/css/admin/sidebar-item.scss rename to app/webpacker/css/admin_legacy/sidebar-item.scss diff --git a/app/webpacker/css/admin_v3/all.scss b/app/webpacker/css/admin_v3/all.scss deleted file mode 100644 index 6e0d8da2aa..0000000000 --- a/app/webpacker/css/admin_v3/all.scss +++ /dev/null @@ -1,137 +0,0 @@ -// Admin v3 styles -// While in feature-toggle, we inherit all files from old admin design. -// Individual files may be copied in order to replace the old files. - -@import "assets/stylesheets/normalize"; -@import "assets/stylesheets/responsive-tables"; -@import "assets/stylesheets/jquery.powertip"; -@import "jquery-ui/themes/base/core"; -@import "jquery-ui/themes/base/button"; -@import "jquery-ui/themes/base/resizable"; -@import "assets/stylesheets/jquery-ui-theme"; -@import "jquery-ui/themes/base/dialog"; -@import "../shared/ng-tags-input.min"; -@import "assets/stylesheets/select2"; -@import "flatpickr/dist/flatpickr"; -@import "flatpickr/dist/themes/material_blue"; -@import "shortcut-buttons-flatpickr/dist/themes/light"; - -@import "../admin/globals/functions"; -@import "globals/palette"; // admin_v3 -@import "globals/variables"; // admin_v3 -@import "../admin/globals/mixins"; -@import "mixins"; // admin_v3 - -@import "../admin/plugins/font-awesome"; - -@import "../shared/variables/layout"; -@import "../shared/variables/variables"; -@import "../shared/utilities"; -@import "shared/typography"; // admin_v3 -@import "shared/tables"; // admin_v3 -@import "shared/icons"; // admin_v3 -@import "shared/forms"; // admin_v3 -@import "shared/layout"; // admin_v3 -@import "../admin/shared/scroll_bar"; - -@import "../shared/trix"; - -@import "plugins/flatpickr-customization"; // admin_v3 -@import "plugins/powertip"; // admin_v3 - -@import "sections/orders"; // admin_v3 -@import "../admin/sections/products"; - -@import "../admin/hacks/mozilla"; -@import "../admin/hacks/opera"; -@import "../admin/hacks/ie"; - -@import "components/actions"; // admin_v3 -@import "../admin/components/alert-box"; -@import "../admin/components/alert_row"; -@import "components/buttons"; // admin_v3 -@import "components/date-picker"; // admin_v3 -@import "../admin/components/dialogs"; -@import "../admin/components/input"; -@import "../admin/components/jquery_dialog"; -@import "components/messages"; // admin_v3 -@import "components/navigation"; // admin_v3 -@import "../admin/components/ng-cloak"; -@import "../admin/components/page_actions"; -@import "components/pagination"; // admin_v3 -@import "../admin/components/per_page_controls"; -@import "../admin/components/product_autocomplete"; -@import "../admin/components/progress"; -@import "../admin/components/save_bar"; -@import "components/sidebar"; // admin_v3 -@import "../admin/components/simple_modal"; -@import "../admin/components/states"; -@import "../admin/components/stripe_connect_button"; -@import "../admin/components/subscriptions_states"; -@import "../admin/components/table-filter"; -@import "../admin/components/table_loading"; -@import "../admin/components/timepicker"; -@import "../admin/components/todo"; -@import "../admin/components/tooltip"; -@import "../admin/components/wizard_progress"; - -@import "../admin/pages/enterprise_form"; -@import "../admin/pages/subscription_form"; -@import "../admin/pages/subscription_line_items"; -@import "../admin/pages/subscription_review"; - -@import "../admin/advanced_settings"; -@import "../admin/alert"; -@import "../admin/animations"; -@import "pages/change_type_form"; // admin_v3 -@import "../admin/connected_apps"; -@import "../admin/customers"; -@import "dashboard/dashboard_item"; // admin_v3 -@import "pages/dashboard-single-ent"; // admin_v3 -@import "../admin/dialog"; -@import "../admin/disabled"; -@import "components/dropdown"; // admin_v3 -@import "pages/edit_variant"; // admin_v3 -@import "pages/enterprise_index_panels"; // admin_v3 -@import "../admin/enterprises"; -@import "../admin/filters_and_controls"; -@import "../admin/grid"; -@import "../admin/icons"; -@import "../admin/index_panel_buttons"; -@import "../admin/index_panels"; -@import "../admin/modals"; -@import "../admin/offsets"; -@import "../admin/openfoodnetwork"; -@import "../admin/order_cycles"; -@import "../admin/orders"; -@import "pages/product_import"; // admin_v3 -@import "../admin/products"; -@import "../admin/products_v3"; -@import "../admin/question-mark-tooltip"; -@import "../admin/relationships"; -@import "../admin/reports"; -@import "components/select2"; // admin_v3 -@import "components/sidebar-item"; // admin_v3 -@import "../admin/side_menu"; -@import "../admin/tables"; -@import "../admin/tag_rules"; -@import "../admin/terms_of_service_files"; -@import "../admin/validation"; -@import "../admin/variant_overrides"; -@import "../admin/welcome"; - -@import "shared/question-mark-icon"; -@import "../admin/question-mark-tooltip"; - -@import "tom-select/src/scss/tom-select.default"; -@import "components/tom_select"; // admin_v3 - -@import "modal_component/modal_component"; -@import "vertical_ellipsis_menu_component/vertical_ellipsis_menu_component"; // admin_v3 and only V3 -@import "tag_list_input_component/tag_list_input_component"; -@import "admin/trix"; - -@import "terms_of_service_banner"; // admin_v3 - -@import "pages/product_preview"; // admin_v3 -@import "pages/dfc_product_imports"; // admin_v3 diff --git a/app/webpacker/css/admin_v3/globals/palette.scss b/app/webpacker/css/admin_v3/globals/palette.scss deleted file mode 100644 index 225b00b368..0000000000 --- a/app/webpacker/css/admin_v3/globals/palette.scss +++ /dev/null @@ -1,38 +0,0 @@ -// Basic color palette for admin styles v3 -$white: #ffffff !default; // White -$green: #9fc820 !default; // Green -$teal: #008397 !default; // Teal (Allports) -$orient: #006878 !default; // Orient (Cerulean) -$dark-blue: #004e5b !default; // Dark Blue (Sherpa) -$pale-blue: #cee1f4; // Pale blue -$red: #c85136 !default; // Red/Orange (Mojo) -$bright-orange: #ffa92e; // Bright orange -$yellow: #ff9300 !default; // Yellow -$mystic: #d9e8eb !default; // Mystic -$lighter-grey: #f8f9fa !default; // Lighter grey -$light-grey: #eff1f2 !default; // Light grey (Porcelain) -$medium-light-grey: #babdbe !default; // Silver Sand -$medium-grey: #919191 !default; // Medium grey -$dark-grey: #2e3132 !default; // Dark Grey -$near-black: #191c1d !default; // Near-black (Shark) -$fair-pink: #ffefeb !default; // Fair Pink -$roof-terracotta: #b83b1f !default; // Roof Terracotta - -// Old colour variables for backwards compatibility -$spree-green: $green; -$spree-blue: $teal; -$spree-light-blue: #eff5fc; -$color-1: $white; -$color-2: $green; -$color-3: $teal; -$color-4: $dark-blue; -$color-5: $red; -$color-6: $yellow; -$color-7: $light-grey; -$color-8: $near-black; -$color-9: $dark-grey; -$color-10: $orient; -$color-11: $mystic; -$color-12: $fair-pink; -$color-13: $roof-terracotta; -$color-14: $lighter-grey; diff --git a/app/webpacker/packs/admin-style-v3.scss b/app/webpacker/packs/admin-style-v3.scss index 170fae42e3..999b5a14fc 100644 --- a/app/webpacker/packs/admin-style-v3.scss +++ b/app/webpacker/packs/admin-style-v3.scss @@ -1,5 +1,5 @@ -@import "../css/admin_v3/all.scss"; +@import "../css/admin/all.scss"; -@import "../css/admin_v3/components/spinner.scss"; +@import "../css/admin/components/spinner.scss"; @import "../../../node_modules/trix/dist/trix.css"; From 5a9aa878312f8078c2a6ef4eb259723d5bbc5aad Mon Sep 17 00:00:00 2001 From: Prikesh Savla Date: Wed, 14 Jan 2026 19:27:51 +0530 Subject: [PATCH 140/270] Rename admin-style-v3 to admin-style and remove the admin_legacy styles folder that has no references --- app/views/spree/admin/shared/_head.html.haml | 2 +- app/webpacker/css/admin/all.scss | 2 +- .../css/admin_legacy/change_type_form.scss | 110 ------- .../admin_legacy/dashboard-single-ent.scss | 21 -- .../css/admin_legacy/dashboard_item.scss | 244 -------------- app/webpacker/css/admin_legacy/dropdown.scss | 271 ---------------- .../admin_legacy/enterprise_index_panels.scss | 120 ------- .../css/admin_legacy/plugins/select2.scss | 189 ----------- .../css/admin_legacy/product_import.scss | 299 ------------------ app/webpacker/css/admin_legacy/select2.scss | 63 ---- .../css/admin_legacy/sidebar-item.scss | 124 -------- .../{admin-style-v3.scss => admin-style.scss} | 0 12 files changed, 2 insertions(+), 1443 deletions(-) delete mode 100644 app/webpacker/css/admin_legacy/change_type_form.scss delete mode 100644 app/webpacker/css/admin_legacy/dashboard-single-ent.scss delete mode 100644 app/webpacker/css/admin_legacy/dashboard_item.scss delete mode 100644 app/webpacker/css/admin_legacy/dropdown.scss delete mode 100644 app/webpacker/css/admin_legacy/enterprise_index_panels.scss delete mode 100644 app/webpacker/css/admin_legacy/plugins/select2.scss delete mode 100644 app/webpacker/css/admin_legacy/product_import.scss delete mode 100644 app/webpacker/css/admin_legacy/select2.scss delete mode 100644 app/webpacker/css/admin_legacy/sidebar-item.scss rename app/webpacker/packs/{admin-style-v3.scss => admin-style.scss} (100%) diff --git a/app/views/spree/admin/shared/_head.html.haml b/app/views/spree/admin/shared/_head.html.haml index 0cf4946406..01387f98d3 100644 --- a/app/views/spree/admin/shared/_head.html.haml +++ b/app/views/spree/admin/shared/_head.html.haml @@ -14,7 +14,7 @@ = " - OFN #{t(:administration)}" %link{:href => "https://fonts.googleapis.com/css?family=Open+Sans:400italic,600italic,400,600&subset=latin,cyrillic,greek,vietnamese", :rel => "stylesheet", :type => "text/css"} -= stylesheet_pack_tag 'admin-style-v3', media: "screen, print" += stylesheet_pack_tag 'admin-style', media: "screen, print" = render "layouts/bugsnag_js" - if content_for? :minimal_js diff --git a/app/webpacker/css/admin/all.scss b/app/webpacker/css/admin/all.scss index 24bd84b9b3..6f8c7c57ea 100644 --- a/app/webpacker/css/admin/all.scss +++ b/app/webpacker/css/admin/all.scss @@ -132,4 +132,4 @@ @import "terms_of_service_banner"; // admin_v3 @import "pages/product_preview"; // admin_v3 -@import "pages/dfc_product_imports"; // admin_v3 \ No newline at end of file +@import "pages/dfc_product_imports"; // admin_v3 diff --git a/app/webpacker/css/admin_legacy/change_type_form.scss b/app/webpacker/css/admin_legacy/change_type_form.scss deleted file mode 100644 index 1880f029eb..0000000000 --- a/app/webpacker/css/admin_legacy/change_type_form.scss +++ /dev/null @@ -1,110 +0,0 @@ -#change_type { - section { - margin: 2em 0 0 0; - - &, - & * { - color: $spree-blue; - } - } - - .description { - background-color: $spree-light-blue; - margin-top: -2em; - padding: 4em 2em 2em 1em; - - @media all and (max-width: 786px) { - margin-bottom: 2em; - } - } - - .admin-cta { - border: 1px solid $spree-blue; - - @include border-radius(3px); - - text-align: center; - padding: 1em; - } - - .error { - display: block; - color: #f57e80; - border: 1px solid #f57e80; - background-color: #fde6e7; - - @include border-radius(3px); - - margin-bottom: 1em; - padding: 0.5em; - } - - a.selector { - position: relative; - border: 2px solid black; - text-align: center; - width: 100%; - cursor: pointer; - - &, - & * { - color: white; - } - - &:after, - &:before { - top: 100%; - left: 50%; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - - &:after { - border-color: rgba(136, 183, 213, 0); - border-top-color: $spree-blue; - border-width: 12px; - margin-left: -12px; - } - - &:hover { - &:after { - border-top-color: $spree-green; - } - } - - &:before { - border-color: rgba(84, 152, 218, 0); - border-top-color: black; - border-width: 15px; - margin-left: -15px; - } - - .bottom { - background: repeating-linear-gradient( - 60deg, - rgba(84, 152, 218, 0), - rgba(84, 152, 218, 0) 5px, - rgba(255, 255, 255, 0.25) 5px, - rgba(255, 255, 255, 0.25) 10px - ); - margin-top: 1em; - margin-left: -15px; - margin-right: -15px; - padding: 5px; - text-transform: uppercase; - } - - &.selected { - background-color: black; - - &:after, - &:hover &:after { - border-top-color: black; - } - } - } -} diff --git a/app/webpacker/css/admin_legacy/dashboard-single-ent.scss b/app/webpacker/css/admin_legacy/dashboard-single-ent.scss deleted file mode 100644 index 93f242257b..0000000000 --- a/app/webpacker/css/admin_legacy/dashboard-single-ent.scss +++ /dev/null @@ -1,21 +0,0 @@ -.dashboard_item.single-ent { - .header { - padding: 0.77778em 1.33333em 0.77778em 0.77778em; - height: auto !important; - } - - .list { - .button.bottom { - width: 100%; - } - } -} - -.button.big { - width: 100%; - font-size: 1rem; - - @include border-radius(25px); - - padding: 15px; -} diff --git a/app/webpacker/css/admin_legacy/dashboard_item.scss b/app/webpacker/css/admin_legacy/dashboard_item.scss deleted file mode 100644 index 7522b91836..0000000000 --- a/app/webpacker/css/admin_legacy/dashboard_item.scss +++ /dev/null @@ -1,244 +0,0 @@ -div.dashboard_item { - margin-bottom: 30px; - - .centered { - text-align: center; - } - - .text-icon { - margin-top: 8px; - display: block; - font-size: 16px; - font-weight: bold; - color: #fff; - padding: 0px 6px; - border-radius: 10px; - - &.green { - background-color: $spree-green; - } - - &.warning { - background-color: $color-warning; - } - - &.orange { - background-color: $color-warning; - } - } - - div.header { - height: 50px; - border-radius: 6px 6px 0px 0px; - border: 1px solid $spree-blue; - position: relative; - - a[ofn-with-tip] { - position: absolute; - right: 5px; - bottom: 5px; - } - - &.warning { - border-color: $color-warning; - border-width: 3px; - - h3 { - color: $color-warning; - } - } - - &.orange { - border-color: $color-warning; - border-width: 3px; - - h3 { - color: $color-warning; - } - } - - h3.alpha { - height: 100%; - padding: 10px 5px 0px 3%; - } - - a { - border-radius: 0px 4px 0px 0px; - height: 100%; - padding: 15px 2px 0px 2px; - } - } - - .tabs { - height: 30px; - border: solid $spree-blue; - border-width: 0px 0px 1px 0px; - margin-top: 3px; - - div.dashboard_tab { - cursor: pointer; - height: 30px; - color: #fff; - background-color: $spree-blue; - padding: 5px 5px 0px 5px; - text-align: center; - font-weight: bold; - border: solid $spree-blue; - border-width: 1px 1px 0px 1px; - - &:hover { - background-color: $spree-green; - } - - &.selected { - color: $spree-blue; - background-color: #fff; - } - } - } - - .list { - max-height: 250px; - overflow-y: auto; - overflow-x: hidden; - - &:focus { - outline: none; - } - } - - .list-title { - border: solid $spree-blue; - border-width: 0px 1px 0px 1px; - - span { - font-size: 105%; - padding: 10px 0px; - font-weight: bold; - } - - span.alpha { - padding: 10px 2px 10px 5%; - } - } - - .list-item { - border: solid $spree-blue; - border-width: 0px 1px 0px 1px; - height: 41px; - - span.alpha { - font-weight: bold; - margin-left: -3px; - padding: 10px 2px 0px 5%; - } - - span.omega { - padding-right: 13px; - margin-right: -3px; - text-align: right; - } - - .icon-arrow-right { - padding-top: 6px; - font-size: 20px; - } - - .icon-warning-sign { - color: $color-warning; - font-size: 30px; - } - - .icon-remove-sign { - color: $color-warning; - font-size: 30px; - } - - .icon-ok-sign { - color: $spree-green; - font-size: 30px; - } - - &.orange { - color: $color-warning; - border: solid $color-warning; - } - - &.warning { - color: $color-warning; - border: solid $color-warning; - } - - &.orange, - &.warning { - border-width: 0px 3px 0px 3px; - } - - &.even { - background-color: #fff; - } - - &.odd { - background-color: $spree-light-blue; - } - - &.even, - &.odd { - &:hover { - color: #ffffff; - background-color: $spree-green; - - .icon-arrow-right { - color: #fff; - } - - .icon-remove-sign { - color: #fff; - } - - .icon-warning-sign { - color: #fff; - } - - .icon-ok-sign { - color: #fff; - } - - .text-icon { - &.green { - color: $spree-green; - background-color: #fff; - } - } - } - } - } - - a.button { - color: #fff; - font-size: 110%; - font-weight: bold; - text-align: center; - - &.orange { - background-color: $color-warning; - } - - &.blue { - background-color: $spree-blue; - } - - &.warning { - background-color: $color-warning; - } - - &:hover { - background-color: $spree-green; - } - - &.bottom { - border-radius: 0px 0px 6px 6px; - padding: 15px 15px; - } - } -} diff --git a/app/webpacker/css/admin_legacy/dropdown.scss b/app/webpacker/css/admin_legacy/dropdown.scss deleted file mode 100644 index ab3a61d5bb..0000000000 --- a/app/webpacker/css/admin_legacy/dropdown.scss +++ /dev/null @@ -1,271 +0,0 @@ -#content-header .ofn-drop-down { - border: none; - background-color: $spree-blue; - color: #fff; - float: none; - margin-left: 3px; -} - -.ofn-drop-down { - .dropdown-content { - display: none; - } - - .toggle-off { - display: none; - } - - &:active:not(.disabled), - &:focus:not(.disabled) { - .dropdown-content { - display: inline-block; - } - } -} - -.ofn-drop-down:hover, -.ofn-drop-down.expanded { - border: 1px solid #adadad; - color: #575757; -} - -@mixin ofn-drop-down-style { - padding: 7px 15px; - border-radius: 3px; - border: 1px solid #d4d4d4; - background-color: #f5f5f5; - display: block; - color: #828282; - cursor: pointer; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - text-align: center; - margin-right: 10px; - - &.disabled { - opacity: 0.5; - pointer-events: none; - - &:hover { - cursor: default; - border-color: #d4d4d4; - color: #828282; - } - } -} - -.ofn-drop-down-with-prepend { - display: flex; - - &.right { - float: right; - } - - .ofn-drop-down { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .ofn-drop-down-prepend { - @include ofn-drop-down-style; - - border-right: none; - margin-left: 0; - margin-right: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - cursor: default; - } -} - -.ofn-drop-down { - @include ofn-drop-down-style; - - position: relative; - float: left; - - &.right { - float: right; - margin-right: 0px; - margin-left: 10px; - } - - &:hover, - &.expanded { - border: 1px solid #adadad; - color: #575757; - } - - > span { - width: auto; - text-transform: uppercase; - font-size: 85%; - font-weight: 600; - } - - .menu { - margin-top: 1px; - position: absolute; - float: none; - top: 100%; - left: 0px; - padding: 5px 0px; - border: 1px solid #adadad; - background-color: #ffffff; - box-shadow: 1px 3px 10px #888888; - z-index: 100; - white-space: nowrap; - - .filter { - padding-left: 5px; - padding-right: 5px; - position: relative; - - > input[type="text"] { - border: 1px solid rgba(18, 18, 18, 0.1); - width: 100%; - padding-left: 30px; - padding-top: 10px; - padding-bottom: 10px; - font-size: 13px; - color: #454545; - } - - &:after { - content: "\f002"; - font-family: FontAwesome; - position: absolute; - left: 15px; - top: 13px; - color: #454545; - } - } - - .menu_item { - margin: 0px; - padding: 2px 10px; - color: #454545; - text-align: left; - display: block; - - .check { - display: inline-block; - text-align: center; - width: 40px; - &:before { - content: "\00a0"; - } - } - - .name { - display: inline-block; - padding: 0px 15px 0px 0px; - } - - &.selected { - .check:before { - content: "\2713"; - } - } - - &.hidden { - display: none; - } - } - - .menu_item:hover { - background-color: #ededed; - } - } - - > details { - // Override padding on ofn-drop-down-style - margin: -7px -15px; - padding: 7px 15px; - } - - > details > summary { - display: inline-block; - list-style: none; - width: auto; - text-transform: uppercase; - font-size: 85%; - font-weight: 600; - // Override padding on ofn-drop-down-style to increase clickable area - margin: -8px -15px; - padding: 8px 15px; - } - - > details > summary:after { - content: "\f0d7"; - font-family: FontAwesome; - } - - > details[open] > summary:after { - content: "\f0d8"; - font-family: FontAwesome; - } -} - -.ofn-drop-down-v2 { - border: 1px solid $pale-blue; - background-color: white; - padding: 0px; - - &:hover { - border-color: $spree-blue; - } - - .ofn-drop-down-label { - color: $color-3; - padding: 10px; - width: 235px; - display: flex; - justify-content: space-between; - - &:hover { - color: $color-3; - } - - .label { - padding-right: 10px; - } - - .icon-caret-down, - .icon-caret-up { - padding-right: 0px; - } - } - - .menu { - width: 100%; - } - - .menu_items { - max-height: 200px; - overflow-y: scroll; - - .menu_item { - margin-bottom: 5px; - color: #454545; - font-weight: 400; - cursor: pointer; - padding-top: 4px; - padding-bottom: 5px; - text-transform: uppercase; - font-size: 85%; - } - } -} - -.ofn-drop-down.ofn-drop-down-v2 { - // Add very specific styling here for components that are in transition: - // ie. the ones using the two classes above - .ofn-drop-down-label { - padding-top: 7px; - padding-bottom: 7px; - } -} diff --git a/app/webpacker/css/admin_legacy/enterprise_index_panels.scss b/app/webpacker/css/admin_legacy/enterprise_index_panels.scss deleted file mode 100644 index 087f318042..0000000000 --- a/app/webpacker/css/admin_legacy/enterprise_index_panels.scss +++ /dev/null @@ -1,120 +0,0 @@ -.enterprise_package_panel, -.enterprise_producer_panel { - .info { - p { - font-size: 1rem; - margin: 10px 0px; - } - } - - a.selector { - display: block; - position: relative; - margin-bottom: 20px; - border: 2px solid black; - text-align: center; - // width: 100%; - cursor: pointer; - &, - & * { - color: white; - } - &:hover { - &:after { - border-top-color: $spree-green; - } - } - &.disabled { - background-color: #c1c1c1; - } - .bottom { - background: repeating-linear-gradient( - 60deg, - rgba(84, 152, 218, 0), - rgba(84, 152, 218, 0) 5px, - rgba(255, 255, 255, 0.25) 5px, - rgba(255, 255, 255, 0.25) 10px - ); - margin-top: 1em; - margin-left: -15px; - margin-right: -15px; - padding: 5px; - text-transform: uppercase; - } - &.selected { - background-color: #000000; - - &:after { - top: 50%; - left: 0; - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - - border-top: 20px solid transparent; - border-bottom: 20px solid transparent; - border-right: 20px solid #000000; - margin-top: -20px; - margin-left: -20px; - } - } - } -} - -.enterprise_status_panel { - .status-ok { - margin: 30px 0px; - i.icon-ok-sign { - color: $spree-green; - font-size: 1.5rem; - } - } - - td.description { - font-size: 0.9rem; - } - - td.severity { - text-align: center; - - i { - font-size: 1.5rem; - - &.issue { - color: $color-warning; - } - - &.warning { - color: #ff9848; - } - } - } -} - -tags-input .tags li.tag-item { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - -ms-border-radius: 3px; - -o-border-radius: 3px; - border-radius: 3px; - margin: 2px 0 2px 3px; - background-image: none; - background-color: #5fa5e8; - border: none; - box-shadow: none; - color: white !important; - font-size: 85%; - height: 25px; -} - -tags-input .tags .tag-item .remove-button { - color: white; -} - -table th.actions .no-text[class*="icon-"], -table td.actions .no-text[class*="icon-"] { - cursor: pointer; -} diff --git a/app/webpacker/css/admin_legacy/plugins/select2.scss b/app/webpacker/css/admin_legacy/plugins/select2.scss deleted file mode 100644 index 6ef2d5887b..0000000000 --- a/app/webpacker/css/admin_legacy/plugins/select2.scss +++ /dev/null @@ -1,189 +0,0 @@ -.select2-container { - &:hover .select2-choice, - &.select2-container-active .select2-choice { - background-color: $color-sel-hover-bg !important; - border-color: $color-sel-hover-bg !important; - } - .select2-choice { - background-image: none !important; - background-color: $color-sel-bg; - border: none !important; - box-shadow: none !important; - @include border-radius($border-radius); - color: $color-1 !important; - font-size: 90%; - height: 31px; - line-height: inherit !important; - padding: 5px 15px 7px; - - span { - display: block; - padding: 2px; - } - - .select2-search-choice-close { - background-image: none !important; - font-size: 100% !important; - @extend .icon-remove; - @extend [class^="icon-"], :before; - margin-top: 2px; - } - } - - &.select2-container-active { - .select2-choice { - box-shadow: none !important; - } - - &.select2-dropdown-open .select2-choice div b { - @extend .icon-caret-up; - } - } -} - -.select2-drop { - border-color: $color-sel-hover-bg; - box-shadow: none !important; - z-index: 1000000; - - &.select2-drop-above { - border-color: $color-sel-hover-bg; - } -} - -.select2-search { - @extend .icon-search; - - font-size: 100%; - color: darken($color-border, 15); - padding: 0 9px 0 0; - - &:before { - @extend [class^="icon-"], :before; - - position: absolute; - top: 13px; - left: 13px; - } - - input { - @extend input, [type="text"]; - - padding: 6px 0 6px 25px; - margin: 5px 0 0 5px; - font-family: $base-font-family; - font-size: 90%; - box-shadow: none; - background-image: none; - } -} - -.select2-container .select2-choice .select2-arrow { - background-image: none; - background: transparent; - border: 0; - - b { - padding-top: 7px; - display: block; - width: 100%; - height: 100%; - background: none; - font-family: FontAwesome; - font-weight: 200 !important; - - &:before { - content: "\f0d7"; - } - } -} - -.select2-results { - padding-left: 0 !important; - - li { - font-size: 85% !important; - - &.select2-highlighted { - .select2-result-label { - &, - h6 { - color: $color-1 !important; - } - } - } - - .select2-result-label { - color: $color-body-text; - min-height: 22px; - clear: both; - overflow: auto; - } - - &.select2-no-results, - &.select2-searching { - padding: 5px; - background-color: transparent; - color: $color-body-text; - text-align: center; - font-weight: $font-weight-bold; - text-transform: uppercase; - } - } - - .select2-highlighted { - background-color: $color-sel-bg; - } -} - -.select2-container-multi { - &.select2-container-active, - &.select2-dropdown-open { - .select2-choices { - border-color: $color-sel-hover-bg !important; - box-shadow: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - } - .select2-choices { - @extend input, [type="text"]; - padding: 6px 3px 3px 3px; - box-shadow: none; - background-image: none !important; - - .select2-search-choice { - @include border-radius($border-radius); - margin: 0 0 3px 3px; - background-image: none; - background-color: $color-sel-bg; - border: none; - box-shadow: none; - color: $color-1 !important; - font-size: 85%; - - &:hover { - background-color: $color-sel-hover-bg; - } - - .select2-search-choice-close { - background-image: none !important; - font-size: 85% !important; - @extend .icon-remove; - @extend [class^="icon-"], :before; - margin-left: 2px; - color: $color-1; - } - } - } -} - -label .select2-container { - margin-top: -6px; - .select2-choice { - span { - text-transform: none; - font-weight: normal; - } - } -} diff --git a/app/webpacker/css/admin_legacy/product_import.scss b/app/webpacker/css/admin_legacy/product_import.scss deleted file mode 100644 index 5c6ccc2276..0000000000 --- a/app/webpacker/css/admin_legacy/product_import.scss +++ /dev/null @@ -1,299 +0,0 @@ -$pi-red: $color-warning; -$pi-green: lighten($spree-green, 10%); -$pi-orange: $bright-orange; -$pi-blue: lighten($spree-blue, 10%); -$pi-light-yellow: #faffaf; - -// scss-lint:disable NestingDepth - -div.panel-section { - .error { - color: $pi-red; - } - .warning { - color: $bright-orange; - } - .success { - color: $pi-green; - } - .info { - color: #68b7c0; - } - - div.panel-header { - width: 100%; - clear: both; - float: left; - padding: 0.5em; - - div { - font-size: 1.25em; - float: left; - } - - div.header-caret { - width: 2em; - text-align: center; - min-height: 0.1em; //Empty div fix - } - - div.header-icon { - width: 2.5em; - text-align: center; - padding-top: 0.18em; - - i { - font-size: 1.5em; - line-height: 0.9em; - } - } - - div.header-count { - min-width: 2em; - text-align: right; - padding-right: 0.5em; - } - - div.header-description { - width: auto; - } - } - - div.panel-header:hover { - cursor: pointer; - background-color: #f7f7f7; - } - - div.panel-header.active { - background-color: #efefef; - text-shadow: 1px 1px 0px rgba(255, 255, 255, 0.75); - } - - div.panel-content { - width: 100%; - clear: both; - margin-bottom: 0.5em; - background-color: #f9f9f9; - padding: 1.5em; - - div.table-wrap { - width: 100%; - overflow: auto; - border-right: 1px solid #ceede3; - max-height: 23em; - } - - table { - background-color: white; - margin-bottom: 0; - td, - th { - white-space: nowrap; - } - - tr { - &.error { - color: #c84c4c; - } - - &:hover td.invalid { - background-color: darken(#f05c51, 5%); - } - - i { - display: block; - margin-bottom: -0.2em; - font-size: 1.4em !important; - } - } - - td { - &.invalid { - background-color: #f05c51; - box-shadow: inset 0px 0px 1px red; - color: white; - } - } - } - - div.import-errors { - margin-bottom: 0.85em; - - p.line { - font-size: 1.15em; - margin-bottom: 0.2em; - color: #577084; - } - p.error { - color: #cb1b1b; - margin-bottom: 0.2em; - } - } - } -} - -br.panels.clearfix { - clear: both; -} - -.panel-section.import-settings { - .header-description { - padding-left: 1em; - } - - span.header-error { - font-size: 0.85em; - color: $pi-red; - } - - .select2-search { - display: none; - } - - .select2-results { - margin: 0; - } -} - -.post-save-results { - p { - font-size: 1.25em; - margin-bottom: 0.5em; - - strong { - margin-right: 0.2em; - min-width: 1.8em; - display: inline-block; - text-align: right; - } - - i { - font-size: 1.4em; - vertical-align: middle; - position: relative; - } - - i.fa-check-circle { - color: $pi-green; - } - i.fa-info-circle { - color: $pi-blue; - } - } - - p.save-error { - color: #ee4728; - font-size: 1.05em; - margin-top: 0.4em; - } -} - -form.product-import, -div.post-save-results, -div.import-wrapper { - input[type="submit"] { - margin-right: 0.5em; - } - input[type="submit"], - button, - a.button { - min-width: 8em; - text-align: center; - } -} - -div.import-wrapper { - .alert-box { - margin: 0 0 1.75em; - } - - .ng-hide:not(.ng-hide-animate) { - // We have to use !important here to override angular's display properties - // scss-lint:disable ImportantRule - display: block !important; - position: absolute; - opacity: 0; - top: -9999px; - left: -9999px; - } - - .ng-hide-add, - .ng-hide-remove, - .ng-hide-animate { - transition: all 0.4s ease-in-out; - } - - form.product-import, - div.save-results { - transition: all 0.4s ease-in-out; - } - - div.progress-interface { - text-align: center; - transition: all 0.4s ease-in-out; - - button:disabled { - background: #ccc !important; - } - } - - .post-save-results { - a.button { - float: left; - margin-right: 0.5em; - } - } -} - -div.progress-bar { - height: 25px; - width: 30em; - max-width: 90%; - margin: 1em auto; - background: #f7f7f7; - padding: 3px; - border-radius: 0.3em; - border: 1px solid #eee; - - span.progress-track { - display: block; - background: lighten($pi-green, 10%); - height: 100%; - border-radius: 0.3em; - box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); - transition: width 0.3s ease-in-out; - } -} - -#upload-sidebar { - float: right; - background-color: lighten($spree-light-blue, 2.5%); - border: 1px solid lighten($pale-blue, 2.5%); - width: 50%; - padding: 0 1.5em 1.5em; - - h4, - h5, - h6, - p { - margin: 1.25em 0 1em; - } - - a.download { - display: block; - font-size: 1.05em; - margin-bottom: 0.5em; - - i { - margin-right: 0.25em; - } - } - - span.category { - display: inline-block; - background-color: $pi-blue; - color: white; - padding: 0.3em 0.6em; - margin: 0 0.4em 0.5em 0; - } -} diff --git a/app/webpacker/css/admin_legacy/select2.scss b/app/webpacker/css/admin_legacy/select2.scss deleted file mode 100644 index f076e28335..0000000000 --- a/app/webpacker/css/admin_legacy/select2.scss +++ /dev/null @@ -1,63 +0,0 @@ -.select2-container { - .select2-choice { - .select2-search-choice-close { - display: none !important; - } - .select2-arrow { - width: 22px; - border: none; - background-image: none; - background-color: transparent; - } - } - - &.light { - .select2-choice { - background-color: #ffffff; - font-weight: normal; - color: $spree-blue !important; - border: 1px solid $color-border !important; - } - - &:hover, - &.select2-container-active { - .select2-choice { - background-color: #ffffff !important; - border: 1px solid $spree-green !important; - - .select2-arrow { - &:before { - color: $spree-blue; - } - } - } - } - } - - &.select2-container-multi { - .select2-search-field { - max-height: 20px; - input { - padding: 0 !important; - margin: 0 0 0 5px !important; - } - } - .select2-search-choice { - display: flex; - align-items: center; - justify-content: center; - padding-left: 7px; - - .select2-search-choice-close { - position: relative; - order: -1; - width: auto; - left: 0; - top: 0; - margin: 0; - padding: 0; - font-size: 100% !important; - } - } - } -} diff --git a/app/webpacker/css/admin_legacy/sidebar-item.scss b/app/webpacker/css/admin_legacy/sidebar-item.scss deleted file mode 100644 index 499c4e76e9..0000000000 --- a/app/webpacker/css/admin_legacy/sidebar-item.scss +++ /dev/null @@ -1,124 +0,0 @@ -div.sidebar_item { - margin-bottom: 30px; - - .centered { - text-align: center; - } - - div.header { - font-size: 105%; - color: #fff; - padding: 10px 0px; - position: relative; - - &.blue { - background-color: $spree-blue; - } - - &.red { - background-color: $color-warning; - } - } - - .list { - max-height: 400px; - overflow-y: auto; - overflow-x: hidden; - - &.red { - color: $color-warning; - - .list-item { - border: solid $color-warning; - border-width: 0px 3px 0px 3px; - - a.alpha, - span.alpha { - margin-left: -3px; - } - - &.odd { - background-color: #fcf6ef; - - &:hover { - background-color: $spree-green; - } - } - } - - a { - color: $color-warning; - } - } - } - - .list-item { - .icon-arrow-right { - padding-top: 6px; - font-size: 20px; - } - - border: solid $spree-blue; - border-width: 0px 1px 0px 1px; - - a.alpha, - span.alpha { - font-weight: bold; - margin-left: -1px; - padding: 10px 2px 10px 5%; - overflow: hidden; - text-overflow: ellipsis; - } - - span.omega { - padding: 8px 18px 8px 0px; - margin-right: -3px; - text-align: right; - } - - .icon-remove-sign { - color: $color-warning; - font-size: 18px; - } - - &.even { - background-color: #fff; - } - - &.odd { - background-color: $spree-light-blue; - } - - &.even, - &.odd { - &:hover { - color: #ffffff; - background-color: $spree-green; - - a { - color: #ffffff; - } - } - } - } - - a.button { - color: #fff; - padding: 15px 15px; - font-weight: bold; - text-align: center; - border-radius: 0px; - - &.blue { - background-color: $spree-blue; - } - - &.red { - background-color: $color-warning; - } - - &:hover { - background-color: $spree-green; - } - } -} diff --git a/app/webpacker/packs/admin-style-v3.scss b/app/webpacker/packs/admin-style.scss similarity index 100% rename from app/webpacker/packs/admin-style-v3.scss rename to app/webpacker/packs/admin-style.scss From 6ad49cc0801c8d11b3cc300c0b6ccc1aca6453c3 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Mon, 26 Jan 2026 03:50:53 +0500 Subject: [PATCH 141/270] Update all locales with the latest Transifex translations --- config/locales/en_CA.yml | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index d780597574..846ac96620 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -115,6 +115,67 @@ en_CA: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: + messages: + content_type_invalid: + one: "has an invalid content type (authorized content type is %{authorized_human_content_types})" + other: "has an invalid content type (authorized content types are %{authorized_human_content_types})" + content_type_spoofed: + one: "has a content type that is not equivalent to the one that is detected through its content (authorized content type is %{authorized_human_content_types})" + other: "has a content type that is not equivalent to the one that is detected through its content (authorized content types are %{authorized_human_content_types})" + file_size_not_less_than: "file size must be less than %{max} (current size is %{file_size})" + file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max} (current size is %{file_size})" + file_size_not_greater_than: "file size must be greater than %{min} (current size is %{file_size})" + file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min} (current size is %{file_size})" + file_size_not_between: "file size must be between %{min} and %{max} (current size is %{file_size})" + file_size_not_equal_to: "file size must be equal to %{exact} (current size is %{file_size})" + total_file_size_not_less_than: "total file size must be less than %{max} (current size is %{total_file_size})" + total_file_size_not_less_than_or_equal_to: "total file size must be less than or equal to %{max} (current size is %{total_file_size})" + total_file_size_not_greater_than: "total file size must be greater than %{min} (current size is %{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "total file size must be greater than or equal to %{min} (current size is %{total_file_size})" + total_file_size_not_between: "total file size must be between %{min} and %{max} (current size is %{total_file_size})" + total_file_size_not_equal_to: "total file size must be equal to %{exact} (current size is %{total_file_size})" + duration_not_less_than: "duration must be less than %{max} (current duration is %{duration})" + duration_not_less_than_or_equal_to: "duration must be less than or equal to %{max} (current duration is %{duration})" + duration_not_greater_than: "duration must be greater than %{min} (current duration is %{duration})" + duration_not_greater_than_or_equal_to: "duration must be greater than or equal to %{min} (current duration is %{duration})" + duration_not_between: "duration must be between %{min} and %{max} (current duration is %{duration})" + duration_not_equal_to: "duration must be equal to %{exact} (current duration is %{duration})" + limit_out_of_range: + zero: "no files attached (must have between %{min} and %{max} files)" + one: "only 1 file attached (must have between %{min} and %{max} files)" + other: "total number of files must be between %{min} and %{max} files (there are %{count} files attached)" + limit_min_not_reached: + zero: "no files attached (must have at least %{min} files)" + one: "only 1 file attached (must have at least %{min} files)" + other: "%{count} files attached (must have at least %{min} files)" + limit_max_exceeded: + zero: "no files attached (maximum is %{max} files)" + one: "too many files attached (maximum is %{max} files, got %{count})" + other: "too many files attached (maximum is %{max} files, got %{count})" + attachment_missing: "is missing its attachment" + media_metadata_missing: "is not a valid media file" + dimension_min_not_included_in: "must be greater than or equal to %{width} x %{height} pixels" + dimension_max_not_included_in: "must be less than or equal to %{width} x %{height} pixels" + dimension_width_not_included_in: "width is not included between %{min} and %{max} pixels" + dimension_height_not_included_in: "height is not included between %{min} and %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels" + dimension_width_not_less_than_or_equal_to: "width must be less than or equal to %{length} pixels" + dimension_height_not_less_than_or_equal_to: "height must be less than or equal to %{length} pixels" + dimension_width_not_equal_to: "width must be equal to %{length} pixels" + dimension_height_not_equal_to: "height must be equal to %{length} pixels" + aspect_ratio_not_square: "must be square (current file is %{width}x%{height}px)" + aspect_ratio_not_portrait: "must be portrait (current file is %{width}x%{height}px)" + aspect_ratio_not_landscape: "must be landscape (current file is %{width}x%{height}px)" + aspect_ratio_not_x_y: "must be %{authorized_aspect_ratios} (current file is %{width}x%{height}px)" + aspect_ratio_invalid: "has an invalid aspect ratio (valid aspect ratios are %{authorized_aspect_ratios})" + file_not_processable: "is not identified as a valid media file" + pages_not_less_than: "page count must be less than %{max} (current page count is %{pages})" + pages_not_less_than_or_equal_to: "page count must be less than or equal to %{max} (current page count is %{pages})" + pages_not_greater_than: "page count must be greater than %{min} (current page count is %{pages})" + pages_not_greater_than_or_equal_to: "page count must be greater than or equal to %{min} (current page count is %{pages})" + pages_not_between: "page count must be between %{min} and %{max} (current page count is %{pages})" + pages_not_equal_to: "page count must be equal to %{exact} (current page count is %{pages})" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Homeand try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -520,6 +581,7 @@ en_CA: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "The voucher has expired" not_found_voucher: "Sorry, we couldn't find that voucher, please check the code." vine_voucher_redeemer_service: errors: @@ -3908,6 +3970,8 @@ en_CA: destroy: success: Webhook endpoint successfully deleted error: Webhood endpoint failed to delete + test: + success: Some test data will be sent to the webhook url spree: order_updated: "Order Updated" cannot_perform_operation: "Can not perform this operation" @@ -4014,6 +4078,7 @@ en_CA: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + tag_rule: "Tag Rule" voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" @@ -4897,6 +4962,8 @@ en_CA: create_placeholder: Enter the URL of the remove webhook endpoint event_types: order_cycle_opened: Order Cycle Opened + payment_status_changed: Post webhook on Payment status change + test_endpoint: Test webhook endpoint invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." From 9297dbfa636787fe56c489298b096a99a8332500 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 00:15:46 +0000 Subject: [PATCH 142/270] Bump sass-embedded from 1.97.2 to 1.97.3 Bumps [sass-embedded](https://github.com/sass/embedded-host-node) from 1.97.2 to 1.97.3. - [Changelog](https://github.com/sass/embedded-host-node/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/embedded-host-node/compare/1.97.2...1.97.3) --- updated-dependencies: - dependency-name: sass-embedded dependency-version: 1.97.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 204 ++++++++++++++++++++++++++---------------------------- 1 file changed, 99 insertions(+), 105 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7589b53533..30864b60f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2793,11 +2793,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-builder@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/buffer-builder/-/buffer-builder-0.2.0.tgz#3322cd307d8296dab1f604618593b261a3fade8f" - integrity sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -6306,107 +6301,106 @@ safe-regex-test@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-embedded-all-unknown@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.2.tgz#1b3bc5a07a6966f09622bbf8aadfa149169560e3" - integrity sha512-Fj75+vOIDv1T/dGDwEpQ5hgjXxa2SmMeShPa8yrh2sUz1U44bbmY4YSWPCdg8wb7LnwiY21B2KRFM+HF42yO4g== +sass-embedded-all-unknown@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.3.tgz#a0cf18681cc0ec5f51101b8b89640df158fb8dc3" + integrity sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg== dependencies: - sass "1.97.2" + sass "1.97.3" -sass-embedded-android-arm64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.2.tgz#2a31415f07671b2713dcc5ea4e68e5967b5dcce3" - integrity sha512-pF6I+R5uThrscd3lo9B3DyNTPyGFsopycdx0tDAESN6s+dBbiRgNgE4Zlpv50GsLocj/lDLCZaabeTpL3ubhYA== +sass-embedded-android-arm64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.3.tgz#8093d124f0b671fd691a925805d8d6b0c9d08a44" + integrity sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA== -sass-embedded-android-arm@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.2.tgz#c31adf02cdd0fdca0d52d9b0059e6a991c5792fa" - integrity sha512-BPT9m19ttY0QVHYYXRa6bmqmS3Fa2EHByNUEtSVcbm5PkIk1ntmYkG9fn5SJpIMbNmFDGwHx+pfcZMmkldhnRg== +sass-embedded-android-arm@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.3.tgz#256236b9c857f83ece13229d8704a44587a0a660" + integrity sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg== -sass-embedded-android-riscv64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.2.tgz#81c9a529419c55d2b654499ceec557c6f8e799fc" - integrity sha512-fprI8ZTJdz+STgARhg8zReI2QhhGIT9G8nS7H21kc3IkqPRzhfaemSxEtCqZyvDbXPcgYiDLV7AGIReHCuATog== +sass-embedded-android-riscv64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.3.tgz#c71cfef7a6a94cc043f74936ec62be89115c7a32" + integrity sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA== -sass-embedded-android-x64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.2.tgz#9e05e782f9e30791237bc04aa49b47d366a3bd48" - integrity sha512-RswwSjURZxupsukEmNt2t6RGvuvIw3IAD5sDq1Pc65JFvWFY3eHqCmH0lG0oXqMg6KJcF0eOxHOp2RfmIm2+4w== +sass-embedded-android-x64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.3.tgz#07065245d9154d3353952bce5c30f87fbd7db59c" + integrity sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw== -sass-embedded-darwin-arm64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.2.tgz#5bee484274c7b15c7baa56972654756eb3da6700" - integrity sha512-xcsZNnU1XZh21RE/71OOwNqPVcGBU0qT9A4k4QirdA34+ts9cDIaR6W6lgHOBR/Bnnu6w6hXJR4Xth7oFrefPA== +sass-embedded-darwin-arm64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.3.tgz#49887421ada0d00ba9e93012690e34d8aa132bc7" + integrity sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA== -sass-embedded-darwin-x64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.2.tgz#01fb4c55203346cffeba18623f6e769a622f9415" - integrity sha512-T/9DTMpychm6+H4slHCAsYJRJ6eM+9H9idKlBPliPrP4T8JdC2Cs+ZOsYqrObj6eOtAD0fGf+KgyNhnW3xVafA== +sass-embedded-darwin-x64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.3.tgz#5f9aef81f5337f5e8e67cf0bd2d8514a7529326e" + integrity sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA== -sass-embedded-linux-arm64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.2.tgz#d5bb195fefedcab01a590170950d1bd2daa904db" - integrity sha512-Wh+nQaFer9tyE5xBPv5murSUZE/+kIcg8MyL5uqww6be9Iq+UmZpcJM7LUk+q8klQ9LfTmoDSNFA74uBqxD6IA== +sass-embedded-linux-arm64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.3.tgz#fd08cb53040c25c78a5e418914a47bc74a72d169" + integrity sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg== -sass-embedded-linux-arm@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.2.tgz#bd51af620ef13549e1d23e5e6f7793cba1342202" - integrity sha512-yDRe1yifGHl6kibkDlRIJ2ZzAU03KJ1AIvsAh4dsIDgK5jx83bxZLV1ZDUv7a8KK/iV/80LZnxnu/92zp99cXQ== +sass-embedded-linux-arm@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.3.tgz#1fdd2e4e8d8f4b6144fb8a24e8e8bbb704696184" + integrity sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA== -sass-embedded-linux-musl-arm64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.2.tgz#eb4f6b047aa3ae6907ab511a51da01b6e20c4c60" - integrity sha512-NfUqZSjHwnHvpSa7nyNxbWfL5obDjNBqhHUYmqbHUcmqBpFfHIQsUPgXME9DKn1yBlBc3mWnzMxRoucdYTzd2Q== +sass-embedded-linux-musl-arm64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.3.tgz#21cbc27b312ff2460d6c7c8ea093bce2a549fbc2" + integrity sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw== -sass-embedded-linux-musl-arm@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.2.tgz#3370a960f658d322d4fd57a302bc9082cd83c926" - integrity sha512-GIO6xfAtahJAWItvsXZ3MD1HM6s8cKtV1/HL088aUpKJaw/2XjTCveiOO2AdgMpLNztmq9DZ1lx5X5JjqhS45g== +sass-embedded-linux-musl-arm@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.3.tgz#f6d3905031e44313d3fb742c683ddbf45bf12c64" + integrity sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg== -sass-embedded-linux-musl-riscv64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.2.tgz#c0fb96880580ef719485502e3fff1d0bb336a250" - integrity sha512-qtM4dJ5gLfvyTZ3QencfNbsTEShIWImSEpkThz+Y2nsCMbcMP7/jYOA03UWgPfEOKSehQQ7EIau7ncbFNoDNPQ== +sass-embedded-linux-musl-riscv64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.3.tgz#a42f9f4c51b42431e93287a6dc1df83e920bf658" + integrity sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA== -sass-embedded-linux-musl-x64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.2.tgz#32ab41dd6027a5e5d282670e7f10e516ada012af" - integrity sha512-ZAxYOdmexcnxGnzdsDjYmNe3jGj+XW3/pF/n7e7r8y+5c6D2CQRrCUdapLgaqPt1edOPQIlQEZF8q5j6ng21yw== +sass-embedded-linux-musl-x64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.3.tgz#55b5bd5e56b0ece474ed52a890131fae4e020675" + integrity sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw== -sass-embedded-linux-riscv64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.2.tgz#f6079c543279cd442030d3ea2c90181ed877d89a" - integrity sha512-reVwa9ZFEAOChXpDyNB3nNHHyAkPMD+FTctQKECqKiVJnIzv2EaFF6/t0wzyvPgBKeatA8jszAIeOkkOzbYVkQ== +sass-embedded-linux-riscv64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.3.tgz#d6367150d1c389a1310cbda539d4b503da7ff5a3" + integrity sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA== -sass-embedded-linux-x64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.2.tgz#c056d90dd80ce4d8996aae7afd50f0d88b773de4" - integrity sha512-bvAdZQsX3jDBv6m4emaU2OMTpN0KndzTAMgJZZrKUgiC0qxBmBqbJG06Oj/lOCoXGCxAvUOheVYpezRTF+Feog== +sass-embedded-linux-x64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.3.tgz#cebfe65b052cbaae76c8e02feac8f85e90942224" + integrity sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg== -sass-embedded-unknown-all@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.2.tgz#a640959f8f209fa7a9bd6d08f7733d9471875ffb" - integrity sha512-86tcYwohjPgSZtgeU9K4LikrKBJNf8ZW/vfsFbdzsRlvc73IykiqanufwQi5qIul0YHuu9lZtDWyWxM2dH/Rsg== +sass-embedded-unknown-all@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.3.tgz#a4f82e5133e28de65034e67faf1e137790ac5ac6" + integrity sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q== dependencies: - sass "1.97.2" + sass "1.97.3" -sass-embedded-win32-arm64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.2.tgz#cc5807787e714a5279981789c033610ca865ae18" - integrity sha512-Cv28q8qNjAjZfqfzTrQvKf4JjsZ6EOQ5FxyHUQQeNzm73R86nd/8ozDa1Vmn79Hq0kwM15OCM9epanDuTG1ksA== +sass-embedded-win32-arm64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.3.tgz#41c539cc8732a11b9b4c0da2309d1fc5564655c3" + integrity sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw== -sass-embedded-win32-x64@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.2.tgz#88993deffdfa048f60fef6d4dca853a7c0862a3d" - integrity sha512-DVxLxkeDCGIYeyHLAvWW3yy9sy5Ruk5p472QWiyfyyG1G1ASAR8fgfIY5pT0vE6Rv+VAKVLwF3WTspUYu7S1/Q== +sass-embedded-win32-x64@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.3.tgz#e4e200e1e5a62ef075f962eb2d11d85dc58b762e" + integrity sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw== sass-embedded@^1.96.0: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.97.2.tgz#03622086bd0f43af4df92972d9bf1d6d76655c36" - integrity sha512-lKJcskySwAtJ4QRirKrikrWMFa2niAuaGenY2ElHjd55IwHUiur5IdKu6R1hEmGYMs4Qm+6rlRW0RvuAkmcryg== + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.97.3.tgz#1cab95995787d7e310f6272d58f80c67b5ead4ba" + integrity sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA== dependencies: "@bufbuild/protobuf" "^2.5.0" - buffer-builder "^0.2.0" colorjs.io "^0.5.0" immutable "^5.0.2" rxjs "^7.4.0" @@ -6414,24 +6408,24 @@ sass-embedded@^1.96.0: sync-child-process "^1.0.2" varint "^6.0.0" optionalDependencies: - sass-embedded-all-unknown "1.97.2" - sass-embedded-android-arm "1.97.2" - sass-embedded-android-arm64 "1.97.2" - sass-embedded-android-riscv64 "1.97.2" - sass-embedded-android-x64 "1.97.2" - sass-embedded-darwin-arm64 "1.97.2" - sass-embedded-darwin-x64 "1.97.2" - sass-embedded-linux-arm "1.97.2" - sass-embedded-linux-arm64 "1.97.2" - sass-embedded-linux-musl-arm "1.97.2" - sass-embedded-linux-musl-arm64 "1.97.2" - sass-embedded-linux-musl-riscv64 "1.97.2" - sass-embedded-linux-musl-x64 "1.97.2" - sass-embedded-linux-riscv64 "1.97.2" - sass-embedded-linux-x64 "1.97.2" - sass-embedded-unknown-all "1.97.2" - sass-embedded-win32-arm64 "1.97.2" - sass-embedded-win32-x64 "1.97.2" + sass-embedded-all-unknown "1.97.3" + sass-embedded-android-arm "1.97.3" + sass-embedded-android-arm64 "1.97.3" + sass-embedded-android-riscv64 "1.97.3" + sass-embedded-android-x64 "1.97.3" + sass-embedded-darwin-arm64 "1.97.3" + sass-embedded-darwin-x64 "1.97.3" + sass-embedded-linux-arm "1.97.3" + sass-embedded-linux-arm64 "1.97.3" + sass-embedded-linux-musl-arm "1.97.3" + sass-embedded-linux-musl-arm64 "1.97.3" + sass-embedded-linux-musl-riscv64 "1.97.3" + sass-embedded-linux-musl-x64 "1.97.3" + sass-embedded-linux-riscv64 "1.97.3" + sass-embedded-linux-x64 "1.97.3" + sass-embedded-unknown-all "1.97.3" + sass-embedded-win32-arm64 "1.97.3" + sass-embedded-win32-x64 "1.97.3" sass-loader@^16.0.6: version "16.0.6" @@ -6440,10 +6434,10 @@ sass-loader@^16.0.6: dependencies: neo-async "^2.6.2" -sass@1.97.2: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.2.tgz#e515a319092fd2c3b015228e3094b40198bff0da" - integrity sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw== +sass@1.97.3: + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.3.tgz#9cb59339514fa7e2aec592b9700953ac6e331ab2" + integrity sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg== dependencies: chokidar "^4.0.0" immutable "^5.0.2" From 9a90e46b78ad2c17c780d4de765395fe7a7f1f0d Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 15:12:01 +1100 Subject: [PATCH 143/270] Move mail css back to be managed by wepack It wil allow us to remove dependency on `rails-sass`, and `sass` which are not maintained anymore. More or less revert this PR: https://github.com/openfoodfoundation/openfoodnetwork/pull/12743 --- app/assets/stylesheets/mail.scss | 1 - app/assets/stylesheets/mail/all.scss | 3 --- app/helpers/application_helper.rb | 15 +++++++++++++++ app/views/layouts/mailer.html.haml | 2 +- app/views/spree/admin/orders/invoice.html.haml | 2 +- app/views/spree/admin/orders/invoice2.html.haml | 2 +- app/views/spree/admin/orders/invoice4.html.haml | 4 ++-- app/webpacker/css/mail/all.scss | 3 +++ .../stylesheets => webpacker/css}/mail/email.scss | 0 .../css}/mail/payments_list.scss | 0 app/webpacker/packs/mail.scss | 1 + config/initializers/assets.rb | 1 - 12 files changed, 24 insertions(+), 10 deletions(-) delete mode 100644 app/assets/stylesheets/mail.scss delete mode 100644 app/assets/stylesheets/mail/all.scss create mode 100644 app/webpacker/css/mail/all.scss rename app/{assets/stylesheets => webpacker/css}/mail/email.scss (100%) rename app/{assets/stylesheets => webpacker/css}/mail/payments_list.scss (100%) create mode 100644 app/webpacker/packs/mail.scss diff --git a/app/assets/stylesheets/mail.scss b/app/assets/stylesheets/mail.scss deleted file mode 100644 index e35654c0d2..0000000000 --- a/app/assets/stylesheets/mail.scss +++ /dev/null @@ -1 +0,0 @@ -@import './mail/all.scss'; diff --git a/app/assets/stylesheets/mail/all.scss b/app/assets/stylesheets/mail/all.scss deleted file mode 100644 index fa8445d726..0000000000 --- a/app/assets/stylesheets/mail/all.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import '../../../webpacker/css/admin/globals/palette.scss'; -@import 'email'; -@import 'payments_list'; diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4da992b8ef..fc242cf18c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -76,4 +76,19 @@ module ApplicationHelper def cache_key_with_locale(key, locale) Array.wrap(key) + ["v2", locale.to_s, I18nDigests.for_locale(locale)] end + + def pdf_stylesheet_pack_tag(source) + # With shakapacker dev server running, the wicked_pdf_stylesheet_pack_tag will produce a + # relative path, because we don't have `config.action_controller.asset_host`. Relative path + # can't be resolved by `wkhtmltopdf`. So we pass the wepacker dev server host and port to + # the shakapacker helper, so it generates the correct url. + # For more info: https://stackoverflow.com/questions/58490299/how-to-include-css-stylesheet-into-wicked-pdf/60541688#60541688 + if running_in_development? + options = { media: "all", + host: "#{Shakapacker.dev_server.host}:#{Shakapacker.dev_server.port}" } + stylesheet_pack_tag(source, **options) + else + wicked_pdf_stylesheet_pack_tag(source) + end + end end diff --git a/app/views/layouts/mailer.html.haml b/app/views/layouts/mailer.html.haml index 2a74b48ad9..0a6981a08f 100644 --- a/app/views/layouts/mailer.html.haml +++ b/app/views/layouts/mailer.html.haml @@ -5,7 +5,7 @@ %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ %title = Spree::Config[:site_name] - = stylesheet_link_tag 'mail', media: "screen" + = stylesheet_pack_tag "mail", media: "screen" %body{:bgcolor => "#FFFFFF" } - unless @hide_ofn_navigation %table.head-wrap diff --git a/app/views/spree/admin/orders/invoice.html.haml b/app/views/spree/admin/orders/invoice.html.haml index a72e7c1fff..d1dbc32264 100644 --- a/app/views/spree/admin/orders/invoice.html.haml +++ b/app/views/spree/admin/orders/invoice.html.haml @@ -1,4 +1,4 @@ -= wicked_pdf_stylesheet_link_tag "mail" += pdf_stylesheet_pack_tag "mail" %table{:width => "100%"} %tbody diff --git a/app/views/spree/admin/orders/invoice2.html.haml b/app/views/spree/admin/orders/invoice2.html.haml index 935e370d7a..c55a1f6637 100644 --- a/app/views/spree/admin/orders/invoice2.html.haml +++ b/app/views/spree/admin/orders/invoice2.html.haml @@ -1,4 +1,4 @@ -= wicked_pdf_stylesheet_link_tag "mail" += pdf_stylesheet_pack_tag "mail" %table{:width => "100%"} %tbody diff --git a/app/views/spree/admin/orders/invoice4.html.haml b/app/views/spree/admin/orders/invoice4.html.haml index 6a5c22ac8b..6e92e589d5 100644 --- a/app/views/spree/admin/orders/invoice4.html.haml +++ b/app/views/spree/admin/orders/invoice4.html.haml @@ -1,4 +1,4 @@ -= wicked_pdf_stylesheet_link_tag "mail" += pdf_stylesheet_pack_tag "mail" %table{:width => "100%"} %tbody @@ -102,4 +102,4 @@ = render partial: 'spree/admin/orders/_invoice/order_note' .text-center - = link_to_platform_terms \ No newline at end of file + = link_to_platform_terms diff --git a/app/webpacker/css/mail/all.scss b/app/webpacker/css/mail/all.scss new file mode 100644 index 0000000000..087d2d1310 --- /dev/null +++ b/app/webpacker/css/mail/all.scss @@ -0,0 +1,3 @@ +@import '../admin/globals/palette.scss'; +@import 'email'; +@import 'payments_list'; diff --git a/app/assets/stylesheets/mail/email.scss b/app/webpacker/css/mail/email.scss similarity index 100% rename from app/assets/stylesheets/mail/email.scss rename to app/webpacker/css/mail/email.scss diff --git a/app/assets/stylesheets/mail/payments_list.scss b/app/webpacker/css/mail/payments_list.scss similarity index 100% rename from app/assets/stylesheets/mail/payments_list.scss rename to app/webpacker/css/mail/payments_list.scss diff --git a/app/webpacker/packs/mail.scss b/app/webpacker/packs/mail.scss new file mode 100644 index 0000000000..d4f981e355 --- /dev/null +++ b/app/webpacker/packs/mail.scss @@ -0,0 +1 @@ +@import "../css/mail/all.scss"; diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 37ea1edf62..d6d7a932d6 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -19,6 +19,5 @@ Rails.application.config.assets.precompile += [ 'web/all.js', 'darkswarm/all.js', 'shared/*', - 'mail.scss', '*.jpg', '*.jpeg', '*.png', '*.gif' '*.svg', ] From 1b03528acaae97d545abac32bef4b4d3604f7f0d Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 15:45:54 +1100 Subject: [PATCH 144/270] Switch to v349_with-relaxed-dependencies for select2 It allows us to remove dependency on `rails-sass` Sass files are handled by `shakapacker/wepack`, so we no use for `rails-sass` --- Gemfile | 5 ++--- Gemfile.lock | 42 +++++++++++++++++------------------------- 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/Gemfile b/Gemfile index 44c1d371f1..068c1868b1 100644 --- a/Gemfile +++ b/Gemfile @@ -126,9 +126,8 @@ gem 'angular_rails_csrf' gem 'jquery-rails', '4.4.0' gem 'jquery-ui-rails', '~> 4.2' -# TODO move away from sass-rails, master branch will get rid of dependency, so we can move to -# https://github.com/sass/embedded-host-node -gem "select2-rails", github: "openfoodfoundation/select2-rails", branch: "v349_with_thor_v1" +gem "select2-rails", github: "openfoodfoundation/select2-rails", + branch: "v349_with-relaxed-dependencies" gem 'good_migrations' diff --git a/Gemfile.lock b/Gemfile.lock index 500251293e..a089dcdc10 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,11 +10,10 @@ GIT GIT remote: https://github.com/openfoodfoundation/select2-rails.git - revision: fc240e85fbdf1878ff3c39d972c0cd9a312f5ed4 - branch: v349_with_thor_v1 + revision: 9693e0cc5b04938da46692d3fa83aa8934791981 + branch: v349_with-relaxed-dependencies specs: select2-rails (3.4.9) - sass-rails thor (>= 0.14) GIT @@ -305,7 +304,7 @@ GEM eventmachine (>= 1.0.0.beta.1) email_validator (2.2.4) activemodel - erb (6.0.0) + erb (6.0.1) erubi (1.13.1) et-orbi (1.3.0) tzinfo @@ -330,7 +329,7 @@ GEM webrick (~> 1.7) websocket-driver (>= 0.6, < 0.8) ffaker (2.25.0) - ffi (1.17.2) + ffi (1.17.2-x86_64-linux-gnu) flipper (1.3.6) concurrent-ruby (< 2) flipper-active_record (1.3.6) @@ -515,8 +514,7 @@ GEM net-protocol newrelic_rpm (9.24.0) nio4r (2.7.5) - nokogiri (1.18.10) - mini_portile2 (~> 2.8.2) + nokogiri (1.18.10-x86_64-linux-gnu) racc (~> 1.4) nokogiri-html5-inference (0.3.0) nokogiri (~> 1.14) @@ -575,7 +573,7 @@ GEM hashery (~> 2.0) ruby-rc4 ttfunk - pg (1.6.2) + pg (1.6.2-x86_64-linux) pp (0.6.3) prettyprint prettyprint (0.2.0) @@ -584,7 +582,7 @@ GEM pry (0.15.2) coderay (~> 1.1) method_source (~> 1.0) - psych (5.2.6) + psych (5.3.1) date stringio public_suffix (7.0.0) @@ -686,7 +684,7 @@ GEM logger (~> 1.5) ostruct (~> 0.6) readline (~> 0.0) - rdoc (6.16.0) + rdoc (7.0.1) erb psych (>= 4.0.0) tsort @@ -806,13 +804,6 @@ GEM sanitize (7.0.0) crass (~> 1.0.2) nokogiri (>= 1.16.8) - sass (3.4.25) - sass-rails (5.0.8) - railties (>= 5.2.0) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) sd_notify (0.1.1) securerandom (0.4.1) semantic_range (3.1.0) @@ -824,11 +815,12 @@ GEM semantic_range (>= 2.3.0) shoulda-matchers (7.0.1) activesupport (>= 7.1) - sidekiq (7.2.4) - concurrent-ruby (< 2) - connection_pool (>= 2.3.0) - rack (>= 2.2.4) - redis-client (>= 0.19.0) + sidekiq (7.3.10) + base64 + connection_pool (>= 2.3.0, < 3) + logger + rack (>= 2.2.4, < 3.3) + redis-client (>= 0.23.0, < 1) sidekiq-scheduler (5.0.3) rufus-scheduler (~> 3.2) sidekiq (>= 6, < 8) @@ -876,7 +868,7 @@ GEM railties (>= 5.2) redis (>= 4.0, < 6.0) stringex (2.8.6) - stringio (3.1.8) + stringio (3.2.0) stripe (15.5.0) swd (2.0.3) activesupport (>= 3) @@ -963,10 +955,10 @@ GEM xml-simple (1.1.8) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.7.3) + zeitwerk (2.7.4) PLATFORMS - ruby + x86_64-linux DEPENDENCIES actionpack-action_caching From 7d5db81017416759fd797401f7693dc9289bc733 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 16:32:01 +1100 Subject: [PATCH 145/270] Upgrade to Shakapacker 8.4.0 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- package.json | 2 +- yarn.lock | 11 +++++------ 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 44c1d371f1..6f59e5e92f 100644 --- a/Gemfile +++ b/Gemfile @@ -18,7 +18,7 @@ gem 'activemerchant' gem 'angular-rails-templates' gem 'ransack', '~> 4.1.0' gem 'responders' -gem 'shakapacker', '7.2.3' +gem 'shakapacker', '8.4.0' # Indirect dependency but we access it directly in JS specs. # It turns out to be hard to upgrade but please do if you can. diff --git a/Gemfile.lock b/Gemfile.lock index 500251293e..f010a20e19 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -816,7 +816,7 @@ GEM sd_notify (0.1.1) securerandom (0.4.1) semantic_range (3.1.0) - shakapacker (7.2.3) + shakapacker (8.4.0) activesupport (>= 5.2) package_json rack-proxy (>= 0.6.1) @@ -1085,7 +1085,7 @@ DEPENDENCIES rubocop-rspec_rails sd_notify select2-rails! - shakapacker (= 7.2.3) + shakapacker (= 8.4.0) shoulda-matchers sidekiq sidekiq-scheduler diff --git a/package.json b/package.json index 4ec4289707..1ee8774ec7 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "sass-embedded": "^1.96.0", "sass-loader": "^16.0.6", "select2": "*", - "shakapacker": "7.2.3", + "shakapacker": "8.4.0", "shortcut-buttons-flatpickr": "*", "stimulus": "*", "stimulus-autocomplete": "*", diff --git a/yarn.lock b/yarn.lock index 30864b60f9..1129599ede 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3951,7 +3951,7 @@ glob@^10.3.10: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6591,12 +6591,11 @@ setprototypeof@1.2.0, setprototypeof@~1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -shakapacker@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-7.2.3.tgz#12613e8ca3139e47d42003f8d01846dea28f6c40" - integrity sha512-+qF74Y6+hEARqtsmJmBtdc2L0q6eXO21PlPsvtw6aqoxtqhM2VpCCDt51/5Cqnj/5IyEOEICZqStRCSO/q38hg== +shakapacker@8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/shakapacker/-/shakapacker-8.4.0.tgz#be37a2adba5a090f581811b8c0c1a00f2e227580" + integrity sha512-ZfuxfHxy5tdjv7tCdRZHJKJQLDFwvFXOVBVUj150zgNuRKUlOAyXzOBp9/G5hUhu4MLzuPAif/fuKOdjnZeVtw== dependencies: - glob "^7.2.0" js-yaml "^4.1.0" path-complete-extname "^1.0.0" From 34f9e08824280dcc9a81cc6c32c8cb96911f952b Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 16:57:19 +1100 Subject: [PATCH 146/270] Add yarn as the package manager --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 1ee8774ec7..a6edce4a43 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "url": "https://github.com/openfoodfoundation/openfoodnetwork" }, "license": "AGPL-3.0", + "packageManager": "yarn@1.22.2", "dependencies": { "@babel/core": "^7.28.5", "@babel/plugin-transform-runtime": "^7.28.5", From cc9cb966b538b10f2ca25a48b8d2ce22f452a824 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 16 Jan 2026 16:58:42 +1100 Subject: [PATCH 147/270] Fix images/font path Now `additional_paths` are stripped like `source_path` --- app/views/admin/producer_properties/_form.html.haml | 2 +- app/views/components/_spinner.html.haml | 2 +- app/views/home/_tagline.html.haml | 2 +- app/views/layouts/darkswarm.html.haml | 2 +- app/views/layouts/registration.html.haml | 2 +- app/views/producers/_fat.html.haml | 2 +- app/views/registration/steps/_limit_reached.html.haml | 2 +- app/views/shared/_footer.html.haml | 2 +- app/views/shared/menu/_cart.html.haml | 2 +- app/views/shared/menu/_mobile_menu.html.haml | 4 ++-- app/views/shared/menu/_signed_in.html.haml | 2 +- app/views/shared/menu/_signed_out.html.haml | 2 +- app/views/shop/products/_searchbar.haml | 2 +- app/views/shopping_shared/tabs/_contact.html.haml | 2 +- .../spree/admin/payments/source_forms/_gateway.html.haml | 2 +- app/views/spree/admin/product_properties/index.html.haml | 2 +- app/views/spree/admin/states/index.html.haml | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/views/admin/producer_properties/_form.html.haml b/app/views/admin/producer_properties/_form.html.haml index 743bbdbd86..05ad2d874d 100644 --- a/app/views/admin/producer_properties/_form.html.haml +++ b/app/views/admin/producer_properties/_form.html.haml @@ -1,6 +1,6 @@ %fieldset.no-border-top .add_producer_properties - = image_pack_tag 'images/spinner.gif', :plugin => 'spree', :style => 'display:none;', :id => 'busy_indicator' + = image_pack_tag 'spinner.gif', :plugin => 'spree', :style => 'display:none;', :id => 'busy_indicator' %table.index.sortable{"data-sortable-link" => main_app.update_positions_admin_enterprise_producer_properties_url(@enterprise)} %thead %tr diff --git a/app/views/components/_spinner.html.haml b/app/views/components/_spinner.html.haml index dc86cc3d12..b4492c4b14 100644 --- a/app/views/components/_spinner.html.haml +++ b/app/views/components/_spinner.html.haml @@ -1,2 +1,2 @@ = cache do - %img.spinner{ src: image_pack_path("images/spinning-circles.svg"), style: "max-width: 100%" } + %img.spinner{ src: image_pack_path("spinning-circles.svg"), style: "max-width: 100%" } diff --git a/app/views/home/_tagline.html.haml b/app/views/home/_tagline.html.haml index c485337901..56dc937f25 100644 --- a/app/views/home/_tagline.html.haml +++ b/app/views/home/_tagline.html.haml @@ -3,7 +3,7 @@ .row .small-12.text-center.columns %h1 - %img{src: image_pack_path("images/logo-white-notext.png"), title: Spree::Config.site_name} + %img{src: image_pack_path("logo-white-notext.png"), title: Spree::Config.site_name} %br/ %a.button.transparent{href: "/shops"} = t :home_shop diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index c0a49f953a..0d048daaa7 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -13,7 +13,7 @@ - else = favicon_link_tag "/favicon-staging.ico" %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} - %link{href: asset_pack_path("static/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} + %link{href: asset_pack_path("static/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} = render "layouts/matomo_tag" = language_meta_tags diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index a99a45870f..a89f6f8857 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -20,7 +20,7 @@ = csrf_meta_tags - %body.off-canvas{ style: "background-image: url(#{image_pack_path('images/tile-wide.png')})", "data-turbo": "false" } + %body.off-canvas{ style: "background-image: url(#{image_pack_path('tile-wide.png')})", "data-turbo": "false" } .off-canvas-wrap{offcanvas: true} .inner-wrap diff --git a/app/views/producers/_fat.html.haml b/app/views/producers/_fat.html.haml index 92d026abab..bf580f4b06 100644 --- a/app/views/producers/_fat.html.haml +++ b/app/views/producers/_fat.html.haml @@ -41,7 +41,7 @@ %p.word-wrap{"ng-if" => "::producer.whatsapp_phone"} %a{"ng-href" => "{{::producer.whatsapp_url}}", target: "_blank"} - %img{ src: image_pack_path("images/social-logos/whatsapp.svg") } + %img{ src: image_pack_path("social-logos/whatsapp.svg") } %span{"ng-bind" => "::producer.whatsapp_phone"} %p.word-wrap{"ng-if" => "::producer.email_address"} diff --git a/app/views/registration/steps/_limit_reached.html.haml b/app/views/registration/steps/_limit_reached.html.haml index edadf76aaa..6f07dd80b9 100644 --- a/app/views/registration/steps/_limit_reached.html.haml +++ b/app/views/registration/steps/_limit_reached.html.haml @@ -6,7 +6,7 @@ %h4= t(".message") .row .small-12.medium-3.large-2.columns.text-right.hide-for-small-only - %img{:src => image_pack_path("images/potatoes.png") } + %img{:src => image_pack_path("potatoes.png") } .small-12.medium-9.large-10.columns %p = t(".text") diff --git a/app/views/shared/_footer.html.haml b/app/views/shared/_footer.html.haml index 915455b5e7..5d121a4ea2 100644 --- a/app/views/shared/_footer.html.haml +++ b/app/views/shared/_footer.html.haml @@ -4,7 +4,7 @@ .row .small-12.columns.text-center .logo - %img{src: image_pack_path("images/logo-white-notext.png") } + %img{src: image_pack_path("logo-white-notext.png") } .row .small-12.medium-8.medium-offset-2.columns.text-center .alert-box diff --git a/app/views/shared/menu/_cart.html.haml b/app/views/shared/menu/_cart.html.haml index 79217c8627..eb5fe0a563 100644 --- a/app/views/shared/menu/_cart.html.haml +++ b/app/views/shared/menu/_cart.html.haml @@ -4,6 +4,6 @@ %span = t '.cart' %span.count - %img{ src: image_pack_path("images/menu/icn-cart.svg") } + %img{ src: image_pack_path("menu/icn-cart.svg") } %span {{ Cart.total_item_count() }} diff --git a/app/views/shared/menu/_mobile_menu.html.haml b/app/views/shared/menu/_mobile_menu.html.haml index be90bbd6e3..544cb65631 100644 --- a/app/views/shared/menu/_mobile_menu.html.haml +++ b/app/views/shared/menu/_mobile_menu.html.haml @@ -2,7 +2,7 @@ %nav.tab-bar.show-for-medium-down %section.left %a.left-off-canvas-toggle.menu-icon - = image_pack_tag "images/menu/btn-menu-mobile.png" + = image_pack_tag "menu/btn-menu-mobile.png" %section.left .ofn-logo @@ -18,7 +18,7 @@ %span = t '.cart' %span.count - = image_pack_tag "images/menu/icn-cart.svg" + = image_pack_tag "menu/icn-cart.svg" %span {{ Cart.total_item_count() }} diff --git a/app/views/shared/menu/_signed_in.html.haml b/app/views/shared/menu/_signed_in.html.haml index f6456b4b21..8d5fec0fae 100644 --- a/app/views/shared/menu/_signed_in.html.haml +++ b/app/views/shared/menu/_signed_in.html.haml @@ -1,7 +1,7 @@ %li.user-menu.has-dropdown.not-click %a{href: "#", class: "top-bar--menu-item-with-icon"} - %img{ src: image_pack_path("images/menu/icn-profile.svg") } + %img{ src: image_pack_path("menu/icn-profile.svg") } %span = t '.profile' diff --git a/app/views/shared/menu/_signed_out.html.haml b/app/views/shared/menu/_signed_out.html.haml index b8aead9de7..d6913ec554 100644 --- a/app/views/shared/menu/_signed_out.html.haml +++ b/app/views/shared/menu/_signed_out.html.haml @@ -1,6 +1,6 @@ = cache_with_locale do %li#login-link{ "data-controller": "login-modal" } %a{"auth": "login", "data-action": "click->login-modal#call" } - %img{ src: image_pack_path("images/menu/icn-login.svg") } + %img{ src: image_pack_path("menu/icn-login.svg") } %span = t 'label_login' diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index 25ce5fed3c..f069c0bd6a 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -9,7 +9,7 @@ "ng-debounce" => "200", "disable-enter-with-blur" => true} %a.clear{ type: 'button', "focus-search": true, "ng-show": 'query', "ng-click": 'clearQuery()' } - = image_pack_tag "images/icn-close.png" + = image_pack_tag "icn-close.png" .hide-for-large-up %button{ type: 'button', "ng-click": 'toggleFilterSidebar()' } diff --git a/app/views/shopping_shared/tabs/_contact.html.haml b/app/views/shopping_shared/tabs/_contact.html.haml index edf32a754f..de78ddcfd1 100644 --- a/app/views/shopping_shared/tabs/_contact.html.haml +++ b/app/views/shopping_shared/tabs/_contact.html.haml @@ -27,7 +27,7 @@ %br - if current_distributor.whatsapp_phone.present? %a{href: current_distributor.whatsapp_url, target: "_blank" } - %img{ src: image_pack_path("images/social-logos/whatsapp.svg") } + %img{ src: image_pack_path("social-logos/whatsapp.svg") } = current_distributor.whatsapp_phone %br - if current_distributor.website.present? diff --git a/app/views/spree/admin/payments/source_forms/_gateway.html.haml b/app/views/spree/admin/payments/source_forms/_gateway.html.haml index 019021c9c8..ac20d73609 100644 --- a/app/views/spree/admin/payments/source_forms/_gateway.html.haml +++ b/app/views/spree/admin/payments/source_forms/_gateway.html.haml @@ -41,5 +41,5 @@ %a.info.cvvLink{href: "/content/cvv", target: "_blank"} (#{t(:what_is_this)}) .nine.columns - = image_pack_tag 'images/credit_cards/credit_card.gif', class: 'credit-card-image' + = image_pack_tag 'credit_cards/credit_card.gif', class: 'credit-card-image' .clear diff --git a/app/views/spree/admin/product_properties/index.html.haml b/app/views/spree/admin/product_properties/index.html.haml index 593c2e376a..cd07017706 100644 --- a/app/views/spree/admin/product_properties/index.html.haml +++ b/app/views/spree/admin/product_properties/index.html.haml @@ -12,7 +12,7 @@ = form_for @product, url: admin_product_url(@product, @url_filters), method: :put do |f| %fieldset.no-border-top .add_product_properties - = image_pack_tag 'images/select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' + = image_pack_tag 'select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' %table.index.sortable{"data-sortable-link" => update_positions_admin_product_product_properties_url} %thead diff --git a/app/views/spree/admin/states/index.html.haml b/app/views/spree/admin/states/index.html.haml index b0956a725b..b9e72fa193 100644 --- a/app/views/spree/admin/states/index.html.haml +++ b/app/views/spree/admin/states/index.html.haml @@ -11,6 +11,6 @@ - databaseurl = "#{admin_states_path(format: :js)}?country_id=" %select#country.observe_field.select2.fullwidth{"data-base-url" => databaseurl, "data-update" => "#state-list"} = options_from_collection_for_select(@countries, :id, :name, @country.id) -= image_pack_tag 'images/select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' += image_pack_tag 'select2-spinner.gif', plugin: 'spree', style: 'display:none;', id: 'busy_indicator' #state-list = render partial: 'state_list' From f35b2be228eb73e195630a1e2ae25fe20011d360 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Sun, 18 Jan 2026 14:15:20 +1100 Subject: [PATCH 148/270] Upgrade dependencies --- yarn.lock | 162 +++++++++++++++++++++++++++--------------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1129599ede..3abc1c06b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1751,94 +1751,94 @@ resolved "https://registry.yarnpkg.com/@orchidjs/unicode-variants/-/unicode-variants-1.1.2.tgz#1fd71791a67fdd1591ebe0dcaadd3964537a824e" integrity sha512-5DobW1CHgnBROOEpFlEXytED5OosEWESFvg/VYmH0143oXcijYTprRYJTs+55HzGM4IqxiLFSuqEzu9mPNwVsA== -"@parcel/watcher-android-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" - integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== +"@parcel/watcher-android-arm64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz#88c67bde2c3efa997a0b1fea540080c6ade0322c" + integrity sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g== -"@parcel/watcher-darwin-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" - integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== +"@parcel/watcher-darwin-arm64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz#d9dc037cff8a4ab7839a79c5287a6e6660f7ab27" + integrity sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw== -"@parcel/watcher-darwin-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" - integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== +"@parcel/watcher-darwin-x64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz#da0e13e16ee6d378242e2cfb469d72667624383a" + integrity sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg== -"@parcel/watcher-freebsd-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" - integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== +"@parcel/watcher-freebsd-x64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz#feb7cc9ec680bae3e91dddcdb4fe1c399ed52cc1" + integrity sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q== -"@parcel/watcher-linux-arm-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" - integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== +"@parcel/watcher-linux-arm-glibc@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz#fa4e9cf8228c8c433e2f035e8b16aa299d892a78" + integrity sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw== -"@parcel/watcher-linux-arm-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" - integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== +"@parcel/watcher-linux-arm-musl@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz#9ee6792e2d8810af9871ee5bbc2aa04e0b079d62" + integrity sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ== -"@parcel/watcher-linux-arm64-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" - integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== +"@parcel/watcher-linux-arm64-glibc@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz#624c6d874d99afa79305720f96a0c233d4ad7fde" + integrity sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw== -"@parcel/watcher-linux-arm64-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" - integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== +"@parcel/watcher-linux-arm64-musl@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz#5341e88b9e645d31c015ed40f384e60e49bd74d2" + integrity sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ== -"@parcel/watcher-linux-x64-glibc@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" - integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== +"@parcel/watcher-linux-x64-glibc@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz#be5bcc49d3f6d21cc81bb531970a05d3721e385c" + integrity sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA== -"@parcel/watcher-linux-x64-musl@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" - integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== +"@parcel/watcher-linux-x64-musl@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz#bffd3895b1f0cc8fd1436e409fd65d0a901281c0" + integrity sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg== -"@parcel/watcher-win32-arm64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" - integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== +"@parcel/watcher-win32-arm64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz#7fb8aedea5b34ba97a01e1555929d01f4eb72fe4" + integrity sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ== -"@parcel/watcher-win32-ia32@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" - integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== +"@parcel/watcher-win32-ia32@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz#f7f94ebdb21dedf37b12e030a82d4211798a1c26" + integrity sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg== -"@parcel/watcher-win32-x64@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" - integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== +"@parcel/watcher-win32-x64@2.5.4": + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz#8d895c9723f7fffdf4b360fd1becf1b6bcb571df" + integrity sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw== "@parcel/watcher@^2.4.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" - integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + version "2.5.4" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.4.tgz#a6575b0a018b4e263589c1e7bc2ceb73c1ee84de" + integrity sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ== dependencies: - detect-libc "^1.0.3" + detect-libc "^2.0.3" is-glob "^4.0.3" - micromatch "^4.0.5" node-addon-api "^7.0.0" + picomatch "^4.0.3" optionalDependencies: - "@parcel/watcher-android-arm64" "2.5.1" - "@parcel/watcher-darwin-arm64" "2.5.1" - "@parcel/watcher-darwin-x64" "2.5.1" - "@parcel/watcher-freebsd-x64" "2.5.1" - "@parcel/watcher-linux-arm-glibc" "2.5.1" - "@parcel/watcher-linux-arm-musl" "2.5.1" - "@parcel/watcher-linux-arm64-glibc" "2.5.1" - "@parcel/watcher-linux-arm64-musl" "2.5.1" - "@parcel/watcher-linux-x64-glibc" "2.5.1" - "@parcel/watcher-linux-x64-musl" "2.5.1" - "@parcel/watcher-win32-arm64" "2.5.1" - "@parcel/watcher-win32-ia32" "2.5.1" - "@parcel/watcher-win32-x64" "2.5.1" + "@parcel/watcher-android-arm64" "2.5.4" + "@parcel/watcher-darwin-arm64" "2.5.4" + "@parcel/watcher-darwin-x64" "2.5.4" + "@parcel/watcher-freebsd-x64" "2.5.4" + "@parcel/watcher-linux-arm-glibc" "2.5.4" + "@parcel/watcher-linux-arm-musl" "2.5.4" + "@parcel/watcher-linux-arm64-glibc" "2.5.4" + "@parcel/watcher-linux-arm64-musl" "2.5.4" + "@parcel/watcher-linux-x64-glibc" "2.5.4" + "@parcel/watcher-linux-x64-musl" "2.5.4" + "@parcel/watcher-win32-arm64" "2.5.4" + "@parcel/watcher-win32-ia32" "2.5.4" + "@parcel/watcher-win32-x64" "2.5.4" "@pkgjs/parseargs@^0.11.0": version "0.11.0" @@ -2703,9 +2703,9 @@ base64id@2.0.0, base64id@~2.0.0: integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== baseline-browser-mapping@^2.9.0: - version "2.9.14" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz#3b6af0bc032445bca04de58caa9a87cfe921cbb3" - integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg== + version "2.9.15" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz#6baaa0069883f50a99cdb31b56646491f47c05d7" + integrity sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg== batch@0.6.1: version "0.6.1" @@ -2851,12 +2851,12 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001760: +caniuse-lite@^1.0.0: version "1.0.30001760" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== -caniuse-lite@^1.0.30001759: +caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: version "1.0.30001764" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001764.tgz#03206c56469f236103b90f9ae10bcb8b9e1f6005" integrity sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g== @@ -3358,10 +3358,10 @@ destroy@1.2.0, destroy@~1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== detect-newline@^3.1.0: version "3.1.0" @@ -5082,7 +5082,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -5453,7 +5453,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: +picomatch@^4.0.2, picomatch@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== From e6d556c80974e6e3f6190b216ce4c9d20b25ef7d Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 21 Jan 2026 15:16:48 +1100 Subject: [PATCH 149/270] Update locale cache key to invalidate cache --- app/helpers/application_helper.rb | 2 +- spec/helpers/application_helper_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4da992b8ef..ae1fb6849c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -74,6 +74,6 @@ module ApplicationHelper # Update "v1" to invalidate existing cache key def cache_key_with_locale(key, locale) - Array.wrap(key) + ["v2", locale.to_s, I18nDigests.for_locale(locale)] + Array.wrap(key) + ["v3", locale.to_s, I18nDigests.for_locale(locale)] end end diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 59dd6c4013..9d68a60816 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -87,13 +87,13 @@ RSpec.describe ApplicationHelper do it "appends locale and digest to a single key" do expect( helper.cache_key_with_locale("single-key", "en") - ).to eq(["single-key", "v2", "en", en_digest]) + ).to eq(["single-key", "v3", "en", en_digest]) end it "appends locale and digest to multiple keys" do expect( helper.cache_key_with_locale(["array", "of", "keys"], "es") - ).to eq(["array", "of", "keys", "v2", "es", es_digest]) + ).to eq(["array", "of", "keys", "v3", "es", es_digest]) end end end From cd956daddae27a765f715a20efb2241bc4568d81 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 27 Jan 2026 09:23:32 +1100 Subject: [PATCH 150/270] Use factory to create address It removes dependency on hard coded country and state id --- spec/system/consumer/registration_spec.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spec/system/consumer/registration_spec.rb b/spec/system/consumer/registration_spec.rb index ad37f4a8c1..13c7916a21 100644 --- a/spec/system/consumer/registration_spec.rb +++ b/spec/system/consumer/registration_spec.rb @@ -165,11 +165,7 @@ RSpec.describe "Registration" do end before do - address = Spree::Address.create!(firstname: 'John', lastname: 'Doe', - address1: '1400 Sesame street', zipcode: '3070', - city: 'Southcote', phone: '12 3456 7890', - country_id: 1, state_id: 1, company: 'unused') - Enterprise.create(name: 'My Awesome Enterprise', address:, owner:) + Enterprise.create(name: 'My Awesome Enterprise', address: create(:address), owner:) end it "checks that button after failure is still enabled" do From 5e57325ce24f188a7a3c042432017ac854c417e2 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Tue, 27 Jan 2026 09:53:39 +1100 Subject: [PATCH 151/270] Use ruby platform for bundler --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a089dcdc10..ee7f2c211f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -329,7 +329,7 @@ GEM webrick (~> 1.7) websocket-driver (>= 0.6, < 0.8) ffaker (2.25.0) - ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.2) flipper (1.3.6) concurrent-ruby (< 2) flipper-active_record (1.3.6) @@ -514,7 +514,7 @@ GEM net-protocol newrelic_rpm (9.24.0) nio4r (2.7.5) - nokogiri (1.18.10-x86_64-linux-gnu) + nokogiri (1.18.10) racc (~> 1.4) nokogiri-html5-inference (0.3.0) nokogiri (~> 1.14) @@ -573,7 +573,7 @@ GEM hashery (~> 2.0) ruby-rc4 ttfunk - pg (1.6.2-x86_64-linux) + pg (1.6.2) pp (0.6.3) prettyprint prettyprint (0.2.0) @@ -958,7 +958,7 @@ GEM zeitwerk (2.7.4) PLATFORMS - x86_64-linux + ruby DEPENDENCIES actionpack-action_caching From 756e876f6121d60de8d44033a922420a4033ba24 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 27 Jan 2026 14:53:22 +1100 Subject: [PATCH 152/270] Update ERD --- doc/erd.pdf | Bin 83113 -> 83671 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/erd.pdf b/doc/erd.pdf index 4b4299cc51a080e6690f4f18308f651638ec2a3f..829c46a4d5db4c3ae1cd4a81bd103611e5ad7676 100644 GIT binary patch literal 83671 zcmZs?V{m3&*Dc)X?%1~Nj&0jk$F^-JS8Ut1ZL8ySZ2Jno-1l>y_j~Kq`L(Nd?LTX; zG1nS%j4?^&g+*x@=-8l0n=Yzfp_mDN5!f17Kyh;u&`TTJm^zseuzbBzgd!jypcgf_ zax!-KdRpl_84DX5+8P-{@$y1BIyo5YTSK{JZgg43kgz$>z47>p_-2Ata*kOtM*sMM z*VDZ71Aj%m=6z@cL6oNftLpGDN!0S9#&<7#n>KB%@-(|LZJu9VZh67T_}3^5SfIUv zEAjhNbUwZZR!K)_%YZLDaiH(Z$E9x<##Q&Hx!cF9z{vvlOu}8A_ebdfb5V+aB9qR{QHae#ocSBmEO6_p9A!wCarR&5Y~Y9sJYZ(wkM!4;`QG zNnc#UiJY=%k4MuN9+(X?uSfEL$p-wZ&$Fjb@EHXl$LFi<@yw?u&L`PNQNCZ!eZ9y0 zy5~i9*Y?%x&PPUCb{o*y;^^#|+M-?WX1Qzit+?$~13k?- zJenS#k9!JN?1Qq$^8*OWXRu#a4i(3W%y)d{i=Q%g^%2*7H*>%9Is560^KsX6IlSQZ z+}%S?le`*Q_S{^j1@u4HwVX}s%i;!6n83(|B%H#?XVKbz%2=GlpVEl!R`BMsaR zAWN;MxwpQy5K$A5ESlqpSzDtZ0f`@Qo0dAlmQc(3%LB% zLO$kDYovFUCOiv{aoOG?kj?4mC#)+{*7sep6SI#wZa$e}mKQD?4#I1$uRrtj`bI(7 z=&&&`UO>FSuKR=9zm3X|1}+ z&@KCG?+*bF5LnmY=di(0@?0W2P*ef{(|4h%sCf!T8XoQjCl)4jXf-d?L1+b|S{Hmu z^_HL==(k56pH8ZN=j)q{S+viduzqzu&*;BfTh!!wK)5U)-LcUK=N*(o{HGO{c;Wy($&kfh@9#9Fhh0+Ag>d?h4=pChqkF>p4>VL?a-i)LkL#$u?u6Y zoBcy{;)wP8&b_pqgtw@KOtg8yzV2FygiXEfzOa&xIk^I&_h{o$MwPrr3$kqz=Ox%l zkaxDQENV8G(dIBkQ)X{PMWlOx`quK{u`}YTq1?H+N7(zc_DLhnF1hg*N-fcwK455@ z<;sj5S7uCDhBEig@PYVK-9KHu=0&qse16%UU!wj){iFil7p)Xp*hi zU>cg{E${);c#_Pyr7?SBF{=oFg5zeH*5bHEZZ~57b*2lXTKa|A`B3_gxH0Ch)AYmd zB9iY;A%$}F7=?u3t|o%I##N6g^-nyBe0AxbO%47I3#7uj3S&#-*`kqb9*^Y4WTkl7 zVNlaKI6K2@2}FXXFUzYZ)3F{VWTZ!WJeaEOA9u2UfuHSx{%9VN&R`yRSyMFYCMQ;$ zvLNL!53q-_9UN3Gg;0~js(uP2#`s9zidN4Sj=h2L;rC)S#T{?ClnBAo(1c^M=XT5A z4zW&6o5&eeV@tZ`(%iub4ptUwCPb%6_*uT;ZnQ09MSP1Mp_s9vmLZaVQY>g3o58dG zx%k~Le#2mi-LrQf3;X>$76c|S622}7?~_ID_d$En-=%2^SRx@wp<>C^CWi(h+1*f! zwfY(rz;wws-wkS5!t3aaLc)wtJ)^r{-9@H0aC2+wJ#N9YYq7jh=ruHc5IUuIfxcER zMG5s8RHDiO!iDRRG#Bas<$j)3iGtc!R@-lHp``)vz_9DP$3MWrK!4&oyO5WPNCCDu zA1fnJFg79WXW+glCp8wQjzv8GG}u~$_;-#ek42{Z z*k3~k+8S$c3rsUl57OmA?y}kUMNI||pM&)PUs*B*os;&cT5t_%+%PBOW#^lxN3M3& zil?>S^!la3q+ZNYnayp&xjjXK%A8d_6(-xd!#LH}x#oV1h>VRmtdxrC5)qeZHIfV= z<^iJn4Hk-rU@bO)Z2zHl?hcq+$8b&9t_{_UU`=UXa02oxbh6c|6nlz!=ld}j#nW%v zM88wTUu=}FHkgu64#3qD4|-&E9VpiSTnwX&2+@wWO2WGXO!5#`dEX1aw#%L}6`M5V zAe210naL4YMBou}qL32cg-MR_`SR+C#F~`*iD&Qj}v0^dD{Z3oKmllRKPq71Hp^XWRHdsg%DgvZtE@hYY*NSevumCWz- z{@(i|4x`|p;Me8)aP3DOqZ!P|MHOdQl5fm$WRy*$F`hX0T~<_%*^CQKyIN{?;AlN> z|GZVU$~sK4uYhvotdbvhWnEs#u`!e53O^dIM9`pWc#u69<6Xp|HWZ* z8WW-fGfJWSnt>3kh-_t?$jD%yprFCK$1ojwzy7Y2P=4eh8rN0n7Cj;NCq&b$;bXO* zwC?6>o9QQ;5HS0iRB8vkY$!6iNL?Le*V&opBtVDCF)*cq)0V}?oK0o!&#gKP1b&1= zw5wP7`DxUxCmyVmR?RcA@k3>acLZNXVYfWMgpO;i?}By8m!gwayE9!PVUey!Zf5E> zR+h4y=_-S}vp70)g*`%jCGYgk5ve<rX~=&3~?7gs|vO$;ucl_Y0Z>iqlXNO8c%8c z^_z&u|BU7v?*1ktZ1CYRjA^|Yx`~sSZUlX*_WA@|uwCsD64+>TD&1gi>$!_j1AKj3 zV_sDPL~Ync$M%+nsU`!JS-0*~9kJ`6*{EOYIdrohx~6qeXdTTD6;>x5WzHVi0EtZJ;Z1y|6yQ|W;}hPgG2+41mM zAIRlad9Yo1cx@MHYHS5HV-_qF;IF1P;Y zVOAWLoMH1 z+ZvF2>s)lz{By^b25H~h-5ec8e*oY1(S=vP!WNM$-3)8vU^@At92C3m;0~spieP?;Xvq{$ z^R?|B1If3%gzz>@Zk%47+2r-o!8Tv#`1-p8 zsEmRR^K`Z-YeN+S*YpYL8R7Xk?{uDdv1o>{n>u0ofBxCY{8k98(VRW=JXJ!j1U-pS zsd#j({Mv8hS)Cw}=X3A%NmB`1Rq=eMU|1Fujyh2^Tw-u&$h3zu%nr9XjTbRE+7*Aa z!>pzJ*VF>QuCohw>;7v5ZOekiw+Mh3+@A)EEh3k)+3a_e;K!Awg3PBwuIb0Ab1tD7 zat_QS!~uz7!>iJ1om+Pci zuDf~GXja1goq{mL@RnAk1a4V(?*~xs>c4N2nG(K%ySC9z6^e>eSl2Qh)Ab9HEA?hp4$!|x7->D0Ug=C+N|l>QXw+13AO0$mT4FRr z>{#sQLy}5#%d5E5e-_~_>>1N#z>(1XyVf;*O5US*(hVcTHC>@hTqwT?!1bu{NbXF` zxp01Kp7nKa9K)Q3HidkS{}X-r#C>|%cC9gEDlJWFb0*R-klb3;@|2)m*g4@k<30yp ze;VTi_!9va@PPw7O1>%35Q)&7Ien(mSk>LfeqqD@;ju%EmWkuIW!~X{FheQ$JB+?2d9qSqH-TNe*HK6WF+p1#~(bwjo|=iPi^yP8GO2YGo-LP0=&LUHJF1v%C>XSqJruQ0Cbf&;#}LfTF>k!aRKW(_#< zJjY5wYMCD@hqC5IxOs^CK8B+@~v(`h6Hq=%k^hje0;`=4ri_Qj8YX2^k$@?_;rh7FAi zxyI<;cjo}#$c9BpCexKq=gkKo5tw1U6)&knDW<3C4wwxLgy=HF(JT_9)DN}u0qjOD z8A)y3n=7K^0CjeUWTbh~lUPb#R%+=1M2v8$m$1xBaZcu`Nfbn6)i9HN{b*QF#oF7s z9oHXaoKzU#hSW(2Ka3~}$-=mr)$yG0BYI`Xv}-JUUIP4J zLG-&n(mt6#9N$Fnwr6RUNZmGVqeGUvf|Uq=C`6B~rj>bu?_D&I`J#;}HU)SNl)q#y zaHyD3m|r4C?Y0|?=`m3DP1f45_(S64Zo2k?aW&^$BvVLBk!Ag}B3`94MGySV2htah zP0411{DV4+>ZQ^3bmSY~e#(hT8qCK-x@0ut9Cxk6E^=d<6vyt-6cD}GYf{sgqq2uO za(AVG?L^fgrcle#nuZ(3LuyUu;TR9zJ4@{EecAimc~;5PgZwZ_#f?mIy@*?qnv0_n z3ee*~CT{w`%H$+^uL7mXL%9nAAQ_~exOA@VjMcaiX^Z@rH0}SGfm!BKNy~i=zq(MP zz%xO2jjW5~dXF2>+U;`Ey@bmj<8m(Cr6TnrzJQ9OYRqEG1B_g&WRxRW-e=XSS2}UM z8RE)dI*Dr^#86WV4Wq6kc^Hcv4Q0v0zty71L*V!v>&VaaS??aBuWmR_WMM$vLn~@| zbqKj2o*t^~@^bXRQX3gvg3HSBwe?^QHC_tn- z0jM9IMzYhQo?MYRarBK#JPqcsy3fOvkMAY&0ND+-09K{Pi_?P#B{p#DGf=m|&c6o;WzTAyj5 zc_Z6v5-8Sc^=(A2kXuRMQq=&gLOU_nn}-UIAe>GwN15sCmfUp5W$f+itj|mINf8M( zYIO_cN_cd66BnYhS8y)lSc}3Atrlyl;)rOa!TYup-NjC;Gna4OIqyAQJq+1Zwv0OP zFp&>}>Kh_7a$&Mwv}ZAJS%^n3mKkHbvD`iJ%Px3@@YF)u4*TWLP-v$yQh*y-nT!r> z@bVlUtYX~5utNoSA2*1PmhU<@cztx8s?UPQ#w3`3qR+(o0{)gmcG794+X_P*nf__a zA@uZjWj>j9qFri@24){5dPher+zU<+OtK#i04gllcmP-h2YxoItRR0ZJxlqowRoa9 z9$C>nge1v~+9MJl;u0p7>7TL%C1OT;4b=tl4qT-zi*RsaIAX`KWR8F8K0qsSHsBDG zJ6Zh9N(;5Ra^MTQ4z;0)=bs2*`=AV;mQok;1MP~##zLCYq$JxLXak@)Tn>F;Sr=pL zGh@x7X*lPPi&V(`@4(CR$W#dO8vDuxo)GZz)w->Vhl7I9C=;7k9wPjxeP4SiNe{&d9lJ@Ov(g_mrJ+g!L|n^*Ml6&p z0+J_@G)aFt8E^mdbk1P|uo6}t)Sel1Y7vFkwq*a%F&0ijNtpLc*&XQWIIKjfb_6onug5TlFIfm(h2S@Y7H65pA3@QB%Pca>Sc2gXTU}(V}@Q#c^nn3!JWqs@D2{EYtPROa_Bc z^D*7k4TbzS20eXW+fMgmVb_vE2hel)po4|J<3Y`pNnn{BG2y(%HP8_Yr({)qyD0-Y z7FP(|9&v96!9e3FPZ5>OH$bzgAv?AuGz;yh4~6I<8EM{ zJ5$jG{+FtzHu{{l!pH9EX|-G}DZZ+D!4P#&V4UC&h(YMqVLQS!>^`)pH#sYIM-R!X zl}&^M8XX^?B`D?g`#e-6<_6{3cV6 z8+LHxI|!I;(ZwC_*1`T>89B`tTHdXeO?L|%oVNGTK?g15!n(9WE3T`1RoXa7+E1ia z6C+4JVnT$n8uFZX)RnmA*swq5ms@RlX4H7-;6+@4Oyy;38 zH~R`{;=w5!6aJFE{I(8&Bjn+!nZWa@t?X08sO!8|;k~(vJFRpPyE!1Gm@;x@ zZP7W0e3m>-l=4i|tAZnL{Nlv=M4f=6O^9pn)-M36V;^8MxXUf;((=qhG|fR+)_Ht8RceRrI0apr5HOzDReAcYQS6<;w&-eIx;iCs z=EUxDM^7jsWN6Wc) zI`<)49R)zCwRi%uQRy7nZ|SYQ78jkCm)c~FsZQJ^vdo&G>ZD3JkuJo@`JWw{yRM8- zfizs|*`Y@s`yL_xh4&r*ZafjuS%AT<;u$nCg_orFLBo`B5>@M&r12oiJV(47*&P&s zjoK1p#QbLJ3aTEL3xv~HZfiV+2zeqcv5rF_MS49a-2(KzkhfV;vc|)&9=-@Alc@bt zlG-`pVcqOq-+cwo{6Su)LN^tXM?B$_-#Om;Ck_wB z-OyzJsrUBHN+#*CY7&Mpl(We*(-J1hWnXKp*jS3RCJJVeXraobbaiEe!D7t$3x`cD zcsWi;m&=n`+gxz5=zN059rYXa7T*KeBhi%t{w-cJZ(OM^V=6hG#I}id$Z>{o;|YEd zm1qm_v3tsb-(HipJ&$713-g-iN?#;TePyqGSzV6L?i}tolMq5cYk?-g+^HPC7$KZ* z+I2ji;K=B5(Ml9D>%K3WOqfG9-hvraWD7RT9C}Y8*iX7Lf~lcl*_%Hu87^X&J%77E=+GtdH}7u#PQ5Ji=_<>~tb(ff81ht-?u|+^8ee?S@h?#{H&3jS z*z9junTy5Pcz@LK`6(5xQNX1C9=0&07^??HX$X^TSMpGc$JCUi-0@+ zS^PLW<9aOWq0Hhj7z*l`C`u;tUj@9YtWzSoXp7T!5vZqBACI>F!3j@j-U=`=4a?x{ zOADNfI31UXB$BJg@0p_hZlb%KFBtmNbm(LOCNHAm=sMJ<}&%@Hxw#!L!7u-D5%1J z+00DYBU09Y33W)`9djH2WRP}&8^(Nk9EJjB?$j~b5<5bVt~`CB&Ay=BgglKQG?1=o ztVQq8Xq~B_d81Ui;!}Ap_n7_sQXImIbiEjCYV_ahd-0@xVt61wpzL;7n|4Am`!-Zm z&|jZEjEVwm@Z$02phJH4o-2s@Z4tz%r$B_bb6wa7^Uk9zqlY5egq2g zS>yD~+(QAnM8XEI0hYqQmozD1L=6x5Ej!y~(Fh~B?3(f9Y|Ve^qV0&lFpfv8lA7svIMOtt`W;shPOAwapUnb~*136_rE5pym~MT2S2fCb z4sr)ke;t5)5rGk?%>f3jZv)ESwM_vRP$?xTB){M_sf`m&!tQ2@fW1Q6Y+78TNof#5m z&YdIrJCm`LE)SyEb~;;=ao}cR2jbFHjYN#%D64Z#&@pFCyS9Vs!OQrl1}fX`q;Ppu z8H7Q)f@euE5E5<8n8Fu0HMHSPDFKCr1G8u8X!KipQjF0;*YaCz5$n;_GvJouvrP8G zq3S}e(Hh|3vYl!=L6*myG|R?J2J*sAk?c7Z$6t(6V8ySM^Af6z>lA_d!UQQ7Q5<$t z+9D`u9*jEhl89SaXd=)2&|2{DKm1c59NDt)GWCB1mcDeCD1m-$lvX97r?@!#p!dMk z7-gtDC0a`Y1N4ybxs|5H-HWAK?>255ui;y$Kc_d}*WjcjQQ8E^0lIbT zQ`~H~gL;vn@BXfK$w3NKOkPHyTh!UE#OPH5Td^_$(B3t~L93r|kRF-M4)2ZTDCqHTm#!D%%22#l=K;`Qmh| z!`eWCyYsAa>2NG8rV0yJ;)ZKXH!b4OSoXMKkR%s|f5S9G#ZN+klaZ z5(+E7`pzsbSF&wPoS10%4Rjjq+q{-NSsp41$Ubg;NXzyH35W_kXQyPwy;W(*_fpVr zSp`Gm>>a%WxXlY#SeLn&BEopOe$v}eDR$ZJiPLZW~FDGW%;IU34h7?uasoBtoL>3*rt9Aw%FM9IJO^Z5&C30154G zVccWvl6lPdMx`?j4;FJE9oBQtC~4{{8_#*(TI$HPhYeYCt>Et(z*Bo^nxy8`2Ho~Y z&Wc`NkZ!&KYRFx}Ueev*8>~#jy-mdI(5LJ@NxWq;j~FYtGJ7PB?9mIy&+r~{_PMiH z_mo{xwJ%`yD>+`TYs?`%{$>rv>@Ya~z9!}& zg!*HmQgK(hatQON{V;81U5NrVz(e1cDCle;+LZBPiT2*hu+wNJ#NY0^FY_E`aGOr^ zuRBtIYoFq%%)y#hq&q>TgSkNmM70@hhU7WqkWZ&$3Bxw$NJm_7lpaIoH}(F!E!j4w1e*i_0Z3}v;KQQ)5C$M2zoFdfQ2Iy(~jhRrJK zdj$n!Pz$MEtnAK+E=AX6mrCYn2D+Mo7~xCV zT&?OXW_f}_Ap)frCI>UG(n6rd{{Ieh&Zzy~z#}9Y(^HsN5k1lzd+G|5+Z3+W`h!kV zKln`cWdfSjW_Vtl=*DF42G0kuoe) z|JD0eQdh~GVpUN|&xK&es_bXnb7{s6cGDb?qw9ji;n_Mz9HU?E>|zs3iAkGI-a9|i zP9ZRDP<(+#8c_f&4GeLl_8$iz79hf`I+{-$0ViG|9AE%H|4*-cxni)C>j?qRurkXU zxTJ*emne814cmgk!QiW_CWAvmLONS!a&g}b`86c{K{8H$0pCs=%XaGRQ}724mPO3O zr|d7?p?a-U1>4Uxi#7tRTZfs1zl-*gu?EJ8#ym$U1{LKtx$EV#d{!cX4t=RU%w{Uf zXQvOGOI9VRoj#$^==eShQxwe~m;gG$FjMlxZ>@Cw&YE@DjEe}`_E;`c)o%hKJQ#R; zq@3Xy_!~z8zGq}q*w{p#>L3BxAumy0n9#v9L*CX=VmsqfC~E*ld3bw{(+2|3FI_~b zlT0NnCbKF6Pp?`{IMj_Nf(YV>sjN@jJG^pxD0uFt8Cwv?2UdS9Fx4BA?S&T~#>yz3 z%V%DJzlH%>n@V~?sCA#vYcRt^X}taF9SU;~b`J{M!VJZ>oJG+!$hWvrl7yg*Sg!<4 zk@z164W>O(d`Gfi-DHh?kWE~~Jo3Mm05Uk!e=LE{$DbafprJgD_OE;hjqnPXm_^0H z68k-9%@3(Z$Ar2vyKiBh8d$j;mag=nBUJoo!}MjRZim9a((k_$jL26>k0v;dQEV$eH@;7%8UWRz$((LjQ_cII0P#o z$+jN*3(KnCTOvp(%$jfp;w5DMac10Sy@Nu{1{PVNsT`>14m#4eC?~LWz)>3F3^IwJ9JcaZI*9{h_ynS$ z@lNL2;GOzDO6+kJB)BI)^#+Hf&_tOUR^8-}onNw`A6md9XLemHA7eiA2Dgiqo zwS?9;NGS}33zIr30?jmB!{scAej*CR#l2sm)GJs_r8y*6j_^Bf^dKl;|**X!g zaNraaHdUC=8Cj42B5qyRpz6slwEU*BSS-S?6931qn)%y`XqHZ?)7%O+mRMbz7l1_m zM||^NJxt>tJq&iD;l_ZYZ>-J~tODxUJJt~`oCD3OrzFP#4tvPx4UF$2y%6W)Gse?2 zV$N#RS%w@j8rvj=aYI35UA>8$$i-ZzQbS^eT{7z-N-%@c(TSr4)i!@T@nN^O(9yBd zw?$~LgfwkZn?OY3?1KE-^;41g#O>2Z+b$uyicf0Dc8}^&(B=w*XgvzuJxhnFUUKFG zMnezv)!a6RbK>0Fh4a}E?#8opt70j_SCg)Ibv&|5XiR{fHOtt;QS(4U0+OIfyu%eJ zrVSA5K1U*|6pRV~n0jPY9%t5;Me@a+YuBVLST`gWjyxsx2(u z2A6sC^8-pCVs-Crs(0T`V)h0lRcxeAei0^=Zo0$o`L>tbC{v%KJ*nXK$7?$=acqQI z2KJXqiN-t>am4gjYMWrr0BuRgz!(VEZ_1hIXPvH*fUrQ6JP^>P7YNHzh;#RkM!8Gp zuVsuRO3X%xTJ{~X2v!xgJ#=);%Snc5UvW%z5A6S`QpQweO8+!su`!`eq6=mb_$7|I zsZe=#P~2dxPVG0qhMZ&OtAlScfzXspG-a%d*>+EGHnIn%bTiQk$nrRGQVCjFWh1lQsh7EzJFi4MaHeKTzMu_jTifC!HoIGV9@iYO)ECg$} z&NyKpEEkC~LiGI7{9xy5)vc;y%Zasw3sp!2rU)UIg)IUKA3XvO1fCG_b}^jRt!~E< zPLsuD{`Uck3>o~7=j!z-KOQmUvR3ORsq!CCFv|x* zWZ5zk)k@LpAVqmr2-lfz$O%rkyu{HdXLJKRo{r=s)j*1g=b(37VSccsqE?~M`bZYC zQk0d10G%m(joi9qV$$jLtCMbIsCwmE$@<^YnOQpf`c~!sXfpzHsZk0@xbH|{0wIYWR3P(V-p!_q3hAXeP!O8_z~x(+EYdbwpJ_*N%$DXmuDCx}1y}gzougO#-i)Mj zbGGTV1ROcPEpHhk6YM3xQ*53U<;3M(Lb(GmibRKbAEN?#z~@(^^>u-Y zGqq%3Zn6t#Trs+IznfJ!(AqogD_5hhn8WLApO`F*DtT>%<3&0(68Y;%5Zlck6In?V#K z9Elib4}MCt!U}Q!1=-24FdKvcXG-=9!AMxtpnc!*5ZJ=YFV0cL2$`Pf7%Z$5ya@3R z%Kyz*tgSbveHr6g{{~C`^_tra5C2cPB85CPx50f!*6X5E}ZN8gTS}`6(NA z54(hZjD}F_=w-NPH*A@qz?3Biv4eRa=rMoHV$IL9&AVHhh{n`lbX?;WZZcTKjfist zGuz9*5nHtGY!uHs2TeYc-7nLk3&kkwd&=C!aYqzxS}0XbC{I6Jgw+%`f2>mIM9Lij zmoj>!Wt81(@|l(aD$tbg?LgN87Oz!x!)XmqWYH;i|F{SEj^D!F@|Vr_!B7J{G}DkV zk7X$`UzLNT)?-r-_oD0|%2>wHm0fSTtKM#X?NV?`gs0qyU~(CM!d@KhB*$=3FddLG z(!g|>yjActjP#0%C&j#TB*S#1nBLS?;tQ(g5T8Q)6ZfbKSZ$JBpwUGvt zrt1Q)Ce37<;d?$)7k4>7g1b2Q(@D`}QV$OsiXB$(wo&kIpN4omE1%-I?X?3zO_tPK zS2h(DR(Xg8lB^W&h~>q3Ld*>DVO@HcNz6&A;Ny3eDzLpNo`ryT5eu0K&DYBdDaR%T z{xXcW-B_egC@3#LocG5GED$tP=~9l#)V5H~?rncgh>=2x>PZv?89|o^A&cNf-OzY$2LyZ^`dB_@yyxJGW!Jxk+oJsb zAeM%cG|nW6(VrUAbBA@;Ufghnz1zYYiIP|NXTvsyB#JcF!_f}WpLS?v}s^!lA!`qt@S6uS>*O7e^!R5a=< zJ^Dh+eU1QsrVQk!C#!@4xXXQ@4YYk;ysVL^Ir`%goX@_Wu2+@4f!EgYtC#!=9tS+{ zY2WB{<1mT^v%Se1UH{zMsOUU%hLE6iWbR_*qKJ82UVy04&Y;fom&5?jm#lIUOg#Vg zRaN#QX#Wuygddrwc9X>O@(BJR?Nk)@2GNVSO#h{u-1`0k?NjzHIkimhTse2X<9Sq; zS#?o@dB38AT#v@2R*F_3nQihD9X4gQMVus~1nR-nL=VmAyhDQMO$Woz1xPai;<7B@ z1qp{O@jNYzTR5)Y53N`iFg>bkMbw?}@U1h$I~z=V&An+xij3^F&pY_Iud#0otXpH6 z>+|3sp6j+c;MX%we&aocIv9r3je0KkWN9dePCIF9OZcQQI$VsJo+8ahhJiLFt__Fk zN$IEWgRWve&n+v)Ep_`I-KD8-dO`y#oF(5xvST;8(4IDWEGqIFQc({un%w?2P(1Iv24Blg82&n_*2Kp;5Ey~tRr@kiIIR{8KXp&d zn%}Q?TK#?p-x@BYfo$x1R>$>P*#atlpDMSjn_fXW%cMXCua8TKbNgUoEhnKbQ@094 zbYbW|;`uH-M#-R6X1}(2&De`>tmym@0aLD~PMR=jVw|^#KA6@+F~3P5*%)&jrrN~B zuSC3p-Dd^;Damlv1$}Vou6-Z)oQ30_`l!mg>X$ynQKi1lLkt+IW>RQeF>MJyN;Py-fZtIjQI^G>-d;CNohnK5xI&(1QDP z(mwxs@)DBV54jcVv%>7k>)bWyHrjRc_t28{!J62TwCzkyL!u4I%d>V;?R9aB%v0!Z z$b2Glx$Ihvqd?IWBh$L((wr4XX5AKF+-d@6R^A8eD$mmeJ#0q>Z5y6sn{-*c9a=N| zau+k=!1@-2P5cFg-ByA}bdP6JeoRYF!35%5^3=;To`k9Ub7|dKcT;gDMST}`kC$3j zXjIuIi&QB3QhY~uku_TO1sEmYoAK;a;u*u2E^E^P`$+pAI~C|VxF8#z0|atSMB)+cF8^=87~@0q35t?tSOHu z(-eWEVyP5We@(h9c6{p*x$mpaRVsDfd$*W;w{$z?s2C^pp%>B!z0C3P3Ng0y;K#BR zEP_w}WGif~7YOYEBtOP)IofUhD^&F_*E=qY=K8H1r_)WC*kf)b_ zMEI9*wsR~zt$(C0zvijgNjA22k>h)?^E-EDx2x~(XoOg^Q@|pk!V0Y^qai2-7}E4_u-Z4ku6Xlov4SV{s5%z33G~Di-awcw#~5rC1koa zYAUqU7A2!7G{v5Z8vVH;kqZ?n)}~>ahI9Z330bpnmR>qL^ao7y`0b5C#`TNbmvKYbL`aMplU7 z#7AESzjCY^5=pZt9$G4(3JG#_X$0=|f71#o)KQ8lgSk*apn*D5qD6*Jnv9US6vz4FvU$Z!yj#=ek2dkA;7L@)F+0Vl2Ka7;ma`GYR3&oT zn1=Ba)%cX8hvpoz+R0D(2pK#|+M@-`+n#ds-M5sOtYUbeffF&q0Fk-oJwi2fARfCK zZ}QKJm>mKxt)1ol?Aprp@p7(*@7be}#F^?!PeGNzT3kmvXEu2BW!3Vzuw(UjQCZSrvu)8iXIldRtNpWuTB-U4ecWIlBs7c{pdRkD~p&D zX=KV`pBnz*All9fd2`jE5pM&OF!S-5cvLKI81sMXltzi;e{%LVQE_Z;!Y zICX?{u5s6k-aiaRfA^yPh{qL#O#7F31l%D+eB{%+M}QiS(zoAr^zv z@w`~8SLLJQdQ>8=fB|O*mW0HW>R0ZBp=|4mw?vISLqT#x>Jc`Pe0}~;Lmpa+@Tbd) zHGQ;7`2WB+Z#0~x{y3HWzZpzahopq-)RvX3;eX$*t=OI!X-uakz!lRzY?qOiJnb?v;>jM9$;yP6@hwF)2lGys;|CkI(@qfx3|k;Baf zKxt?ZIk5*cyrv2}QK+&cpnHeAyHu1q2o6HcX6x{hRF`>qW?XA@(T4UWB-ZFOAF5ZQvFhzLj3Wx z6D{OMp5J+RbR#aj;Wu|&y{z}HW8R9+Ex=`s;%)Y^@uu?$2x{g9kqjCM@6AQFPI{E;;bA()&I<;a5Y>Z+HclIGUTFI1U7)8%{8>z1O^Zra* zlfrA~nR1yo*mTRLdz~w8BxzYJOKzVZ;NiPQcyas$XfX1kJNm_y26VbC%i%%-M->z; zxU>_95u7jeVu>NIIM?xW4u|`Jb`Z`YsUIg=alEacg{d`=1xrC`m6-UuiTM7^epm62 zg`lKewG(qVs9kd{_d}GPcKxUa`9%Pm7m^=~P+z(6Nf_gf(KM<5B1+FpnR=UN0b3Rw z3XO)>8u*lAn?pO%ygqq8iV=SOJ6TZ?k@ZazM)0H-M^i2GY`$%JYqofoN&%_* z&X%3-c;1=@;uTXseXmJn6-;=%iQ=ruux0%Pmw*DpG}EK^xC=*{GRm3CPC+HsYEHo6B&&HC`<%=S)2Z>+M!@~yUf6>ZkKq^-RSN@^1ZdK-Q-?**D7_nX6ABC zm_nA(L3JSu($H06a|kMsHDyB1EtJS~Zb<=+1Ls_yN{eD_6LR!%7bhi8CGPo?DEjuU z5SL@H-7^@LKVvd=4@`uGy7e(@%vg_1$J&K6eK*G7O%3;J*C3|Z0UN*N3h`gQEzs#R zr2vau(j#wfRbE8D>K`&eSj}>>CpB^zV~z&P10N&-A~Si4=8c$$u{o?c>fh0#L>n&A zuUUynCsHK0)sX)k#3bq@OEXS zIL2*>PJTY)iJUWcXLqDFU}ui^ez>31sl~>O&7|75D1#-l`c6b+Ce4H)JXL z(#85h;u2Z0Ky4+yB{5V1vPkC(B+ChJ4&FPbiyWrx_Vs(?_KnU?@K$@G7pS1sk*Ll) zhmrn7_6uEso`+Xn&mIavpv1bDqu`<6HHr-dqvDa&5nYPc6JcbOCYh2(F+(}t+Sxny z(ec1tiRV)PK|6UH%g<_dkb_t4>)-oT>tX1vJVQMf<>x$-?IYlTg9wzw;Sl8$Y8qsl zs`R%oro}G6+mAAHO)!waVoxw4EQ^IQI$DhC26?# z2|1%8FfN)e#%!emjRbXrIN%0FGpe`%k(xcI-LH+a!D0FZiiSwy~;dBN~Uj61Hj@vI^% z+w+B6B^MW<4vdSIt;spX9o{Q}?_W6uY?WKsx8Tq57-~6p&l>Fqznn{Ol+U4~r~JNZ zzzAxKsf(mfhdN(?&Z+E4QZy#mu~gGv7^n_SR@94v$Ihqwzms4kb>#d`bxZ}jOf(X1 zv?V&N-wb|~C`^-MQ5GIemb0CN95UB&9}s=FIp+BB626};+PXq>WWoL0VK<+z?&2Gh z97dfkHBgXqJ(6kr>$qsjWrKJ>(&B}8C2bZ@9h8BqP^#ksRD(WgbWLShm^(=nD91|1#U&u$1bc!0J^$qGMwdg~LEqMxP zR$?)t`UU2`AfvUfV*Vz>=!lr}#KT{C{+AY}?4mfxp)7e#!F!RcunhhV!Ir|ZL!)tO zi3cdb;KM03Dr)HVc?Ho~@<1b4tiK2=d4&$6j!wMl^!iHkvYb-fsIy6<>W zO-j!=O^1IOxG&ACH9Es@8(+A@Ceq5F@~FyAk1@A?2mHX=swSl@CiYAnO=QiGGt@~h zC2N}*+0crUvNWuV@{C;7-}5HJ!cs;yrDEfnd9+I46@h_|Q;oF=R-;nz|L^0awo0CA z2Ft{C`L+O?nV(9n$<7Q-7Y!}Z(C2|<7q&NB<_4UXY6i$FqSmmmTpSItKY0%^29-#$ zPx@g9sYe{#JnA-&?fyVq3eqAPjVeaMnNpunZ4$-`(_SVT9yiR@VPMbkhSByZdrPuF ztr!(BrnxPzUL{e4exVoBD{~tjA~N1VH-S8(0O-e^xnMXmGL4Er%Ln#7K=2nGAv6x; zd1z2iQAg)2S)1H$uokdiePs>|)HkjalE>g0BTvz)gWBJP-p??Mco7V+_F?K(<$?39 zjN3xh1i>1H`H8iuCLV;99fI5`yzu;oH{3nQcL=?`aqj&!Z?9}R%PGqo+f(-^f|hv} zy5zp9=e@ zAK294FVKWEhNOxZ;c#^Pr2i!*01_JdCnl)k=5F{F6QttVva^CAR>%e`NR;`;ee6*x zAIBoY;l|?CE$#j7HP#33^+u4!ODOzHl^|bFgD0PYqkeOkC>H^Neomwq&hmHRlYi%~ zffWfg@+0!0FE&}lzStm@LvLbr!-Isu;k4Z}=ODYKBJ=0IW zt~{&^Km4zT0Qg6ctpS?et)BD(q`=UxGVnCTxN&I7A0ws?7t-biO7t@RlS%7?rdTNc z!g*u)Tr{fDjS#!Z!P)uz@No2U^o&EgP@|wV|BC6PdSz+7=oN2*!60rv- zM^ja^OVwZ*#)M3Y`C?TOK}1kqtp!eQut`;T6TiY8t=^&xK=wBmjG~1D2#fni)BUzp zaZE+Ge_*_FDH8FT*LWrru)aB2mXbWZeKRi$MG?c6i@1aowkBJwnfuXXA2?dVOn2Xu z0Q5X@jGdYK_qb|Zx=6W|Jr6zt9xiAR)Mgl&Ea3W`CZ3G6q&GsPYyRIcZeT8$jM3qZ&e|GQFrA zST#Z!Yr3Orsmc)0Ee#1!{C+;H^ckap+y=?nPti5goVj#ohH@^OEIQbOY4pjjZ~8Z2 zL$YtjHP+5xQb@QWa{HI|oPuh|%S$Mqi<8p{E*G~~Dh|d5W@+|DP-&FI5qUKaBQ6?M zBrx}AKP{R#pd=ian<{GY99?@(1V0|-j*WTBs-t+Y*ecM@0O7QCFa#5`aL6lo5r^lN zv_+CdZFeB(-s^uwEDBUhtWs(T>EJq7N=)CKrvGom0+11#gX>w*GnHCmz_knVjX6r~ zE>S$kyHkB&$mCw}P@e*MigD{qQx2is3`>ex5ow#eBtiJvOs>=q%bA{aQg`lP_F14y zR3w!AE1#n#lGbCxok~j;@zg|_yP7!@=gDqq#Yb`TSlMUJlv@nAL3sDUNjOI~BJMW$ zTd&5^Li_$e`!Ztsw}%(nA%nARb{|u^p0#UuHPKzw1!4?$S*B5fM7VkM0R3NG1dL!Z z5xE)WK;J*QUWE|I1w=3;ViA&LFOo6unS(34HfQLGA>6d0u4JU^Kr zwTI}-)|zd>%YUm!IO32ILqT|wSIoDEJb!b(q>fPal#oI=6%H8Sl z`U88|hQ6IlO~2y}M~_=t1E%e)y2oo;TaGA>Ft_qwBeDo(@>)}wO-IL5G)x0KT%x)J zrrDiimdWhIyCMx}fXS6;h5x3*7j8ub1;rO|46QCO*e&xSnQRQ_H2ls^qLK$x8kkV= zCXLHcSWJPrY#RlFI3PW1zv^WUyZ$i%Y*LRUCNGxfoQ#6h%DmjQW7C|m)2e&DE_de= zNi-tLDI*QqC-p2eGD6jAzkvymI=Qf6=T*RO_Ss~r)^;(&XrEs|=1Mc&`b7!g&O$-b zPM&PQ2tJphk4Bh2+{wn?kJ)z-bTNvN{(LQ36G0fa|CK5-JUG|5Z7I7xVz(B(J=2;4 zto76MMhx^PAbST`NwE$qOW)h1#M+qU0TjJ z%{fB;TUZyFp$}_1+@ys;VT0Q~&xuKKj%kV-dn$|O7tLn>i5JRnPyuK{qvfDZly`~& zJP+0c`Vb;4gw`wrAy#!{`GX%e1|}(Kgug_oO9+4t)8oLUkhU5pTRB%T73b5&UzH%{ z0f6G0n9$W^FMGmr?{1}W1gm4EeDc>(w$Dc=!k0~-7qY8hum$aN@!^X{!^1s`miV*51R4%c8*1j!4;)(^>W%Z&oFX#{SB= z%|ggFAm2WLmpCV^g2@EhuaCHR0yYYvjgOBX!ZcbzMoJ?>p_t-MEaHzEAO1tD$X1=Klp!3meQ20HW?Nt6Ix=Db0v_0 z>A=X7ilgEEKOabC3Vihc0;+kTCO!TZuR(=PaC@m?_@T#x!PJ zZ?fD1n~2-y!EX8X2eF7_PheoprBdLtrhkSJli7b4xT1>r8ng+RL!ME)c5VGcSYS57 zj&yRjd!0>3e_0{e#QaM59F+3Hy&aJ#hK0B<2+9#pNs;+71O2JLGRPmV+lOzI*i@?C z-#@TIW+Gqv!eoGo-`sWNr&DDgbi+|&fgpaahnJsTD1!nhm0o$>w6g;WWsyn2fN}?Z z_V0`5il{x`Z5GP>og{)tLT$r!zCB1-SbBik4?O^A6bQ3+Dl_Nf@slI<#l5kY#Z&n- zcbac|)8>_!tfd`|%kMyfZX7fr<=6}gBd$Qai>uGKNP$=u!!?>?t5!xP3l4$YTKb03 z0&e`yz+Wo@fP9W*gUjsp4{2!FL_aElD%j{(Uq35yCQpSWryToLaka4T=lDg zz>Xg#fUmmW9~VIqw=?p8o_IJp8Oa{#o)w>rw$FB>N4u0i2MVnIPeoC{}%9o zW9eu1lDa=jU3#rzdNIW+>X;9gg;mcXhiG2Gz5+sM9QP~GFg8zhpISZ|=`km5JGy?q zY2?_u$AI_;F9o|MIF0#oRI)UsiXsf*;%Zu(xE8FyvV6|V5BQJCPv#5Y33N&r&nV%v zXfKzeEPjWpLvr~n)if!q1nYl-Y&um{yagxo)v^bzakymkJlQU zQOT7kM!nO!1{{lLd8K?h0VN~2@bZNfbeJ&=W%Kf|0Hf%@B=8;AvwR;@jY~_yOp%0w56HXo`nKw~4{^5%;B^gPexGz#93mYToV&}blj`v0zGX4y0FB`Yiv z1b1+D=B9Zmxn5zFFiJj+C)xRZ^}hC!OB&mpGcEtLm>`oq!Jz~VbuRXM%o@e3BkZ0y zyVHl8WXvQx^L6Ab;M>7t6Ni~I{E(LH6k0}yPM_c&a;EXE3YhIlkt(E_S~yzbe6YZ% z2YFAzJt$62Z-{xSwCJjojebtBpx$aYAFy3xaiI6AS09{6JAV5LRErpA#Dw0RcC_`U zNj&q&IwF!(5jlw118<7Z?ixQyaH2IiZ(xA%G?5%{b~$|0%J%M^BI&IGH1((ZOe4Av z&FUIkkLQv+pV_tP>I-YT^jza#yj+p4utrh{A}hu>hw1;5DX=gPS01A@oP>F@*d&YJ z+=KqJjQoSl|D)+>T5g(>Zg3>~Z%@bnNO`0MP5#q5zcj_t?NV*ZPBMM(u>P`~G-is@RN8RCFh_+{V9a&$61Vq-gIDdse8u z&lDPW)5QdlYIl;sS=KM|MH`&z2yzq~NA;qPU}(!mFH6!_tAVzMzrmqqFh1pgK^nA0 zi?ClHt*tKvL%?%u#2P0e)<$JlDGh8P=1ABkSizrAp8sFnZG%ykIEO|zcX_k2IO+e5 z`u&6o|A+c<$FPfINYGj}+Hq?eTlUVFTf2CA9ner?=PgzSjlhUS-tp^(Z;P>P>P9Iziv_O@va(A2@s!nDyoPR2N3 zHlM5mmPR!u%U?w`qc^P`VzQsY!oApP$T&IoEi$*>I#38G$?!Sx+L@aEtE^0VW+#$IT!+Um)(aG}sJ@g<>_qL)D z729(NW=;nCN(7DfJsMD^-u;AKRyz+dL&F3B0MaOHVH8Vzr+W8-X}3mOic^kQh=17V zi9L>9mK`On@fVYwZ~qqOl`Kg$RKW?r$iijLgJ`?TOD?v7uu!tb-}?6f2oWGnrs)T9 zXk*A+Hi0Gw6Ir8T0$}}*?VKR^j7ho;V(Sg`7_L2gPGKWi+t8y@-hhmqA2!+2_Ayls zZc!hz_z}1(gwX`Om(X5&M!vxM#YvvtT6^R1wI3&pql*!J0w|?;w~&jQ{DmE8V+cYo zM`~743n!E3FViT)ufF~BYHCbnV}-IYgOg~06X*7QyjTQ&19H}oDF}yckhnNnrxvOFq@@2LcM$1ar<``TmhP_lU_@h4p2dcrGhKKQUexa>Y?Iq?$JT^k!el(0b* zH81eGcbC>l5&yD^N`=0lQFLV#-Ncv=)W;0tFQNfT^GBTkxd0x`wsu|^c54qCgNqfH z(fetP599diUiMC`TTDi#%ertI_OO{FCsoEici+YS+q__0=8-Yi@b}@v#yOJN9#B`* zDq7*BRuHXdllsDUe2VK8d-#!vEqXw+ntyC*z{MEos;Z{%>5N3s>oXZKp6`Vw zwh5C_!KUQ8J^38XbWHTxC;PzVMec*YBXq_afF|ett`k~weowesGg$seoJjNzhy4V4 zJk0~$Q<4gI`;0c4wk-Fu(S=&ucpJ8KsCZ^0uHszboAWBApu&fY*7kgR$m50*YM+|2 zGmMG4A87cK#6n}*%99_G10bVd1_yg=!Rim=pj~2igo*E?vGHcJ+eZ@9FWN%l##~s1 zxDr)oS72gjcAoG5OJ}m8eK-ZIF|$CsRCL&zd!WY-{Wl~1vJ|?5 zNU{tRCbLozG0m@bj^1l3#Znd4mHaWt&1Ax5kE@oubI%h2G|WThwhto#ey`P4yAbgi zpB@m>*`zC93OekAwcf0!fF4vSi!ai(_r@Y%ga6CMr)nm}2EQ-SY>Y z=T=21jbs%#oNJT7A9=fbmXBH|C zI*4V!Fo?Vr(}@`a<4rVWXURy3wm@arUh~dds^*%aY_guG9Oc$mMNfOi*(YJDmaOZ~`r=p5T~iRjg0 zSan`;QJk2n(_(TP>3Y5o>Wl%;K?2n3NI9_NMMg z(uYKHJuPYQ!tv;71s3#gcEHGQh6=t&fc6w#ON1=tC8Muz)Do^!vHfA3xX$KFwA=c4 z?e*abQ19>l!V#JDm1BsTWZAWY4ybJ^WA3TN5|w-Na__wdN|m23;xCfvyp5i#>B<)> zSM9MJoGlWotrUj`Jnaoh_vTM7!*|ZpxDaVR?OtD9_e3{#sc~41V9J|91cTEa<#&;2 ziG86n@udlltB^{rCtRG`JpgF#QrfifbL9TrCbtjP-;yKNG!z?jyNdBz##k@)VTDpB zz6a;0MF#7*8o9ZtMa{LcLne0&5NTjR-wpgFSsCgube-Pua`d&stbGp=C(&eWA*N%f zf_tmohKMXVuyoj}=;r2lFa#*CrT`w32Ujnb+eL`rrl`zNuB`Jmq-?69M8yl_FrwkG z0_QTkaojL=J$AR^{wgNNBjV^Rz^K^bSbm=TB(^B9;tlcbww6Q-HPP+nTC@}Vr#6!8@?(Q32AyZNh& zS~G^VCzV2PYmfd316*ba=TrtF5mjfx=DxEM=Y_m&V}{HG45Bh^ zitcGeyxGgL>3O2m;#?TSXcQcG<#$ zP31kh`I8K-K1iDiQ*w+S|I=I8fZAk=cR0A z%3p@fcqgxrgL%03^h21ljl;xeJUUAvx&(ampX7L)U(0Nc&XI<<7huIDF>qLdiE|?< z*rCzlZ%bC|nUn~?)31C@`$R%uMvG<@ifGfqvZnl6WmvYVAZ0N?gV1-ACCQ_iKUs!) z#kD{3jVBtB%z6`DU9`KQq3tZcR`N0IklkaoZZO&0V^yAgeucl2ts>3zxLb$_p9^v1 z{Lc0H9(hv2#iN$eU)0=L7}tiX^K?r_Xom1_5ju%+lp^z^a3z$vlw8wq_eS?-OwBpn zUPgtsJCxxe5*sQqn1i5=L(RS}!`!RA8N5oBKq!_V`+r{kmR>^m6kp|CwN z)V+{zu}=1?nv7z!(<}U^L(zE!9#>$%l&RnB#faV&{wSX~hEc#t6>ztJkyd;p0>0}Q zP`MNev`s3%{d!@eU$9FqI@nJj#wd^h@;X^&m~C}}u8o_IZ@?Zmy9CNvUM8`F`~q5| zFa4vG#2zAEdf37Kd&EaiK?M+ zK(ZH2`XXrlKJ-N36%n`azRIEA%fsEDu& za=iQ_VZ5lUna2kf)P?#;dmA2CL@s+A={?fQn+zq9o6)hHSAqlS_+JED$3BYC>5NtC z8nzo`?Hyb-UX4n3*xp8m%ApyY-VV5GdvE>qMBhc=W|eJvpXuD|c$iZ`%aQtF*mYoe zfmXS56jp&$IYg~@JTE~KGD}I?mVgIjw!&}okZBRNE-NE}iC=~me(|)X!1w+%AW3PI z25?*fcSTwh%#9wy`@w-omP-OO3`|LM;U&7r<`Ps9oLQa5zo0}UKevSc>WHfa^2@n& zvgl!Va@d8Hmd&YuVty;QPFm}c9OKjVqoQjDjJ<${iFEp}GZ8#jj43Pi(RRvd#Aq?N z%**86;n3m~?W0in!t2*4xw1CW1^3hP!}}nG_JcE{91Xh&96bcYWsdttwZkuoX*vxp zQI%wuT0~iZ;r0_wL=SkPm;tu~fy?svqo7L{>@n^a%kAp(!X3?4K@G;ieml2%ZUV?- zANS2^!!NJueR8|XHM_2J4=Aj3X*47f~LQP?WIK(9a_Ko{D z_(e;E!Um+rr!lqrxf&Iw<_V zBoD|cmKg+}dH70^{|Q_FKLoPFT6CX0;W$lmI+;55I35QOb}9Z}j!$R!Ke$p4)w(JD zI0^dFyl#{JA5fRNr_R-k}0%e6*1&+lNn#I?qZay{XY-zPERTv65Ps& ze%F{vE5(s~M=bma{b1N2#8U`i)DbwL3Wr9kEV^bmW;Iok(OG*6Tcdv61)W5C ziP_SqWIIDTj*mTF$rw;hD4j{z$QsBV$4Jh8+~^9wi@XU1B!1jdx;794E_m%BUOAwU zT*i%*rOTkFSeBwy^`k~`NvfA}b*J|ut7@_%ur?%a#|7W_JSWYZ(R_>!(KUa6SuG`O z7@ab^kW9i#)v7MQj*s%Hw2p~#ia!cV!Tu_9x?d4E*;&${ z)R#s>a%a+pA@_AWjTWC!nM>6*{yd%K5gQovWbkeskgthrl(|uPWpNPvyLIe~L8qyV zf@aCNDZKXV98GZeo4M{8zWxJj=Q}a1hVoMSKZ#*LYc(3)Hh4ML`q+?aIB2As1#u|l z|B|K(SM-%=RJFgK3>f~ zOym}uFiYkuH-Cpp#+w}J5^Ew+&$I}HFy&FjCi2J`ouPYaTKowu>ewKH>UD<9o!XvD z%#bhQ#@PU$hnNC~4X4+L*U-w~(=K@IL=m1o0v1_feaBo##Rz5QD{^MWHLOr=kGmoMIlyo{F@EeowAzGU|`wZY8Q5O}^r2F}2V>Wq}Xz z(3ULhM!EB998Ksz`{dqC-5Ze>f3@)UpQ*o(s3Ha&eav$md@dE-ou+Fe*b=WzFp;)D z6hAMjd6NmvE0)MG6EHF5CIT(VWYD7aUC>O@W)8YPjE;_}a@S|S1Veltv?nS2Pp9j6 zWvpkim}cRg6Vy_w0Xixhmiso9zO^hkzFWKb#-~gVI~NWjQj4XU;O zWfcy}^j)xWh;Huq?@F3hrP}vU5&7N7K(>6e7^Y>@I7!zr=bcmklzXaBJz5MATJeIr3J7 zy=xjP?3tDIBGI=tI^9mI&UmSn7lOduRvoXY#V1^M=;KFoLx;>9EehP1#p9*Bn*6$A zT(_lHveNI;QrYUkcQDY2krbo5Rda7x1%2tDezu*k4qWW;y+^ors{382q}XU@sn?sY zajT^E)jd6!`q5n*+rxqH4|pDHGdD*Zu0ftW<*T$1{F_Z8F7d0Qg2($plx;|*L+CUf zs+-X?j?t`k*a4w(EYA6WlqH7*VA&BorOj5y>}=8w8zXVF5}RpqSqWCcq1-rYdcr;G zrQ;?D?PiORgiLViJ?Z&Avm(zqwAvyzCvpuKq8j7#Cc)Ur&X3h_QBkA<(>q;C?yD4C z9147wKc=i!7q4rkNpHWLc&jIluo z?G_rRsYKIOu3*yX?{|>$N-o^yh58-h-1|P#`L}Dq^{e;fITZwp%4t_nsVLM_UH6ii ztDW7?h8H7ANl>LF-q8a6>6%$d8U$y;$R1!a0E~%-!>dc8Sxq9xRD;jXA%+MjCQTKz zE8R@nWi=Ljb=iz6=W6QC)HBF#R_+!#BFzXwN@W$@Ca^!N z1gG^)Mi);50l5WQs!B4oWb*c==DL>I9oG#HP!#tO4UisMI3yio| zRW`lF;#2q?&4GEgfSo`Yie)041^QUY@IhX3EA>pp0$gKo3?u7S)J0&?h;3}fMf8!n z0ExC?n$M?ebi9K29lWC2Hd?K)i#wLh&fD0~&i0RXL8$?3w6h_T?tWL>ts>iidl$@E zTKn#4Cbi_M7V-#V-GT_}I{pFDX=#@v!kqvjyWLq$YuU|Jdkj}38MPYMyFx|7UUepn zMbsD}i~nC7Tr=xJW@hM0jYtSi3esVzg^02Ed!Gqo(9_=gi|2$$EOvcD_x6NMW~Nkx zdPbaeahuy8BS!p0a{98g+fF`TtFQf+cr$2{bGDPIg(wE{WY`q%G&G2c_+q-)i;*Q_ zd+4-P%=I6_KXD{HnE4=A zqOwN0@}jyCa;i{)a|%(&{er$VLxgDge2WooiY*Lv>taYr}!=oF`J_uY8UzU12?U`xYWg< z#%}+rvg9IsI3=k4afuivyT^iT7?o6H5hgWLmNMcj??LB;%jGQGVr3y6gX%DSq?_O+ z_sq3hpUN|}6xbnH)1$87Ab#q?x&W-N>`5TB|HF3L+D1|(N1a`BmRR?L&{XdnM-4AV zm~+$5UqO@pVxo~Nb6uMn!Te1a&F}PHc$|uawIpY|9IJl1;Z7sw42?OzkrF(@?A$=C zqJlpIjtczJE~~fgTUZE*MLkyH-7z#u<8pD~ExK=$u@y~kbs*=LB$E~`?vK6*kXMC)MQSbGBPKmrFCSF(x8{Tk(J5zY)5R2s<^}5&W09P%>ZpN31;CTu z7YSYm^_7&Fp#n*ZPmu+qPS4Q9idifwi3?nvl@$9;uo@U){5aG_WY}E3$!}$S3PAO2OXkgM*6v5q@vwhsR9g_emmV zis1Tmjt*8HsQG4IwCF*EF<*g(1xToQieIMvRW#^wEK}1$zvS=Dgv3SEqIB|wBEc+Y-b?R$eL4`@FaM)1Hl(A%+!};VRx4dpp zp?4ngJ?-@Gk$#s1Xp|2{n}_IM2KG`?Bq#VE=>?F(T-79LDN=c6!2^<-6*Rti*zDW# zUBpiSNOBF=hYZabk|0g+InRp0$1r3gLjQ%nG0&3SJ)9#s!*oD3&cC~TPF81gRFN&n=Nq4r($L=-c+0A?HA?P#x?SF zzRgp1_^pva=vA(K7IPy4lL@eIeq*h9WWR0x@syR^U?jh@s4sjeEM}~LXyItW_*tE3 zWe##etf(lVmNSu;MX=rR!U0znsYxE@9x-(mLufbfCxxCs3~ZfDTnF`0(h;(Fs6jm; zBD!o*6{6so*~7)X6)H5TMyNe$1J8Y0fN?@Ba2*)>a-hmA!*0%^ZcAdf0N22{LCY`cD>-=7NJUofwVfo z|1RC8_%PVnQva_#&>*9EM!C_ZG_$gJ$^Y2{Igd} z=xs%Dv?KU#$Tp!>ML$LL z>F6y)1MIaiTux@Kmql9fmwzO0bzUyro=zh(!c9u{i}3WV6s(L<^1!Q=_u3w%pvBWzb(`E*wKZ7y z;f>p=F){h+^WVQ$(D{U zKF+6(d5nZN!?4&II~qC^b<0$qiQVbO^x}^1y*F~!i$Qz##@k;2;RG8Oezv82Pe)sGmd#43oK^ z{n$wB45s^bS$`hPH_^r0i7~i33df4(ctpNUZM5-| zozL0vPadU{W8D%2JBH0tD5DjK1R?e2!&{O*z2psZm*5^waC>?4*$KDr15^~E*fg4# z;DNWp@^ZL*mpOgm6A%dGmfK{gxdiRg>pc8rtDUMEhA2EbpdwbHKOXegp)BFh=*Bc$ zK!8}ll+g$aj8=l&znn0J3Q)pHBZ^4BnaH@IWP{A@wLpz^VhP3B=S15)iS5%V>P*@} zah?x*#~o=|T!dh2_M}wCxI0KGO=_?9^s-=q(6~Vxb~_ z^0S-`lOl78`K!vnAnf=e=7vJ6_3*It&K7plv7SOQ@hVkANGm=F&_mWm+J<;sqm3du zk_^Jm@Po9gt)C z&nrAW*%~fG8zOJhhRQ7qin*Wx)90$ri{uJ9`4^wgE%zYjanaGw_d<)|y@@ zfrCT1&^y*Vpp7blhpK1avk|a4LG;C0I+$yiK(mbubgGM=mIj*f))6vPZ-?54Zy_5* zDROjC*O|b=8_>+%BRrZ<*#J7@uZipQ^BB*QYAL1l&FGBtx!LXXh+Y~~P1>E~>QU2U zd8{Rq?j~cg&4(j8&4^rG^u11y(edRJJ65%N`8y@k3mzkj6P31#F zV26yoNkTt!j{$)Z*z|rmmsEnIc#@qo5+CmY;u@V#)%x|?-HvL=8%DD;is9o15!N#} z&Wt|LoVrY*;t@_9M#YG%;cC=Q3_*8P8x_q;4Rz~##e3&aQ7Chr?KWay@Xy~BT(15O zN(6S-o^p7|u4+n!Jp~Pgpeyk4=k>w{qjx{TSdVLdyg+&Gya3!B6+1sMwt)%&XFnzR zWo$i$6NxiCdxhC34;s*janEiFXY7=M<7eN%iAH;0r>49nL%OC$04GwwDubNI>Ao zCO*n$cRebmTa_8peWOGZX~Zg%vy5DZg^Ms*M;O646t2KX62mLdddeI_6+d<1CS%j$ zk<0Epyz0(2KPr${5Qbf+kIh1sbnkn~-LhyOv8YJ|eAp=pdvA4d7+g8^{GFdvMFuHE zhkBM_y8fZu*%hjm^v35?c4)3uwbJl z0JPRw!|w07WQP0FrjBG4(d#*kW38`a!Lpwa=lh7Ehi%GWM~o5t^nXw@XiWboE~6>`};Sa;q4VXR91Y_KN{T_m{aB9`|txbQ>DPs|{KT zV&(7Fsou^3Tb&gMLodhBoep}LUbm_ANAHHA3{8tks9K!i&UGc3%r;KF9?u8PA24t8 z5^~%sKJYV3q62h=IViH&B$JC{wyT#Ln_>z zP43$Sd7LeKh*PW(6Hu=Qhb`qQ(r36j6xYKfgYaMieYrZvYp7CEDi zV&86!kd1;?!?!{5o{uAvsW*9ppJw9`U5we=O?z~k-lcmihtKcl`4o-$_i2PLrsL>?Zb#OzW({!~zJys%fV8O!os&VH;lv%xm9#Bc_OlQ9y!YPb- zs?Z|)rdiM?H?_A){b;EdrB8=J#Pj`yrkcTjAD`$}!Rv2%I3{~Kt0Y^ti1|&AKkL(T zd8L4RvoNyc(Y9rIuKc4|!GGgw&UKBdHeLN*^jiV;Dg?a%mT+qZe~ohBuGO;}M01C0 z_iQSVqyu-FozAg=DJr$&#FHJGV`Z{0Ak;pe(JFVMJde1;t2yo=YblzpTQH)~qIdO4wA@Wb}k5|zgR zGRZSOXNVi5y=Z>>$w#ogHoBVM3%o%!a^5mM!eZzS$ee-G09qXHrQ~%5HsLXc*$y^4M^<)m|5yYc6809U9(sYac{x8 zj`k1AQl-XS>8faaovAhJrKx%d>6qZX1AqF|DdlvwIDw9`8jPKG{uMcp3CS;^xK2gm zlyGcC;IlX0v&6Kc?rpYuZ=ehFPWX(cmSD*`dQ5z;!PTbnQEU{&-#52GN2Z>mk2s0x zJu@j)`GY_Wt=XaE`|UDQ>qDY zad`fHh;k$9y_wQzi?7yM&a5MCuGK0r&lj=25I!ME%=m?{u@_1C4Nhgaz)(bV?1h*o*J%7 z4U5Y)nA4q6*{5teT~M`Q^{c<#BfUc#+g;_GsM%yk_p0JuoK9WF`sx^l`6?uywoK8T zw~9ZdKB@R}S;lRA(2#z0`JRz_RDY>=YfgE1Z(Yiavxm z{n~&odJSzyH2A(Uk2?fUsDhMIzJ*w7rTUyB1uoH#8E9kBACZAhEmgUpAIr3? zuuRC0ZdmVT6rZ&vk{XA$oVm3Sl_wHHPryr?&}l7&@lv7QocS0wa0mmV@=Dfq=zrwNa|y`Z=bu>P3W+) zfwX_jKfQeTT2;yg^IOrFZDqvo@nCOYn-pAC4S2Zc;(IZMxw-mXhoi9}N98^#i{$BOgN`UfH}c|KvEm;tNJ^K| z&=l_8=q}J5yM~xHb@aGorF-@IGm{OoiVI^j4m60w72i%UL60zKsJ(D15*3KB9iv+v znp7~;1`W{|#IiMeP70=7aUff5-96(qS|d6E8%74n?p5!;#gZh`5kgCYV_R9;D7~%d zlvMDW<8Ss4*4?Cv(!HZmF#^H_hP0V!5tir`PB0zp`(7LS?`PLhl6l3W+ZV9Nq!+q6 z#40tDTXRs?reZF%>q3y?+#s2L~wgJKl;61>i(@K(PG{pmsHGqJgEQ;%L8m=(+tGOo&Dq@XwPl2O0Qn zav%5NBEK6G#xDl>w-0FWc&}6a0M~^n3SD(A-sEUlarejwiTKBlKT10iDegORl-LKv z)`&4?@h=mP(g(bbQpeyW1!+Z|c;8X;M5HIvuG>6vmW6#&Yy-B-bmbASH?hKaZIibZ zgyO(s(M-1cY{*qB&w(P?NLgrBc!vc)@kw?(uXk*$jIsCTKnNJZc`EgmF!PYnjDqIbTLFC(bVgtYr$x z+u$zwJBMiMH5VTFa0@evM?z_hAfIeBPjhaS<{ObR4NMU>S5Ds?;hKT=N_*0H={7`< z3BM7|FXd^jR`mLyadPmMqCe|c_=v>BHHMN#yGT;-#C+eEi4S?__>n}A{m3=km>Wix z4@%I7yd{L59Ty-KVwfZ06k`^C5&smor{WZY2MIypadLvCC*8%_RlnNBE}f>1y~fAV z%t^3zUyYWo#Oo;L=|w^8r5+g~I1f`)^~#7coTE6jZ^HTnYFC}(7Z1L}sO+XdTPVUY z^*UE~I^xCx@A0D`WWNCaA;8tuS5N^3QvWGy%P%g7E+4DFc5olsI7vtGOK~l3Tpx-*O zcvILoguJjy7$h&(g&2Y9VT~}gQ!7q{m7Nqnl&}jeNnbK~cNz&s{D}P+;D=zMQIk}^ zJdNxb-vMeE)~`Z2j=Sq)O7t-5z8S^w%lcjS*yZPui*2UhuFi^SCg--YkiD0}Vem6b zcmEX~WX$Yb|Ga`J6l|$o@k*16fHp@Orev>!o<4@X9ISUA?2p=ZL*i%PSw}exCXK^I zW0ii{0^~vhGF|BP>}&(cP*F|Bvy=saS(iAEY!M;)aQir#W>$;zvd8GU0n&=KPou+EczB=oTPckxIR6Q#9%KA$6>1Ff6_v+SA*yuI+p1 z5|6hZ4a=kT=fZ93b&i1fW+TleRWOH~-FWm?L&J|}Sk;jDK8ri^kc zhnt~>+h7y6Of%Q_?w1WUS4`hkw0Z}K+&*die+yv1e*21cJ~LiMVrgxd)jXX#lf8GJ zLEf)QlRfo({~yBM0Xnj#3m4AB_QbYr+fF97ZQC{`wr$(Cor!HHlibYve*Euu*Prgy zIrUU^)vjHq&#KzbuG%3|N310n4zxCM3eiYz*8T&2t&DV%9atCOgfBAahsSQ5;Ak@} zismlW{Io53Pqf4bw#0XNl<4G6{)$i`xM6)w^o6bdCwi0nDB`~8WFQD&9O!mBv2L|! z7?;v?%AK5Rx%xP=unzK z%4x9gWIZcPMsIK+hwL3OYDv~=s4q*)R>Sbo98z;S-BgAl=mD}lQu}Fd*BqKb8g>X- zdz7n&{hWpEY)`7zOa3)a`U*dr{AC8(1DMo-)b9kj z+z|iwQ()CaQ^gj$ukFu_{q+u}B=P-XB-6&OFB7)PYF7DuYLoDj<9({h{6+YE3Kva! z3Y+g?@K>jin44CDO0LJpqu9?d!MmUvFU6#dCO}#}w~xawr04LqZ)Qu4dAKP9Ziclx zJGazz)}#01J$mS{ZR}^dr%P5k#0&2-Rld)M&RKg${??1z=2rLlG;4G_xua&x#X4w2 zKjsqE!9GtXT{^48xH@VTxugo_erRcpY|-jfl3s=l=o^&wW3}hYSurZ;tDu7W(+e9q z&dY`$UxL&TQ9vFVJef0}hP_E^BP=RT5Njza$|N1oJr?kFrLFm*?yMm>JK3^Oftaw^ zZrU(O<>8$SkJI}YGR$KZ)kj7#+yVl4E}~*gL%b>PGXai~;w!|kKYW(O5wTdf@-VC) zcoUBNH5Si+48v^gL$sEBWja4Y^+>Ln=~5X%{G+6K4OBPM-yYo`^}lJ+ z!THX!kMc&*9vk^8LainM`EG7}lgWL?v+&P&qJ6Avytv-2GZp6SIjOZ+mkXb|tif1^ zEhq4C8COtJN~-g$BJ7&W|Scrxo zm?$y3iLz!ssSALI1TqH%p#&D5oAOU&gOw|mEvfGy$BPwb<>V8x+S02}VbcESljWle zmuXM?zedZfuQEf~^RCu^Cdl%$$9lp7lmK|8t!lG%?h4IGYnblp)!!cI0^fkusP1XP zWI{9^eRD7DXjJa)Iv!bjtk_0`POYspPykE?>R$2{TIWpDjuRuRQbyFq z)16!#nF-x6GP$pW59ixHO~{RF%3RSNo!W9g_27apD+8LGa*nWiB65-8gg5Wj6oVe? z(3fFSjfDIf_gMG9h{@R=6F|auysrH>x zsx0+@E0pV)vMWi;UZXVF8q2Gjcui&E_LjKai5BSt%SJZ>8s^C{C2ctr8iMX=!sm{eEF`H)t^EpcSr}HT7YA~6UQZBdd`CtckV=Ms_;X+H zd>d*zf=&EjMW39WeKfV~T(xVuE{tsw6)so6;O@}D2uw4`s2$^;wZ%nU0}TI-h>;M5 z7*2Z|fReQoieqtn(-~Cp7T5ILCieKQ$HB4M5{|9t=GT&EKBDKkDfNn{n)oQe5GN`B z%V3Sl|1o%A8-LEJAY@cI1aF`DRi0ykMqxPr&lIPi9kai7m0_k}2u*p^`j3Gd_2J9F zZOsw=F9Y`$YV$pmaU9FN1*Pa`dEo=5*_0=ok8U$Sql)ikmg(OI|xzf_q6>!44Puyth`g0>dBJT#6C=YtPHfvgM3JCz%noS8)g}DU*_vhx5Oo8 ztF^Dg@D`r#$fDGvMY}($xFwpss=Qr3Hhn&ROcM={d)@mqdyYgIXwbfnDfIJx*rtQm z?gcGH&}UlgZ_ONaIaXfHa&@)ollvvh@_%dF%;UNi(ygA-P2?NkpJg1bfTlqQ5hB2E zvqc##2a4UVQvTVmOIq^t{MwR1l?aQCl%EQ~3JW+AIjVflqcCanK;S3rpUDY(XuwvahcvXsZA%8F1+U515}usyisb&VK$s~X5jZjvE}|N+%mbG zht3X#uCCgk!4Ui0Ii-PR2cGY@W>FA?@6oV9Mj+k#@Qmz^kJC$2{u5P@4AqQ18z<5X z-syNJD_q2PoQ7p^J7|@MxOlm$>oUwv5)@HtT^T!hkQ7z%g86zCa@R%=0K)d};?VygYEd_`v|RF76c=Dq2g zM7(;3VyY$GJsETm47431`r5R8oXQGsj4AzYKjk*ONptPpg+&h9IE+wM251Vngmlp5 zwaq)E2tRMW9iWOnVegI_Y17<+Z1c0d%wBJ$zj7)sOedezw~yTOdO>^Oeel92l!=yh zq1{iVTQfY(U2m~CswiE*XqeDF_1xy;etynE#x_BKs@USr_#2PoNF@@m1eHyRd@n@H zrrTVD^H$*a6>qaynqXAz_mt14`}V0SJOta~rg(mxK3F)6)l|?g76(x#bVe-DNp9~; z2{jvlI)*Ag^*!>CCgSmoAn<#-K(xuCJn5yJME*zzN>`+h(84mwxbml@^!^yE>*dCM z@*Fvd3Nvz$9PE)1RO%O&=&X)vIVdN zF0~y_LKKa@FfLmDQB-6>=WK%;g@8Ga9 z-ReTy&`_e5SFsDF9)9r@>40Via#ErfI&|noDuEB5RGv4d?7jhfkST^NG&3N zVtdrLCdD(S7kU3SIK@I{s!T-1V~7-oEdzXNwNS_&Y(}P(FYgjx$l|FLiNl7=CNPO` z2&GD#jn`F(OC-}!e7s{P@sF&XxxK|YV`aVWhYCbJPQaiV8{?+ERz})y-p)Y0V}#TX zM3O1|*y*PN1l(%2HO-T0qaFV0*hKKb=&uj*ELH?S>%c1KL|+z}pV4vL!8^|hxjHeq zuyGtXMt|%#hpBKMD-+c@$}eQABJPRO>84s?_4{VDn3Qb6HPnCDI_*x{QnWS*G0bk* zzSEM8Zq=Q3ohS~=;mx~Boq&MM@K&V2?BD&iHR}i}Jlq%qPo+21p1Da+9~8`cXZV>* zi_RVm_fLAvr3AZ!wVj2N4OJqxPq=SIVrvGtXz||7GVAe{l?Rr;jarmR-^LYb8@)L< zTR5Iv-)#&5D$a;Ji#faRelL8+9}V;V-l`aKsw^q#dXjQZ&2}gI)Hu4}tpv~;hVkA~ z??|8Lbv(O;Ye#*&u*WNB)b=eG_mqzMQ0v9^XFwjthrhpy0?<75RQsuDQm?!a?ODH> z43udkv?QI#k)mQll5{F_l(i}!(7@|CyP_G98@QZxIa85SA;ccyg(tbEI%b%48$O?T zpUzGzK|aro4vpDUizfXvVQZ9vK|OWuSjQsuv?&foY?H16pQ54&5|3v%HwO);WG*X0 zOKwH}!10mQ!%u)J%S`!@M^2GKj_)hpjYs~I1LaU#n*;#EvI`2AAM*mdNWI1lT-kqO4m~feP0*B^360D zEAqqxBD;95%&(<-V6Pk~*Gkm>iO3Snh!Z%PPSAdZRf$$XwCF0!iDcNfRG2|`3zozI zCuq)5j=4Wn@Q_5tAH!gm{~7#JAun(3GUbv3%N7K2?`FY}PlEk#QbGn!?6`G~(B3WI zZ_C9iM%6z`k8pDD7PX9PKIL?-HG$K9n|f|5t1~I@42IK;hr6wDwb)4CrHhe!=@HSE z(dlrWfe~w1fc8YwJnXa?v%MG#zW0H)^hRa(VG<@oB0m2b*-p=Eu6hi>s2yMI(u3d6 zE&};5TLk<}?@Y5vi6q7w>#k30a*D!LO46#jvF=~v-Nu@9CyChCQtI%!a4$NzWqS2) z+Sm{e!ukE$9(~|>LBU&s$C)$ZsG?9`u;!UC`J}Uzm|;my8-22Qxn$g?d6B%Gwp&2G z|L!WJlie5$lJ7~ppmf@k1>>VWM9!wiH~~4XpJ>=cmQC$878x4;t!iUpY#biK38$8j zkraxMfPx@a0X7~WBb|ApHVrj(BY4O2^v%sas|I2a&dv@yWbMT|rQ{18OH}DC5vHAQzH>;)N>a}ISDF^F7dIC%6tSw z+|#E}z(A*_@E?}Cp%u`_fcWUo_&cPhgd;LKr!!V`d1MX)Qa5Azg;Rf%kBN%q3o)@; zj_L{Kwhn|IipXLxZ_-W-1nld(=c*c~}`GPDwQ~1Dq(Mj_X9Naw=_oucEXO`JIlwmdn zO7)D+8v#omg=-2OAyUg8mQ|%6WE<}!)v>7G*aSt7`$tb8@KK2gs;l#aF~Wm%ojc{B zYq5n-TD*vrk;xl31@a~MeL}@b5ySZ60!j8ddWsCDc1%JWVXq2=4$mV7K#2>M)0q2Q zL=wscO9v(3F0C_G1F8zKlXlXSP&zZB+<@ZEZ`SZHzOxWew$j-l`?aMPUq(n7JnjoB?s|m4^y#dC;KD#ocsA zj=tt~`s6T9?&#i88l^!7aujlNtWTYO~Y4jr>C{P4Dr9PSyy5)|ZCw z#>%Id+z-~!h~7$R-vo^u2M^5_;$TPAJbpyi29 zRdl23LL^A8tNCIXXh;<8KGLvO03Kl^J4qWL$U=>n$i=+)Uvk`ao*Eqraff zI?9@E$<`l6{1xDG{9~s`Q?Eq$*^goG;HM15c!#TnX_J0yIZoHbM}>-Tj0*xn!snE4`p% z^>)!!GknC@x#gf44(SN@Lz}bs#^>c3?vOaxV4R=sz<4};$!7rP(dIz)1DEo3hxRO+ zvtW6DW0r8O>5_$>7B=VTHzCt3rPoN|9d`Noe%|wGdrox&;ScwReB2La=Tpqp$FnxB z9SacQ=UMn>A28OlK-M+z04Yy=5* zHl@qC!&4Z{wkxOK$XKd00goVSBD%EUpan}|`sxse^582_i@G3UKun8-pe)E>nx$Om ze+4tW{+>^oFaXQO1YGH1YZ(K?KUSm$F+K(^G@yYYc{%fF zR<(M6XPnnZ*Qk(nwWL{*k!Z~9&_k||&G${X)bcA%NMY&huOVw|hZK;kfF=mVX+Sz? z-EJ#stZ&i+R~F6GcI@EsEoxO(R>a|nx!-C}u}X*N;)eKP10aKce*pRlAzw>Lna41{ zS?c(;5w1Dg6^LH5$c>mbItr9JOivdZEhXym+k*ydGzHT)mRZAc*d;X;YTM`6iP%=ve!;GP%(QnbrF5@Ix%o)&<#o65)7J_QN7nk<+#nr6bC|n_AMZb#HI7hBCg6py zl@4MavNh26sPdBuGx0b@tnq={Co%b1KP)g{fJXOHnHG~BJCdNQXewsWP=3hst!u+h zehp*ug!@rW%QDJ+h{=KoN;|#ekvQIuM6A-YQRwIASDfYkd<6P%W_ZLW@tznSEGSij z`h4h?R!CQB2n;G00(H}tv{9sVYD(Ffaw`<97?l}aX@?|2R0D_vwHe(-a|Q~~;#q=b z*7XfmuH^-lV;Pg448h|C)frWA@{kr7CR;3Q-|~W)uGIPMMQy*douEYCgdYg2cR{Qi z`ekK3&h%9^CIN|R=il6ad3*hWQp_H#a}3#>p6}esE*>#%2Wbk!qlZWrS&n;t@|1;3 z1F>6tyvxnYk%-^ZZBN)^3cTN`%^#Jd(0aek5lMH5j< z&^XE{uIMr20?A7-<6d8Zzwv7CCf|LRD8Hlk#wcYd1Tq~Y%4pEO$(7>Vc~NjN+&qlrL=lCH5nyAlC%)7G;Dthjro_h;Lu=&NcaU(WCka z+iOr4EF(*$SULoJLH;8;pYa=!sC;4ouK4R1b|>904+d5{`eoz&8t1`{2|)M?Zqts^ zpjtq4kOCl6^$RlLOd!B-8UVJu+Lwc?--z?NUxclQ6#($q7%v@U#->igbmoE#0UUIo zr{O#0btclyIJR0{)|KfD(*So|-^b!M_u%Ceh1d<{^dxSwa%Pw=WB;0As zzV`Bjf2&qrGB7pKm^QWIB%&~&a+}$>PwZ8i_)Wfj^4ks4>?DY+m)%H%HR*!Lf>fOr zr!Dd8tf`c}+|^z8T=)^NW<;#cDVh1NX>)|T--Md|eC_g@rQmfwgBfO-PK4vsKP>01 zjm?wx)lX`}H3=1j++#(ZCDj9JbyqD_I~;*dC)2X$i(Tb-ZBnwk_lRVOZ5-7f z@A4-OJgR{EygrVD89x$XM^%_-YBsJufU>C6r5@G7;y*tOw!~7iWN|7tDX9AA+dXE+ zb8@_r6e)FqQkPqDuB{lkNRTb3VvDKeCCOjg6GsIPMy0nt?v1@OV)x!%2d0sw2GC3+bvZdrAYWT(DhcAP zsp?gc34cD2V3SXnXs`(9&aug*6#D(TAN)n?WgK^l`Fj?&6k9+&T7XQ9kmP*h0(7D- zQ@iuqSeNoD3T^`;v=W*3LQ^q|f8knG!M4`w#;PX@W0rHRP{km4zNa`!Gv^o1u7KnR%Rt zl?uj`(j*7%7PM4z3B%JM&I*48cDe1e;;#I7a&IP9|JqC@jDSdTv0Hdpbp@DH5nf{c zEQO{5VEbK*4m3kZ={np4hgc?8n+psL7}>vvw`leoE(NItfhS><638b|^Mi~{(o>|r zW=}gO{F3|<&Eke+S~Zb-88Q=gT9CXd_EA2OYS!?)8q0++Kz~!Q&(CuX3g<127kqh! z-wiNMp$j);8l+y-wSZ}EJWT!HR*AFvM|yi2kp0^Hf%W-*Mr65hy(d86fUz1z~*)rblL8CVl+nl-J?ak0^Q7o|uL+ioP{ z82uGNjEX3I=d{wwoDHU*fQ3h<*G<0W6r7H%ylS_PpK&}G89NDuSj7;oXrQpTqw<(i zGkvrxU8z`%qe^IQYb1w2yY_LNUKk!d@hU-+9RKM@725$Of^@u-syWxtki?TYx=ZBB#$;%z)lDq?azjVP2Q;~st3$Slf0$KIR^D5->(oOoK$a-YvWiIZ`rH9e(JhZ`0+gH;LPBug^$44UQ%N7Fo zWcCzjdGb0%fh@6L#<(y7(_=D8@9|c6!c7`{GFV9FD*Ys8-=<+G=B?N=&%QFGWwYUM zSEW7o84|t2<$b+v=dDWgb_NJwb&nj5l{5{jJ6QP$)tThfCkP_krg#HzT&Zo zH}4&~Nu6`s$U8Hcddu>2NqCuAJK+%va3es`8x`U7gisLbsiDddtJ7la{5n%d_$cRE z)i61gev_(d#w!bQ{&|wP6MHYb49WtUk4e=EsbdI2mPK4kzsrstSH^BN=)Hc`Tg$=; z_!7mW$|?Zb9^1>3bMW9@i^_#1%r&SZI0qOkev{nssBn{%O={PV_NO5C^rC(XofO&6 zVF-$)qQdHjXqA9aoK1J25ntB~{+Pirk%zGg_y6|As|w8sUn_{&+8ZNC16 zVy>}*Z$?$c1d3?!F^?=>@XHAYZ+#C;l-_5(n1oKq(P1l%zMNXTva@epGfE+fWCD2D zR&s9eRyQrLgbx^_m@UwxF6SC{KD|P++P&uWUz#mMH?kj;uE69&Wk4I~u_w~uc z^QZ9NpR^)2){g&C+L)S-nhuZkt6GIWg}(l1jj8FsAh!R87``C(|ArX9AbPt0#+d$K z^#6@9Q`6(oGyFHk_y_ybnZH{767B2#kFL`*eZhbF{-+m8Znj2vw6gl{`xMh3?BVoIU;8E4vu(C|G2hvG_uE|6|wx%jgXOnjiJ$>7XG1Q*9=BQ zx}EUD@B=^qP_}Pc|F`=8s{SAPr)T+>WPjB3Ps#o%$iMVND`NJ4H~L4Pf0z8~FC9A@ z-G7O3;O^$B^yBAet4%d=Vs*RK@a;u zk}8{=9^XIFmt6F`mbAtXS%5sf!Ir9ZJI&1QI>&>+63+lSRzRl?C^eFwPLv(>vA0bw zK_MmReG<5XHg4%?pq)zf;2HXRbdj0#d|Bzkov7w<4bUBM955VKhiwtJ0aLQv5y@*) zOpK1qwbXHk6pSrgcVf;oDOhzde*nf3o zV3MMVl$xE9X&dKTvINnjHxZ@PeK+>l4XGNulP)bys9Ly}o%2+iucn*`jF10_|2VI( zD-U4T4ZA~(ndo;%QYyll37`p41*S4%qe4###zK_U)BmaAz&EZN9}Xvu?asnSh=$aF zk!8>BrCn)UFa^@a1=EtiSH9e8YAkz2`1VGyPAIC)b9*;$_`UXn`4-ow6Yb^RW*|qO zR?CC<)_8v)h|Kd9Kb22mi#W|fHf~V`LOPt#gwRGa49mcTki#m@EHVTgjzY};M{h$w zpEuzFY6eSXcs-^ob8+1|vN*+B_PQ_#Vw%KeutrHDyD7J=!+Ynr?v~?H2VEepk}XM1E)>%G{+LB&C?qC z+p&Sh@LL4oCklEbSEGT9_U?19tk8?HFfAR5W~&^&2)*dEP?BR?b{0 z%xexq2`V6pLZz!8kEC|~v^p=cH>t<=P3~LWO`V3FvWK$hB%-QHox6)acWdn43vlx0 z(D(%eBwY7=)3$TpqhHhwQ3*H85|zrWdXlWwQ!R>)J?IrpEb}&e8e+myUgw|{p8%@ONO*;y_dvc&Z%)v z{(U*O@oY)!yL}`mNWDZ)0vVtQDf(vNii(3NY4K@weif#H-=m^pbq929iQ_ji;$8?H zegqx~ZSa@-Y3_ap>Awj)_3p;gDMo+x_cA>Sa4|fIxk;$EP>HGJMty;z{~gDM`~e}l zgrgglUaHApb*hDw<^H-j^gfms!dSGzG$73;5H}b4lokFK?GhhjH=euYl%xA9Phwot zbFTXcaY-dgpOJNUvflE8t6W9FJz;3-wkH+Y9?GWHmjSPSMJ$+H7qos6g=E7{Me?Ku zajWKA1Tixe5kc^b7{;ChjDf9Ni&UisXMsgWxNejqR+g*juR(G%(sQ-506z$jlO^lA z?9mP8_Qx=ESs0nZENk*C)MUA|X8qY6%n>U11^k@I^L5?8G+hdtqkZSJl7}D&y9^m? z77Xe#HmjbJJty-dLE%!+d*cMRo<`l@vHO@%Z$#f@DQu|UqzoI4Yg!6EwV2R2>mHiQL#V**3!>tp`~bQpiSeLp4-Xu^6U(JrHRIB5)Y zpr}#7klkxp8yt4tVqvt$%VK7xYuFL)if*2W^2BH}fQT7F+^T&7lGiIF)^j0UUcl|W znG)8niMoE!GKysHRHBtg2{Ds$aJx{9Sx=Jneh`f<+bxR-M&R>C#K7n1bEu5)(1l&^ z!!zUbOyGro>$VShd2%Fn3Lqbc7xAhH-^uq>Pa6Pue%-G-CHAAxJlLGqVP?!7n7gpa zg0E)%#g*NNm0~6G8CsgJyq*o2CxU&pcC@kXK3!OX1e$2?M;`UU5KGpeVZx{%d_o@- z115=XQ3qZ#q+pXpfN7f}L@T>#XMs^}DT}#-ydecL-hR}~f%nVEmXpU*W$P#2NyRvZ z*M4cdNiuef=G*R*;nV@#)aPpwtB-ILR-CHzYIW2qPjgm*&Kp#!->XriH~;8LD%s%L z(H_ITi4u{Ngg*{R?u?iNMeCA3hX@i40B91wG^c4eju>4!b&0{5b*VurJ@MHxwD!bQ z`1E3U8u8j{#(NxS+z*?q5@RrJHqRA{k!Z;U&Y_p3Y0qapXXE`&tAGQL8%P1GBnV6t zxoT@5`A;W+b8Ql&!~t|ool&fKJ=W5lVM>XNS&-ABiD+IxopeYOr&!x$?0 z+Vi47x@V(4;dW_kgh8pqYltnag$9W_$_v5kZ?L1Mq4u9WWqV(A&u0ADy6cVsbo;6I?_$ouRq?}wOhDxau zBq4{AB&eUR1gDHCPB(fA(Z;sFVT|RND4B`90=#xd1sdoH*$e?gE+UpXUuu4(5?72? z)tX=W6r_)yk8TUj7Mq49vv0hQ1#anz+|@^}Bpce*Z#Yy>BMRdAb?bBK5*%saJx!_F`!R&1?#ugcvH`7x1kq$76{%{E^XSR|!qRcc zBFjzIXS&69rsCHdR?z9NBO$AMgCfKj24-Y_dQU_uu~7p1sJ^m>7yELi2*U_w&)giv zF;ffJY^r*T#K$}(3PL%@yikfU@tb2NF3J^8aS<+G&H(HD&EB_jbjY!+VzR@C2rGA< zSbMxxh9Qg^X}LGZiTvSrs8tA>V|-5Ck$vqrnV%5>Ui~JL;=Eam1Xxkvq9Q&b-QW>R zX!Qf$OiJQ>6FBkJ&VJ;xrvjwHR|Kx!kp-H%wU}B1JAJ@a+jhYfjAl|Y@U+bNHzRUL z8=s*5;F5_m5i4WT=0v(n^QoEt=aW_JZ_H!A**i}L7k{WeqVozuRx1<(0RQ98A zH9j7%O6%MrF%0tQ@rPDY;;~VlUKfvwq%O`~^o&;TT_G?mGT%+cHTfRPf3av zI-82i%$Ij$G!Uh2lOGN+3Z&xxSzy=f31nBSvfqH6~Tu?KiTO zCe#txUzox<(PrRK5YiFxa^T}I>bGR0N5yjepE~97B(HOp;9SCY9SV_w2foG9_YA;Rgc4iAnZGdH7AhKSOTbNs= zTjhltBb2z%`*)5cTtoLQ*$HTO3~vH7I(`6V3}gj4F$SsfpSnl zZlPvRH7D)Oc&GIyC7W|A560Vr`RS@s%gmH)Zi5^A(QNSD-^)Xn0`0~D-}(1Qeky%M z_5E=_N4v4MR;_J@_I7cj?Zo96}iSf-G;3N=SdliASg2rgmVLxjYd*cYGU5yMqWU4P2% zyj*Ayw=KluO@Dip{TQD|DJnkLD5(>-Mp;01tG%BP!}7s#NVzD)tG{u+rwf9M1C zBM|8?dYyVU$r~iS?~SfQKBC2=k|j}CJbmk?yp&uVlMl2IJOFsXke@;ElhgzgD9PLG zAt1=2+~P_r!AyW&C+r*k)@_K^6ar55WT^~5^aICYnD;I-(OWM{3^A-Jubyeh&;e-{ za5nBahZLIsob2zR$8bzzpsbN&b&QR8Ao1C`(IK?^#C=tXXK1Z-yWyFn;x?wsT5Qht zeFI}zoek;4xbCbNPcCQd)Rtep4{yrYUc3B{H{C8$<7r{hzk4!IKBj595Zyuy6NH8A z;wRc4MTU&QA=oL)tBp zpHD?O1*X-(T*iJf$C4hMxxoQ37bz;(1@<+f$mM&ikkBZN!yBe{5@!<5Ys8@%k`}T> zVnzfK4Vz-QS{gixaXg?;JxD$^DOhKm`l+?m;jqK7{t;mpcgfha~{L%O8!{;47LvVkG{+2D6G^Ec0Z7R-T`=v-kVy_p^9cC^+B=E{}Pr3f{N;V_$ zHWVnr#e|Ou;HuIbfpEw6GjyB#8?%6?;b-#Qr_WuD317eyFz;zQ$R+|9-@OYOZK#`} z`aR<#l_`N_{wF``FI~Ip2f4U-eKsJtJ{-1iHr$>%T;qNkHd&OtAR81%ptgJ0)8>4v zJ~{+%!MxdKT^_E0J(b?^8tmxY$oCp#W)bqoI6Z6GpKn` zv&A$5mpB2Wy0jg@*$HoAE{=K))UU?(a3#bfT)=VC2UAjB*u2ASbS; zZ%E))f?JhzFCpKDc1z$8`bc^Y^W^U;Qk4)#FHti8-WbIp)hX2}Lz~w;A2atUp<^^u zgWR6nIpFpjLqHuj8MmA-Jj*N8-PcL7)7S-1p9SoYgRat!C6e=f4N{a2OStr*x7=16 z(uaWMIHVdL1dl@>pS=LIpNJuKLX_}>jXmsF!@zhlGNgaJy!x2fY6(YKkh(;p;+6bG zLy}A`=?vpZKHAjm)x6HU4kH!PG#ZhOF;soxYLp(XgYSv{mM+vP{W*~{$NH4Dar2DB zYV*od>%)d}Rm7YB8*fK;_6Y4>bB^Ow{#2LaJd3UvgMBuTOTVUqh`KJAgaNHtu*^c0 z+rIa{9s6^B)V+IK{Fs0h8w{_2)h5iDE+aS8qX=&STrXG&xeI=!^U8Fhf97V`Tq|6i zTtpYdy4+nHgkzeZ|2^1A!?Lvy{8TIDRbl zPYuF=+PL0daYB1k!MpcNCavq}uU4t+=p>BAO9n5!3@!nT3$#fVUjc9w*kQ+MP`h@h zSgENTg2fW*xs+y`YU(>mp+_Hp5dhuX(@a(UbKoIDbT#kVf=DI?5DxGo+AFvWos-4A z8j3sIv`xnrUT+!7#}|FAR+Kbi914o55nsM+$#)xfIN)Hph2m7q(`9h8lQ8&Y;su4$ zFzA~`_Q0$RqY9Xqr-Fui@JIwP z5###jO>N_YMMZ;Cu@hRS+AFOs5WPWbuQZY~3YXS27T~>!uQU!bR6pkC-KEYVG+SP? z?rTpB20KQK)N#i@-xE~d)=iM-TDoNEtE;drhY7Rsk2K8?Ss66&NGd^Q*qZ@D ze$DgQrbfhO+u=hx1wRI=PCp;Yd2Bkdp!^(6u~64sB4*SWU}j2U*?BIKnIy{q9k$q* znkx4taD4Ldc96W2gF2ek1gRy1bXQfW`E+lU1{BGd+SeuF>?yEpvE<{Pd^M05p959&1|tn>MHTI^da|=!GcV6$yb5zft#_A#}O1{dB!)t zE`)v1bCX~mewuy6!5I?8-azRz7Bt@U_&joPqiQB~O2(qNWmx}#&d-JwI0T~)4}njp zzrZVeVe!&gjd()K8ntc_PoD$u$7`EN5dKv=!c;fHuecGbu0Y$~r$F0Z7kFH!P4F~r z%zc9+4soH^$38fH2G#;C`|Sv@TcOvg`z&Pmny=jWT$j%9H0{)Z<2F&YAh(({1e!0? zf-R>cfx|wmeMr_qEf}qtc=%j59s(_g&hS}|8sM^B%zcWnN23INil1)a%UglAn=XW& z!%^U}g4S2D@L3;UmF_viS9MbdVp>OCOYOJv3q4Qi1qLj^Z-m;uH3I})Vc)8;@^3wF z#!h!3+_H~+SVG(uT|wL)uKRTyG~s1?Sd1LuPdf;YXnf)d@O*-fRQm*(YU?vh$)oCk zSe+a6Wu#?`zg+Q7x_*`~eaqg}PdtW0tAro|NT2Wc3>^QxX68{(*pj=M2_s2H!-YbHL*!9(4MhncJRY2T7Y0Jr~&TK zX)gN=Dn8V=k}!b#;^Wh-#na`-&lB6kb5YRM*s^X z05DzoKLC#*>6}BmffBw>&EJ*_g6x4T*^MHI($jUw(0ZA^6YHsEFvd{(IA_C()9t zdS6EuX+H*`PiRXFsLNfj8Tf46Lw>D9H5--JGYj?oPF z*Pi2WcD?!=nCXTXXg4kJ+KHxcY#fjce4OwH5q9?+jMVEm8ou@c_PV!uktl zSKXc5oocA4Y>s-KeM@UHs06QFa(lQQAE4{bHkAKCll>vT{y~$murV_HizxfU6#jpR zGKPOKh5wT%`%iXGD}LHKfDU@-$_)~?T@Zu_yF?+7$q5zqEx(o0Srs0(yJ+(ER)D);@vIQMDcXR?$5HM%zMU!NCDkp6nne~%X zf2&Y zk&*c4l@(VWt2g?w4+b8W7`*weo%jiTyNAr)nO20LsXL5&x&^?@-!3G?lCQm^eoBkF=vYwcP|hgD&!psDsRuWomz=*3e4io1^8%O`D$7QY^sjpijOP zd?+4~hCH$EqRN)t{|3~s%~ScmN9r%_|6`;W85sXLPz-;l+J6qz-(2e-eptxJ!NA_k z*3riPZ#MM{lF_sJB4Xv_WYon4D8-B{osAsL4D|k$Euv>-X6c4U_OBfBzq2g$OdRmO zZj3)X=%1Pe1Z-UKH1Md|nd$JTnb^L_VkRc$FUI&w5Usxoi9709ni=q0n^+p*(fx(+ zI~W*!QP!-ie<%OQ_9sovz`*`jzM!71n30)@spDVO`~@jG8d)jheUYtyn*Eay`)A^h z3|~C05d$9m-<xK3dRJ z&;FnNm(u%3nx6h|$^To`cz+GX-<-Cv^%rGrW^IB;t72x&Z|z|APvEbHRm=<>O&z|} z_~$3}zh8`uj5Ks~tZaYr?sRy}%q%qY%nXc7O#hF|ziav5#r}5-|1Xr4m6hh}Q9#G| z=hpiFd;Ld)e~SJ`@;@#a{$1mLpmcZ)3=A~%EUfG-f1WnXbpHjg{k#AF@tyyDNr(4e z+WL>?{>a4o?^gc0L%)0yY<^gq{c$P4qyO6@;@|fW!yh+?fBv5S;UU2AFE@w(`QZC6 z4*_OYMwb8b5ZLs9a8+8|eEQ62pGr#|J%2M~U`#!S0u}&77wp3^loy-PT|q4b)K{fo z`hgM_3RwqEv(raG5{L{+_EQ1=*n(13SlGNVuTfHa`%!RR;Be}#+eH9a=XCFm+iUB} zt*e#&t@Y^R>gs)&5eW|7~zW~${v(3c9uSB=r@ zGLqdu<{|=Mp9><#&3?!$qBy2%#Rp!+^*dg@#bJZEVlx~{7vS;UaMxVwO70ZAd5u=c z#YCzD3e_vI!FkL@NX@3*_HRX!Z+AWDzFk2p(bK67rd2Ik?a1poy6e0y9}TUf(s$|r zV?qFrV0^id;|?421;c`OYiZBs%1_Gx7AQ>)wR5=WiF4)@%?jA$g z%t1Ih>EkmVobn+i2ainC$a?o>7>N2KY1S|**Ua;?thbHhaFN6tbuplxC-ua0$XWh zkg7#$)UOBg{CQ&shQJtqVHRCzXFx3+R)rTsay(Pu)1ILT=KeQpp5<2xF#N+T&=-lJjO zu3|gfxCsN}^N;iV z4Ve|;!Ctz+rJDYhq;vC2CXZmG5M%CG;!wLh4)~N>=xlb+iCtHFYp`FcyqKghSo$gK zBobsH4=Kq!YFMkz^fpHL~3*QC?b4w;35dKUF5N z_r?bNAMV~U$da~e)GXV!ZQHh8UAAr8wr$(!vTawFZFF(^IWzA(ea?Je#7xBbH9vOj zJ9n(e`_8p9G9xptbuB;95My0nmMLj%COt$0Yn!Wh~e62612Gb0XO*@G#x9?EIMSPLUl#&eQER`86)L)hcy3!gjSWzgOC zpY+yxAgpCEWwMX93DCx+HVvLklkS4`U_7>hR}Gdz17t69FN7~%wrs|-&>fs%TGSX% z2`uu#PGU?CA>o6FvE9gP^K;WKX^MN6+`Ezl93~KmXrQpXj^s^7=1!8qxL9_ zh8}ur<_wq%u%^J1R>GLIQw*;^k;!!9Cdh&XjpoB5Z1l_nv1f}VbTTL1SWok zw_Ijl;!pNZTg8ha(M$JBOGUm@08!oo;ZFe&LyB?mvoV^H@FRNOMb0C$TI&sSbs!mo>wTG-e}VP7D^Z3m37X8Cz&~Q!>m`Uw zq@w)T%MXKZj+f3K69Ye=5vBMexb9zMOv=ZW3blVKj?EgDWu^Zma-pasfwM<+t)a@W z2hW~)oPo!}Ojb90*~$P|w>%Xpn?Xolu0r>-s=%O4`Z0{AH$H_@D(lEmY}lTn(A8L! z9)wNi2CYsc1m+`U#_d)}uCiRF_?C`&14TFGr3g?uqYg{L!Qw{u^$U;~nL;dls(X)= zkLbWekX9|St{R8C=vTb=jITIT8~%isHPD*TVh0Ggun@6@Y&zAUU-q3S`?KGR35Ny>BT-6oR8w?1*riG}eoJFHD``DaGsP3hbfF#26J7k9l zSY!Ul_h0U!`{BfO)?2R&puesXzrM69qSC+m=?N^j+2p)Ct9))ujtd{r&mxoKb%{B3 zMC1({zjR}w>tk_Y#M*h$Vi^o{@J$&e&qaZktD>oFL=HjrVl3w~9F&|0 z7(CXWU_~VpT}*6_#)l+5fFp=F=Hhh?G5v93v`IIycMM@_cdR^q>&{#=w!_5LUg$%^ zrP-EDUBKAn80{X4mL_orcrF7&8x8wB20a}-aj$RF(UD|YWR3z9juIDFRg9MI z-!GbY%E;xB{c?8qsRDYavSlfWm`nq_8{z*4f*6zQ(k=lLy2NTuvYqM|9L#r(U>bRS zIlw3GCtF{7ye<)d88Z`8`RXwl1n%+5km}WK^ErFQmB!na)fz#2-hDAVs(QhXul4gq z<%nDg>zLAi)$|D4hhTvL_9Wyro_Xp}2=4HR8Z?de7(u?19{dNI7o5YIBwiM9WjI+_ zFbfI(g%ApJ-FQrp+7t??C4)2dye(_yVvkLuTzpFz4Q`~?={9v!ae52L;P!%H6P4$n zp=r>UL_0j8Zoz7DmD7zaKHsn5#XgLl(Dd5R02rQ3HRsjgR$AnV*-y{GQ`QA1ztk_M z3$@Ud#3*U;+6VZx*7D*%rtZ!6YhgQyzW2(C`+zd?UG+_5E4+7kHR2m- z)qCD!0&bl90{_F&+|#O!DH|4EqaEw@>}fNTP@<9m!GNC`LBt14qvEAzGZ6GEbStzg z?4anzbP%)os5#hbhKUJIZr zNqwZ^$^_+)U{nHv`Tb{2+E<91{?+veb*Gu;{FhVz)IkgRu79^1mR$8gmHs zq6jZ{mD*n8d+bFlx6!`d-tJ!GO1#+b1J26isV1>H?nhK=;(I?HSp?t^6_KID;`^z~ zl6k^mt_%Bh|1Ps4pSslJaW}SBXeHiOj@N#8L_XnL6Z_7%$IOs>RK+=6mybrp{U!g9 zd^GJnv^7MJz|oYNc?A|%jd6w5qHND4h^@-GO|pyU;y-v4i~QBk4rkI}YtMFiCJv#EoPylzt8gdV`0L@YndNg1nt==01xLCU+?+>}`%LcbG$uYGt=|;ubo2i@RY2Xddkfz4D zidleP5D5#-0Bb$902-gi0D@U7VPJpsOQ7MT`qB=vZEIyiJ%q}LFJI;(3lN^tXi6L8 zC9Q~kdoB{wyF;)E_9Uo$k5pGla*q$bZM;!(k=E=N37inny> zbn$c%b34Lyu`nhyn2J1+FJnS*Pm1%xwTu_ZO`_jFaIz=aP0vO-&Ir};6=EaAw&Q|^ zuw!&n=TK_)ex%%CZ&7ojqO*ZI+cHd^En_eXhuY6!!wIJ%GZ%^B`?K_@q2C(^OAet9 zV<=fc0eB;G>W*r+2KPuun+Cw=FQqtBYlF_qtV@U3%Zo&83Y-cfOMBjwr&H%_zo35- z>J)zy+YJxMoE?|cNv?+52dngb6s>}XtnfSkdj4_7qs>adVXvxwmnDnd*2_eq)L^@1 zHyZuMeTRTMp4N(Q*Jm~wg|5ndHG~9OHE8;ssz7C1ei=Z8H{cR5qyYc>l*}U;H|+?wA@L6W+rfIr zz;3>>1Dv}ZIYPP!*o1zWpMKInIj@rz9m#Bu%f}nyvx1>IJO#Qi|76j+P}WX5DjX3; zJd|U^!qmL^XZ*$)B-c`MO9&8NmiTB9lS7BFOeYs~4v^6j4teo5=9506a2_dtaMnS% z@o>a7*|cGMU}X2EcD?FYfs>R&Sz)g&ef4{cH9JM-^-JeI?50uA`3Y;>)O5AG!^S&t zQ{0X=_j`u$%<0w{_q^h!x0mVn#FXH{2%p#Jh6w)Ka8J?7wFHl7+zch&*N66f7IQtM z5hR)sB&!AiG+yjePJWhtwyfEODR$ai2%tf^ZFqvGh#uC3^b3%PNL`F&H(~;<L`BE;{E#s~2l^en?2P(tNoidA8r$=P_|}xZI?DINY{5LXAoNo)M>hzrhCe2a z!!2|t0N3X3F_v}X#EfFY<@%U+gpYwtq~Hi6Yd1WZwq=4DW8EFevFU&4-@(o0wF)39eh9xkG!uPNv@1tCIh=ymtL7X_WL%Wl<;iP9g&DGh~$ksB_{C)xy$jNt}r zL23^9$eqHtlD$w&ax|Jta3(`++fxW~swKmdYE1CN5l%jI3u|!C=N@2KysC>M8>`y* z&QyALdAB1i8XiK!Nc$_~YLn8jW~(r9_6CP~JRDb*d)o@a7=y2Wbq%5SNq!`7yG{@K zdb$uKR?WpyCGbYU0(uT-2fqXgXezqy>|>b-;dsTkg66Z&cxYg-EpG9 zD8>ZrTxyQLN{^4>TJ^lK%k5ItP4|}{c5R`b4weN#Z_Oc1>I~>kK)@P0;onh)vGNwua25oseZBHaEf|_rJ zddu|4p~Ej`7xccpHQ!!uh6+#ky56AAvYk&2k@$S`V2Iam5C)gg$A8s92vZd=E@-P4 ze{PB7k4G&~ET|`-7J1|Gu$_bhy|ia@jPyGo%#_T8s-6(Qd1mX=a0EIDaw3!c+#xjv zII~fyPW%P^e03VH`{TzFVy*R}hqv`fhu^bdkXsXY-IGWCuJJ^%Vd?Q<*_60>oDIgV zeDqUP)@*tOl@1H{0`4)5FX01TCd%HU<(`WroRL?Tew$Twr?-nrl>?Wg3SYPPdnd-r zP$sWyTVvsr`*s^~MUeCouOq^`IOn2Z+zJMfPfkeOM>E$_Ll~IXw8r=P8qdN+p(*xa zmBVWAN%_~t?~`}4-MgvuIMVoluUFLBFB%s&V_!dy!#{h#-$R`?I0x^!ZV2 z`SWzQv9Lewpx|39)uzuaPo*YeOS33qDw~{rmVI1;&fGUdLgrL*GMUIi6=GI~ZVN?I zX;Y(;Y8Z1iM$KPAB4vb5m^>3Te*qEnrio5~YEW}lLVFAt}|=$SKsKzhWTgRv26>I>=? z$sX0H*iU8&@WM4=oYL*)iqA-Nv)yl@c-PfEv-5J{ExSAlJ`}aZn}`K}I{eb;h}slk zbBvCAT?-qhvUTBNS2I@gj2465ogFlP*HqCxf8t6f(z2ys;`*#40;ih3+C?g+ZsQ8L z0k_qr;H`%57{IEk#Beqhb~wk`iJ^r{H$1}8wOK_I&V*#1A4i`&xgBof2unMHUKb{* zNOEVulBo#dKa96^poRs}q(3v^LF8Ee3V2-B>+60L@VkLL=~O%GA?bczuM!{Iqq$~2 z`!(OfUEEfzoJjI%?e?jx$Kz&wQ8!jqe7tpo>a8&RNBd*lh)Fi=IlC~!M7u)A*dRRR za-4BYYO03NBNikm`)HvHq(ZB-Q*5GY>V$aFTv{Qt_s5$k;zUqi!2Kbwc@TVQFt$Of zXdr>RlMq@s5c(+4fRwtQ8)#?+j4|4>089RTF(9sVXHn{*xD31i)M$DncfDpe+np&> zZ3h4HAUX9xZi44V{FCk4CV6s0BX)0p885UrW3rlSr`VMs=-g$be3~SE;gOGb*)0Rt zRb2fX;M31HEMBQQCFf@EIK%j)>;y)NPZDxMkKpl3vc7RJ-NK2R#pvS-_X?ZMUbW}C z^wC7>+S|rvRpofSrAw(*qcaJ%pm$Cfj3)f(8qICPJoVHK`>A`BsQAt^PCKcf46%z@ zIVP0@VOqiogxSs_0#(_X=Hgj*OAXzAh5;K49Ts^e64T*yuz&6K`k_3TcSfdzF48OJ zJlOf&iA-fCk}m=y=rJazKu|n(C72=YUR&D8?ejL@+5Bhfuo2WGH`@2{)p6Ggeop66 z!5w${r&XA#s)S!M(n1vW&Dj-h=4(xK&lI^=veRB;y3TE5b!5VCLDKsdq_R-N1VrNi zytrulGcmDt8sZublhZ+vxruSgwTT}Wo=Lg#DA~ucE)uFW5fx0ab@`upfwOZ3J2{9C zHB7cF^M;BCvPF9>5r&GLixtpkiXFNTEIKExwp&Okkf03=4Oqgd4D|Lu)C@qV9J)3L ziucv&6*8HIMCk<_N8`qmOlXNEQnApmkDV7`BY}mJZnhgX(4i^Zi+rzDj{}%osVJ9Q z3T>)d8RpwY5nFoSYimD;B<|~Mju&>h33I*|87p-5L8DkyB90D|_Vq@5=L|iTdKYIP zx?^svuna4irxDPYphH-Xr|Tm&t=EmWjWrB%K``V-bE!le|}c;0!J#Nf8=K9twAQG{TEWxraijFc$V4 z(GyC&!w~pLKpLd?pWPBCRpr|Fvf(_T8DmF6!)yWcH1Em&BDVesb4GbaUnjZ9?S5y1 zi(ellZ`MfM#l{S;x5}H-zKb~m}=RA@~YYV<7kN*r*v^wX!%En zt)^o8H+hvoBCOe}Ct2Br&T)YidAYnn2XA68>rt0tdg6!wW-J>KaG*UOTmNt!2{pw5 zA)hU&<`v)RiJ>8uRRdEf=ZcA1rYYxulk8bs9`ZBGK1Kz)&ioG!n?vHh=Q47*PhDwP9KZtkueLrX6OJt4jP8L=Zoik`mp^H_G8PnQRU*oHjd z-^>`b%U*+9IePC9Kf(kXb6hb{U<&3j| z3JBqFx)I2Y7_+n8g*hUg1sUO`wnAtgFD>3gSIvK1+tsw|GWYKCqx5cLW@*Vw@+WXm zB$#;fum@>R(Icrjgk>~MiAG;?=%Rq43a2fW&D%3HPZcXQ;LJ9B;2?J<6!tg3j8=)r zxx&WFg{nh$XS$uMsNjOe2v=Fb%karm&k5^*g0V_r1a0Y7fZV4a>Vpxd<~2ErEcVl~ z;;@IK8ipYCPg$kM*$GM+`-2+Qd*J_mI$3aT{C2AFS>(IcSk-mZ>f~q4=+rL8r?{^N zKPmv&gO2~kBKIZNVHbuhx8j>Ap&x4=R2dZ8LIm?JsU=mIO;hj;gR0V45 zzqjJkYC1`0T`*uLRy{K z!-^JobCtaPN&+u`HpTzdE|AH;?`wjq#cCv7}sywMyPaDozb-b9a)*l7W{>Zy80%q7hNy8 zd20{_jbIOrt>Wq{D%V}n3;wHhh!gX0UhB^o@7K^cZOT`0(n)5&9Er^<|xbdn&e=#+ zZhoZfMu=4jmxuuz7)#SklXNZO4BiJqv1|V6rAnsug$M##W4f#qjiE92< z*68(g7#une;)e9Ge6`86lN|YL9~#R&yG2R}X!m z$$-c!STt=k-y7@CF3IG9S2{S!;Rl%Q4{JWz;y#PB)rVN08k{Iy zk30BgtdZ-D=utpl9c-i!T2&h|b9j9Sh=U94Hh{Ml_3{l4x$tT2dEatqvUM`we(Z?D znTL~LJ=`-JLWL31Gr8}AWJpJ5Mns=N>@qt5U61Pv=SK*i6ni*jtbG6D9{CWT`+iTO zJ2esR9&&M_R)#O@Ls?0Pq%mG^M1Z(DEY1E?tvj|TeKp=|9H=qZI-l{4;YwfKo{chq zL&ShVS9s6Y9R-mChJ4@dR{ox}g&E8g(1~iD`?p{Gci4gUgdG!X=B-x9s+Mj`pCJZ)F;Cs3*R28KqOMU^DNQy+z3P+0%@G?N| zy3%cI;O}c+4pyPMU6Eu9*-7{Ek=mXH`w>71$P7tFO48~Qk6#&cWrT1YLFm>|H+#!E z5SK?{Rm60jX>euC6ih$rY)rMMTbp7q2UrYWz&HhTjQlX-WXoxx*p;X?IH}jZ-S~NJ zxVhfe&SVR~o`^ll>QvRiI)!r0;})PdQg^iZoBsDVQe!aUz~=zgR!-Ac6Mvs1j7DO_ z68a##K2!x+k^%Ach$|DMR(w}!qIkkcM|_I4ekx;-1)<~M#jWt+3T-`#8nfHr^Wpmx zo;y6}5#Nt0OxH%$y?wU*YaW=8G11*07Y?g!KdUIvy%5Ql%olPZw?Nxh36Y{q#hZxs z6-*h3|KX%<(-sZV`s5`>>wlCj=i?&J!5UKpY-R4{i}`7{H^jh#hrx^|ZT^&8V>}Cu z9bw~lh3)i^%j#3iIPUW>g)x)+UYXLcG_5uxV|=B~C!$}~Lw;=gtmHb4OM)!AsQ+?z zso&XMsaUc~c}tSg340O%u)AGdGgEutlql*ewNY4{O3fUx{Bdm$L#S|aG!aP(hUKx( zhQVQRCc}+(ADzi&R^M4VjaaQVlCCgaTwzlrwz{m+1r*?UIatf+@*4f8B{fsdZMv(a z{khQ{hKy~pRnm2>l@Zx;+q{?ut&v<7t;V*g_I<`@*71|pbS5^~rn&iCu?1}qLf~j< zab}F8)dH3^EdIr)$ywxECtG7-7DUF#`ZA?s8K~7^?a2BUn`%83N0W&waUitO`9=<- znXJ8%iw|~mrIp(djubKdOTCY#2f*%^{f>=C+n<-6{k=4*U;7Cv-&JP8JS5>m&nZn7J_ROHdfB0Qo`H3o&}W!``hJZ?K-FHBn;kaVs4zdIb}0ED83B3@$s}4(4c*N%TX@2d_`_- z$6}?a{H8fZMO-TkD5F$0Ko!>KD~#a=L`}P4F#a zOvYB6%)wAo(hGoyqaDWa6ZdsUqo=BjtERUXzgC%`ZjkDtdFcSEsY^Y*rrIBx#9qnZ z+TMHmw!CxR#b$cBwpGK0_Zq12=1$SYX4K)}{K7#^5xzu&F304iv;)I}Zem1A(lVu? z9gI$KcOlUd6xe1|Tk8jHV|2-e1JLeuxQp8#`WgT+Ch1slLcxh)Pl*8@1Xx0?C)$GE z`0N4)HEd@$#{Mh@;ziI>8a4R+D+__{oe$#WT^Ay47i%A?xZ{Ud`}a5A0Pr7L`o0S> zc02smM#4r$u>E{D__qHh$o}c&4-35l0WXwkWgHCteM87|NERIC%RVq@E8@eZWnyN z^Crapvj#EOpJjCtVs|;nerg$vooMTWR$zY@?)UZ|VET4DUcMXg-Yfni0_rg4n{15S z2Y-y*kAAFd3+ui@;sFKo-r^gcFwYnGa3TWQ*Z2F$<2tuFvaX+k>dMP9PhldCZ>H}y z&O!%qTKN~hAfFAvwwwNpcnO7n>YjVqam5AollMIbvWmk&|0GcIB2#_BVm;0U)-xbR zAfp?2>X9>i^++RqtY4%PwnI16<|Jdx&n3Ou2QPijSet?OqYhb(n_*ulz+M=!gvIfw zwbf`Rw*5?G`)brx$H@nKIqK)0Kr5|7-)w$SU%uG9;XAX2o#+Fv`s7t=1iZ9au#`BQ z1MdL(-{=6HV8|<)%m8iByKiLx162TqdclMK7N+NO;$AocZ4d;q(E9Dz%IN-gQ2vmU z&M-hz?tQ;;5)+~Irw1Ns{B2PDac|ssp!P09&SU|M!R-%zyu9ZNoD845(*fptLHZU? z#?8X-^Y`y4{pA2Mtu3Hyr0 z4gkPd7Gd;e+>Tgq{wW+E_J29fHJZCA#e2o%1ZkPWe-lufB}wLM*Ew@=dBF+&$#F6g z66jB@vo1b&uCz3)gY(C9IHV z*G$wwYQu+|$N?=X&#M7d`T_Ta=jJ`bEcC`j#!Fe)tI*+h?so3G_eGCGW65@#+*gia z*G+}WT|T%S?`anD_Gy+@adg}oMw!>9j|m4KUFluQGwiFU7u`D)kwbz$_bl^3n$9D& zUa5G-@u;XUW6|uD=FLTzu&%spF@9;0G5k8zy0Mj)dHM~6+MNqLOw98(201?u14$JH z3c0jliEtyESeS^=JYuhcvjR!rlY?3C(SXi?jZi~8u`#3pAwfGxlQ|M>q3%+or6NiQ zheu1#!YDqeR{@g2x|hJAD4m?{pxiUXdYSVzH%TKAsvyf~629Bm#2^m27dMO}EH$`C z$;jwm1nzsa|ieF`ZXPQ-BxvYKXXi=);QPXL8tR4GkgRu9v#=kXT@0+j=&17R`)pAMu z%%-awRN-j^u0?>u#AvLnH|OS&&o@4j&Z`cL!>ph1Kwj<20>uyh3k>)_{-{6HAtM7b z!@nT#-_oW3fQ$b+mi{ZX(f>qjD^JF5GQf0SP&;qop}96DH$!6pMqZJI@y#{k>q|SY z2pC~UI*sk79n!Q4z_X1KCo-d)9zVSvamZ)c`7V*>xj!7Rq)n_IsWHC?%r0KKdg+yR z_xP=I>%A?rDtUM6vG?MfI5_B>WaT-!Z=Y}Td(%z!=Vib2{?>(FwcvXX+pQy4DBJA( z+J~OavfJL@gN|Fcw(9e}pufbX_T@q2%xirwO8%UDbwGoV2)sbTOeOe$enmebel7O~zy}HIF@PM1 z+Y_G#&x;nHE$7Yi97HNc>-^~)ko0S8%xw4;bJ`3@E;2754;6inC_P`gH0!6?@Lth9 zU=v6VX}`9D9msd_7qPe4QwD?Gf(N9QvDU53IcM|fq9yH{_*Gs%`4J=!rTiS}vTXZF z@r%qH(c(aN@dMdZmb0!9pC+FvNtT2Eb-wQ$xp`i&X5u!dJwx;tlC!}MyRf>r+lLYP zLyelI_&cICybEwy2LD%zi)PD2ZXfl*s^EWdKK$(&V`BNgv2eD(FxG!r=>HZA7nD|4 z*Ao2y1s4842wtUs7~KC$NA`Cq!@sHce}#qr*J=6hv2dn;Ir)E6O~CZepYgv53;*wV z?Ei&&{!btq8yg)bClezF2f<&%znJL1hJOXHF*5vtz&Sbo@aF#$5B|T*@)wW&7qI<@ zx&D{<{%fcI6N~-V?|)DBFRcAn04EDG9R~|L8|y!rWFYt}{y&HL&-Y)8`Fr?>EB|}* zUy%NJ z=lcKuL2bwKPxa5=cZ4f1H+L1)ua}oCzMj=7V^gM#R9y+;02sm;q~dZCbB1IEQ9wcn zAg~fK5kN|!D*b{;7{UnBiI+27fAoap`l{y16zU@yU#2d24Q-}A}D>5#NeTUp9r-Z1fRBmh00 z3sd9FVtBjg01(Fj6nNR*7ax*ImgAt8`xXGRE0og*WVUtteZXVbIc!x4=+T^gT0u0L3Q<`zfNO;sWDwLBWFZV}PK;ykFsRa5=cD`#^j9>(~skxh~Yb-8?>6Bk!m45bC*S>#v zP~1?B^6Ny@lCYcYebjHC$N$ksRSm#1fs5%EeGteaeUR|tey7rC0>yYb`RW=7;`gzK zFb51<&mUcMgIfNQ4G83W`?y)P(QEb@4NU2h+$_)beaEBsdwULQ$m{(~-nxGRFVpoq zdbCne%sV7Zekl9GCR<9H%IhU8LhMMmbCQ8&hG0>EGP#v(=b#N6Yl$Q&A&%Fp%Av|C zJ(33LQ4%9Rx~pI+Q#+%PEo&4i36rW==w`{&ooosujyH4=k^d#sY2vl<`Iv~o-YpRz3qb63g_zxUs^xI;(+CzcRDY&O9l zpCgW`2-j0I;4dV@8o0}jKtUtjJLKHi%sV{MoFdCn1nC$f8Nj*)9~#n|E2|$9SZWH} zUZ|gECbb)R-BK(r>XY=i34E94z1O+y%XKd>sU0qpSt&7j#a^6hEM!Nwb>F`&ZEYJd zhS_LXIow;K5`Q*!tco|7?)F%kYgVk|Q_}A0@Jb>MDNUp7fU;|M-Dsj_=dmC-0ff-_ zwX4MB3Zr3g*i=dLTah&)@xDHeF-^l)v`Oz#MmM>? zxvSw&!&TEQ!&O7o=}0|ZM>n>Z`eMN~Z+4pT@Zw%pH)r0_BlipFQ1PqwuVdX?*wDrlJP3 z))P@6m!4IfLVCfCWc|eLbbX{_5sc1yH6nRd_y5@a?k}1>YXq&9n6ekr5|hut**QK* z)+w8AeHGG|d<&JluJEc28Ih_T`OBLzB9^4=rGKewd2S#vRUw+PvISzkl&l|0k`XOO z-YmN&MunT{pA1Z-> z+i9~$m+qFCe#92r;(EO!k7Y+&Nv@s7x}HO#--i&TGW_aTe!;OOKCzdKXNLNbKAT}J z(_=3{mn`1?0onW z^_>rmTmG1Ny#dvjZ}ZdXWz<;bl5K)~qA&6l{LyI&VJy%(5!E+eqcvl@+;6RYy_qux zy7UbwB-c`2)>3wFWNAJ?vLfm8A>~2!VVQP^v%<;S>4Q7b%>=_dICL( zl`ClTCtF~`HBtiPHmTO1+FpurG*EHL2njI7%5Wx=RFU8UlBD}AZ`VHY zt9$>cSucp30LKW~!EEI?7fG?Iuy$5TyxZb(RUv_ELfcsm;zF8BJ3<5_TM(+X$=`9j>W ztOKp%%)Et^QoZ_fbto7ldDp7JT^zdv8NY;H3`m8SzXpC=?CX z_kP-cnHm&58$2ja(HVrfwsBHrqwwkXs(eqEUsC^h(^BVrj>@)U%B%<&!z+o#uzo42 zNW^`bvF)xYyW;Y64s0>Z)Iacw3Wj;jhkHcc4eC@4<>Xkj051}ipnv=ktmfov0XkMf zDzO|jCoPfn@YIe>xr7SZj_+~aWWp&7&)?#3fNUmlKfKn*7okJ)*5~LHZaO;B0Iy@c z>y^ug{qA)sRL%ViBiR=oNjybXU)-hewf?6}Xs{!!9T{iXUW`uPdjI&gT2T_SMvHtB z*i3cos(Tx5B7W+cKyxJ?)>^Whsv{^Z;2KdcVm);~IH6u7S-o(A=`f3qlB`ZH6LbQZ z^(T^Mr`u^R0(U+`p#V4KvLoSrupqbO^EUmQmeh+@UkGhFz=d2kVS11;AHBJ^?rCs0ytx#AwYa zTV%+U!9W}=xjOXO5$0zAvvv?jRXIwA)nz0PWp#cxTpRroBk3Fp_AE7OO>YcuC*ZoN z>?tKLYf>v?lk9TT0Z-c2e1#D0lTdy)bF)M1Sf*E#@{1XC6C|6+72fX@Iv_BJuhun> zuTi;{+c?_7T}#->D29M;<|HlVBa;_I4&E1%%ldJXY}NQ$O|v3smeIr{T+J(90ayO^ z4h*O5I)f^<9#R{;#qphU-3a?f6I&4zyfbzSb~O&AQz?J(LiYZN&}>w!T+W-XNUh3e z7MTZNlW@Y*KKMWyprAsbiC$4?3SeO%>TBo%Sb!Eg zO~0nd#_VdjySp5w65#vNi~776l7-HT{GM?eCV7GE?UhEV<71M0wnhEOI(>WP$kdy`c^7gX7uba?y_m<^A~Mmp1+e>l+u+ z$A#ywq>-R6fTXD}KqY-~cMU@2>1fk3ZaZn+`0nKD{9qP?Xq!%(0-J&ZO>AgNkwK0n zHu#%*Mi7lOu_VKIbPSC)t6Fl=vyLo!w%y!7*8wDT2Pw-K^-agAH$1x9=PtVDws|-T zbaWPM7k>%yd9{8BtP)UH2DTFU6ZO+&!FbHy1PzSkXF(zi2Eovk%ZYdvO6Bx@6ShO$ zB}wfw9>gfH}D|SpqeLft*Nz0#0Sn=-csl)MKoL+MJ9V#XwwN_oLRpq?(Vue!L=h;^}dpCT#Qn;2a zxg(`}ue!j9#H_{GXZH~l3L&{Fk4IKNif$atDJNtZq0-t`MU7GL=fDW!q)$$BA>e1A z68|y`>?buKSwrH8P+}MKNqA0E%`<)hfq{UF@jp6YBqNsEUlM5ZReXK3(S~bbqnq5} z3VQ2&Z}9cV7%amhf6Ft{c{lnlB4ut(ChKdkKS*jZz?9`j&bnfEH>~T%^SXM)Mv_Yz zGlRZg_t%o8Jnh#P;$s$O1xr`}U@C5wsmGN4zE9p=Zra|xcsqo`!+sPE;j-zMKOsk! zW@5DPh^_UYsnRmOO9lMOo?BZOY-lL9p9TlXiT2|WncCf*@BY)gXDv+6F5HJI2Ji{+ zMA+jj%w%6lcW*g+gh*ovO;!Mc0N2Wfor;V)SvPO%`f=kB#puo>8?7u-m@@P5b{@)B;1t^Qw?h6J&`%0Qof6t+^trh+%)SyCmMi2?*}x@UB{d+-kQvm8 z!90ZaPCT9R2Ra-07mM^|E*j#N%e!OvuoB!1UG}Se;pe$2Np3|1yI#5$JrB#Ln4(tQ zzS6GnH_x|QR_@MKC2`Y3SdYh=>!dhU^oS?E@iy>H5?9EJl3y5YTSd`#KcK0eCCbd^P8a32zd*k zL2aA4w+P*``Fl2+1_3XK0t_t!wSvoKBa)`VXETTs!n3pz`#73ZZvmFMp2F+1gx17} zYuN&%A?1!9-sq+Pu|)ww4SvEjKNT+$Q_sH!YtYUnc&z+|fEV+fdm{(?zlevPrr% zla-YL1m&2chSOd8YXX&I@I5z2B=;qmNX5QBirw)E=v z6!`RcUC&u&&81ehq3iCJu40gHYb45QNPu~$nI;qM$;pWckxy>p!;ktMW1uFF&>h2u z#^9+rU=4>ZD|Fl>BtYeb@Rd6nkcxyuCzfI5L_sYAF6I!?Pf5gaa+WL3{XRGE;gyw| zF9k=}Og4J$$!GP^<8Hwp!Q;6&+Su>!%ng#b*|)`!4;mq1N*M;|?29kq-WCzt{jUhr ztWxis`_bD2a?q$KTW~pFikt4^lI{O|44QU^c+LA=! z<`hruE^tmr^{)H}VI(XNn#^KDrO&`N`<^rMNcR*i_4%WrNHN#m3r+HmTs5af1!#*N z73ywpmGJl#_XaqV8+sVMXSFAWVaL`P{7hxdMqgbw%{$(EV?(si;y3y5)tD$WQJ=6j zgQM&_O7T49@5mOhck-C{?@SwV;|$E%EkU~xzBD;R=85xLK+swtTpo?e1q@&yU7N8@ zB!qM8Kd!B2?$4Qts&=Nvr?U~={Bekp?e36+Xx8C*$whvRtVUq#)-fwBILquTNuP-R z^45M%<6C#WAHA8SYv-#o24}Un+IYV?e_ZXJ>fQR(b0Id=F+Uw4D%t5&jq3GvcqyCh z>9M#3JiDxd$1=oiw`GbStl5twsznnM=EaAGBIL-4UH()WYb|@ zW|$?%F7BCJ`IU3kMO@F|X0Ri*3H1`$KT)01k!4efMJRt;L8+HpC{Q-351ptfEf^X} z^(-=eFMR%M?rL3#@r`^kj}^`ArDD8qpt_x)CV`@&Q_Ay*zE(w0D|N7jeUZwklo4XW z*(HAL38+$vTr4^Y3Q0MY6rz$P+8rF5q&Z8rd{$Z)`fJDrqGvKJcM{d(^p0q{aQmlp zFLAAVrMrSCZ%6mjj@PkucJqA&?_?@ZgMroMdhpQ!cFLp5_$^z~QiOCHvMtV-f+{GFH5oGK?tULi*WVoX{3wK7&?Dlw_KKGgOqvn5H#adFlBD|9GDiOM5MjEju?UrRDWc}0RyEfEnXvTNX(CNl~bW`aj0ghp~y+ejG?G5 znr8zJ87b?`!CE z*QDfzZEkU8I5rKN#k^}+-+^B!>$ZZj%xqiimOK{4#$Z3qnb)EPZSg(<;czrsa5z%3 zMZY&Dv}?-Inhps|25iX*@BD9bq%Y>Y;I=PrlG9R7>3(OEIBuFZ6ZUwQ(fvLum-!=azox@nFSA%p=T|t-+x2bM+jxSH`yuLMesf1G$$vIQ zh$7}na9=(GfeN%SQtwquG;HDoqt{VcB+TP|!@K$xIt~`AuwM=3n62Qi6qYF@f2_tp zy`EDag=CqZT4@N@G?}4#33*IH4Fk1x*%Bnkr3*6h~KaY(N5(-0qt394M4kE6inG#uVzXn zYg#NrK7xDEY{;i$y2;?UMNWHSj<7QlP%HPo-J%b6dY97#_QrKL`F$h*sA0Kbc@j(! zIHA(1Rd%!0?$YS-Jc``#yNB+XH=&Lgs}p2(CSa(g{)WKpV&JShDT&*nkTEq~HCxwK z7-We`XRPq#39Cg~wt^nZMs0I=DDX4SY%PNL(vfAy$?37M{FGN1LB6Ty7oh9Urk#5@ zoyuVYG(60H0Z4S}}EspEP@vGaBJWx?u4 zWhjx7A1no$e5&&Uv*=of52%x`Y#~3arI+U(_T*CWa9O|=l^IHklRf--`t6xQ=b)fM zQvV}h7xVW>^%BX?FmjY~l>t0NERiK0h#II&v+v8#5&e}@QmklPmngb(kJG4Lp;AxX zeD)fqT_H@C26<|}gU)su;SSSZZzvp_R?vt(v+mIYC=lgZS+8;|boagDVT<7sg z+nF!Ao}j=T>8QQpuGwk;zz#4_MB+z%qJcZXR zvd3i#?H8-~+07;lEVplG%$IIr)BdaYshb@bY@?gnT4NyTa$tqPAQzN-N^g4awpO)7 ztpl00|8?-&AO0m##rId!y9wWlotk!#K8Q~|31s@BV|o*Xte{~&L*qEE;2a}{j@m14 z7_>ek`LlL^-Gy@T%PF*rk3xg;f^YF4be0%>>?bLjHcv};2ukx+yVI`GMUz#Y0lS|E z!L!)qmUP4S(>kJ(rvZP(*V!cg*cfy%%d_ugQe0Y3?%rPRn#BT?+5FcGOxDk;RC$y` ztpqZkL*)6ORT=ZvQexKgiB9_8qb>`+O(ZkiKoUMl2?sAKoGiha4y6@GHb<}-7TtmT z?;G84$P%w9!?yWdbLeV8*l58IQ8g_qo)>iUZ4UN=f_4R{a_n|{=4CntY7d&BG)`m2 z&1L1la#`d@nfOv(GM{+T{Np7mfTABNNETQY~jlCO$f>%M0+T%fg_1&=;wkDj+TCazSGtm zVsc5*%qGTA?OSYdK7nh>#%K}EyP;2X4oey;l}ckIbPjRC1Z4>kPZ(m(dq7G2YQlX| zsrK()@5%JEf9SeN%&Sn{elVoL#4cF<(R~EpFp6xYfc~9+*BDo*j_1F4jRuG5 zaS~{KVdACE9vaHsv4y4k_H#oJ(+*0W4^L&S(gM z-+h>^XLFG$8$nOBbVN*K(NOGTzy4ferE9+G2~M-UM0dmgJYs<>g85#j+~5R^mQWyl zt=Dbz$2o9qhX3hs2FqzQ$JynsYFHjp*X~}czg{2Lc@H{; zu8q8um3JQ}ZvL$DG76D1%yhka;cSktT0CpFx)wL=LuX|+o}w5$vpI#@N4qpmuX;;+ z>f7XN+7xSsuHv}t%j8%fH4{^fzWIe8^LsIPW3Y4Z1Q5GN^E8x@PkCuTV*sJFxFmbh zsIkefa~K-}-V52YtBGE#o7upGu*NiY#d&qC^!m?4%gIUZV}45*Wb_*knh?0!c4-`3 z+)qx1>zkjQRbDfjX|Ki@?YhbD$xm~3-A)&V4qjXJTKmYg@LdUsB5L?e{aNdV<8F~= zne}?l6TXDVKG!nbC08~{>Ob)^x>t?NO%LPs2>CIKtBL6@PvoWJPcB!@CVP!=02j6h( zhDLM>&P#Xpep;lTMT=_j?r_Ch_XFT^wKK4x@b&Z$L7F{gGtNZo$>`+9o+m#zn*kuC zb(}aZnoL2!*){qCpeAkUizu4T9xw#~g-PQ&N5toD4dmCt z-CYzsvi7w7L%x%U4HJtgk?4`D(LTmJyCXr}u!k&hl5-;Cs^9YY3rfEl9Q7Z0p6jlo zzDw2Zw^_&ju(vF=Ot-wZlIGAR4r@)q5i3Yf;&njk?n7lk z8btntkN^6pv`B-UJ(1aM=a~y|r%&4oVJ4jfG~ZoS{(frw2>QhO1i3m< zyS>tJ!Qp1n?^5a7#hbHafMIo;taKU{S-NxhORF`&M=kcC4C9FrKLMO|cS(pbO{6_7 z^h(5$VO?OaC|3i#D}{D-3#F#S0`klX*~p7UDC6GZsV9uv#t&P1Y}&?a;T)nR5=xJ2 zHfI*iXKzu=ua2frMw-5ru|6UvmO+An^42fp?p$%9;U|%HNmdsKXZz~>G)~3G8=U2t zMINI&|4@Uwmg@Q){L1OXglVYB9#0XztAvDVM}+$Llj@L~kAfq!d!m)6R!5c7 zql;5u^L9jITrFhIIS`!X*))(|vn>OiKeDC8KJ1+)5JOu{Vtc-~Ft}fvVJ_QCeT7ys zFe<;aQ0~x;unhIR$}9liWXC($#LI+~m|Fv6x!6k?*a7TlUXgw5Mos*x31s!(;_{E(ZD_ z-$Hd%j2Y>sJihU;&ALv_Ml6{7FbE)FE60PNZ0g~M?;@~QjMiK3Y{d;zb_7<)(}PUU zEXjHL3wY9eFc5jgE+~s^hiV>g<;%7ws=US58LjAbdE3u2kXeugIm2CPez9y>);O_c zbAf7y(5U;exz1Ea5#`IMH=Ln{&R4yX#VgtGxCr&<2X2)xS1GT z#6ZczK;+U>@mUm2jDVwX3gu{&Qelzqq(J%**04vpAF()vygq3*q*AC@ThM?Byx$UN z#;mvMXav?1@|WP&F55U(qa;nOm$)d3vH^t{I*IzNQ9cJR=6iG?lyq?i62*Fa>_2h>M*-Y+1`*MkF>~QA z*g2@^!}R7PEOQpe9yu+2^3Iai568fny|Anw-j5_Ku& z35CGsBu3M*3I(K*JA$(`%x%_~+D&LH?y5fzry7Cfh6{`g0yEySTXpF=4o1kdLx(5y$ z9WXBoTYBnkhTnL>@rgcMP&s||#`|1r;w@PcD=fBU0NDrn_LC4g!1|*P=&xcIuUI;# zWd)C~eTzsRCh}+Cw?8g~W=fo3gFr;aS%qfmbYOr5!dRdcwN;S4vjm_R<+pg!RKx8- zRY8HXMulNRoClxgnhoQ%R^VJ{)0{*!U6Ohx_@xA=cQ%mjkzif4*9j)Z8=$8bw@1&g zD;$|Uriok>gE&`!&%Z^lk7_J?da>@(A*`yL-%~1?7oeNP1 z|LU3oq8%H8>VbKici&X{_dSSsYy5rpWL&8Aolg8TSi5KZUB?g#oBLarV_)(JGC)ytkO6@pJ#t0d{iwLg~pZF zES@GMb+Va+m$9eLxsS;U?L34Qx-XwVxK!f1m6Mc{mZWfWb)h>xyrl1h@^yPTgZ7Nd9Y1k?)&@CswaG;io{aWe zs{(8gPWYBbcE3p+qt2cR4|I#KJSOh_aa;(3RPfGGi6P;>LL|V2ClF1 zr`Dn36557JB2&ZXog%V8iu#$?-*i}Gk@tbn=?7wLVrh<7oZO?wCN^&EqB~CBDg6J!&=hS^qZIKyu0y;^b_1Ss>5$8pYihGShBr}5 zJaAmnlTL4r0Iykt1P;SW{T{ug>+9rA}be19%8{~0V z&&*5~{d_+3mdgmb@41)qmk>fxieLO1(ogrL8>2^faFTLbMT{9e3}>h6^5wngZ3(sVXPU?jx<9 zTHx?*!v>N}62INBE(w?WrcsAhAy)_5kzU@xwOxZuRCD&a@{wLz?>&jP3tQzNBi0Aj z9~8P4Z+cB`hgv#mP`GeudrqE#EN5-7ZKLoO#_5~hD}xL6-8OWW1>V1lEUYm?Eyu#a zdziPF-<^SBv`MvVj}oU`E;eTB2zkw|zwH?G8yM=nJkq?}oZLULmu&aJmw%wr*l)pY zKj4u65tXbWYBK{sZ`i^SpbZjXBZvW#~&Mvj!RQh@e(U zwtxPd>9RF>H6x_(zVK!4XEI~;6>PECZ=TY6W8_^78brlytCKU@-%sE*&Ci)vL-kk#ot zE7_H_nr>+N2}Qc%)-gkZ7sIs!izWH?fAEsTkJ)+n(x0{qAN6B15SD_$222#{v(KJ{Zr&+P3odKShbi z2ALFXlrGuk1BdWU0o@s&WfSy#Dj^fynGSg@h&f6qY%((Q0`j(cPWR39{hH#Za0SrO zhS>eYV7Gc+?8i5Bk`$PS1vbFge*Tn|u;N9sYkAg>(o}1p;FpqgU3aFs5*p|TObp9x z_Gw<4`vxV}ERVO+l{SCctFO|_s2*Rtjal_P)M4S&L{CZG`v&q$S8u}K^?s+zKeAGD z0DwQ$ewRAPrLRo}S1?ThrZ&5QGEOV1P7MIuR>=S$}t`L23+9 zX+I}?GZx|th%t01tEK@#E`Y1V08(_v@TJEIW4rl4PjJ9jJdzZ`LNXUb#e(d zd3SAopB*T{U2DD>$dEp@RpQlCWg(?=ADY82+gllA&tq<+zpPAq;AFxgB4wbZ`Cr*# zbL>-YZj?PZX>%VzZZzgSYN3gJpjwtj5S>9hPhEbA%F*(TrwL`C&4ved_)HF|!>Ho5 z<{HX#ex=d?=EKrwY<<36OW3Oh6AE7w(0bq1Tw!a|m26NCM_aKa zsKv^!;u&+hC-i2-E0Jz0TaX;{HonqRD9u|iAvJikjp|ZLYq418sp75cjkbWvE&yTq zjJ;%+N#|ARVzWO;r>8^aFywVn%Y^8OYU3*TM(#stvRV-m+Vp6}9!>{8!-D4z)5=w? z$5;x(_+%U9xrggF@-`H|ZuJqz8={pz;ndg(f~tg?ft`>4w#IlksX5A5wm86J09gbr zTvCPeu06^gN2-jZQG2lEn!r9L!@>Sx&wapT9oZRueDmZ&n-S^>By zYiw!g_D>Wpci$#yCxwdUeCi!ZElPZDbQqeQthhO4ddcF!I6F`MvoyRlw*JqtOX*P0rQUN1A5 z8W~k7ejOl!&K=ePGOVkxRFw|=04=SwUyHW<-vi?hnhy<*OOX+ZYdN)a9^*Q5EE*!3T7B! zvbkV5IF+r9nHG_y`Z=bKMR--+)v@6kWz>0xqtg|035XlQXp znHLo6MLn)U^;H6J)wkI}`D)vLPjUx7vO|n$H6@EhQcqLLq8esC)78UxC`j?TJ%>>1 zZ6m1vJFbqGt%kBj%*Yq*@Z|O@JYj?j))R?>l>uE)Q;|h5L{=a58%l+kQdK$(^lhd! z+(ekxIxQY#R@PP%E{e2T$^cF=ZHbAen|S<%w(ZZI0$RT(>1M*KW|hOHkA|&yiC$TO ziO#lQgxpB%kOHn*r93YENF&r=l3=TU{+ju;^~}0amqzmK06oXUi03YhE{iBQ%7 zgfJiR=@b~>A8CruhoK^Dzco4gm^I=U9<5L+zFLe~)7N;m6{1)Bp#7~(0cWk9H%B?! zaEyVdwG6F(ct}{>(O~* z0vS@teyk(I!1Y$-ehXMRJ0v(0v-l-8RYt)u0mC3hX{VZo8YImouQ<{VXxsx^oyxpo zk3TGo854I1pa8!ZXT%Z>s6_Arz}Z=mwS6VFkzil@_VVLa(L8YFBlbhR#CS(7B1to% zToA|yEgRcgD^W(yRNA)T#I!MkL(>{w&o1D|(|$@Z{q|w|$6btecOwJ0lSKRhvecyq z9Vw*%&zsY({S*vjy!ljvF1x@m^kOlSDfcM+G=AJbT_eLOLB96R;LpVX@BwF|8e{18 zTvs!^e2^^#HVic##8kG=_TlfQGN&8!e#Q$H6xq*aaq#Pj^0S zm)*l?7sf|wPXhwCNm7?gfY90F7PdEMYYF4>EHSEPF;Ean{r zR}qt@3V7iUHxT_Kul1{-}o!w#D610|IHwNhY$b#M}u32u4sdk79QyB){;8PKZ&y-3vCX z>9nUEz$fU`eG~ld3&F0}N*-MZg5e?}Fu;&Ji#}FBDlNccvD>yqhHFt&Aa#4Is(9TK zpAWj2o`k-_gKkxc-h|LK$=ElJ;!N&g4q%n%R6+sQl~XF~aWH=}EpVza$v56eVA9Mx zkl#qJGgWc}F$i^rdhM;)I+#WeJ7gQlUYJ`J8cH#szS7k5h-cDprhWWN{=uOj<~Yvs zA)sjtqq9H7WXUv9c;($YX+B?<_}Y|D-R@z@RvJMEiDR1pyPkF3Su5n+#5wbi$_laV z#=^$YR}@>GyU>L-v%4xYMS_^0r*vb}jN-asyZT~}1gl~>-WR8QoDLlwQPMvTbO}3w zw2pB}nus)8QY)57&WRZ9+&rqYuY0bWqmVZ$vzn_!k;f}tmw|4+u{mMxR3xq^N#__# zteh&PHw@&Hfve+@Zko-;evu+x=W!Go*lQnAXin{r!@te9yofJhH1;Y@WmoNtIWsuY z_q&_Fo61PbM95A6sBMZju)%QBbB#85Ct^4Cu zxVDgab9x$;P4$hHwW5L;2)huWinH^PbYqcE(}X8x`P^n@kH;rCA2te;S0O?sOfl7* z8SS8C`xCvft6$`UMcM64GeU`c#W=S6{0W-hT;%{KC)N5i7sn*w7y6zQnR3ovol4GZ zf6F&^#cWR^?tY82HBx1@^6Cqwzdt6@p!1GC$WGQ{j%Rtgj^W-sNfU$jru69Ps~bou zKVh-o1PAV&Rc8lq0RD^){N|`S`+sp%U8&!q9e~_)!Qf3g zaD|;$0q{W{Ic+!Vkv*M&Nf-52;Se;n6VhzsWidvFCH6vhhMGwBOz*X% zP4zdnZyq4XW2vE^#$Cnpb9{$`TFQm$h7CbpY8>N&a}A0huZsmnMy!_iO!PpSoFF7c&s8pd<%PK>BEHr?rmu?^5!kle_p7=)f;q^fZA@)%s}c|(XH_vVGk0`y028K(8rvG0+>xc-5YYAi2?z~dPm{e!TibG-|Hi+^+w9nrz|FuwDU)gXfY)@cvfFFfBrNW+pqMfC zBy-}ZUDxH35G65A3jdd?7n?=jGifkCXn7JJe>8*czak36qzMTrDZ&#wlnuo7j9Zl5 zB*JC>z)T$?Unfy^Tm{l%r!JAVYkVfv9!`UFgjCS!yOOdC<2s;ccV5|O-;mZFD+@dB z*ikg8oy&)`RuxmAvz(Zt!&+$E*as;1I^Iqv6}__G(+(yMbo5BkiyBq69jOiI<~^m5 zVyY@tSa|F7w&Un%2!Gz#=23|OhTbwC@FAhtlf>k{)YTjRT_828gyPIP6!wS4C0;Xxsx%lWD2vRi)+~nheCs;mkzLP3qKGXwIY1^gX zW=Eh7Z#juqtXN=EYmiVzor_Fqc&5Va`08PN_IDY}*BKYl9{<=jMa@fOUO@34sFiq{ z4A)VYP8z*sFf9|2)y1eyd)zF=|D484bSnajL;Xm%LTb~X{CHg{)k!0sxe3(By?B7*4OK^i>-wfJd*igmNKkN` z(=-xQ{J4d_p+|W%*>zjkn)DlvhWccU(PmcYq0n^bv;$C~0E08KgXtvnutQJ4Qtic> zt)cap;QM(J7yoaPK_nlgE>^KLHEFWy)_HSDkvr4|5AoyBrlouQwevo?$Yjpw0;>fI zEnsqRLn#)ho<7a2S9w^FqVpQhE@*Bkq_wPmL|2%K-kDD0b0P^Uwltio#d>H%CJ5^o z&VeQWBb1Mui)Bie+`d0l8=y4GK+jhcejrTM!yt}7lwzE7a#B3`lVjHPp-5!cN=dMb z+N3ytucLs^E4R-qY7Z@++i2+byA*tmXAR9xkdRy*3{fE`-j#4qd+x}Sf)y`xZWqqi zWT12;@7Fwto()aafCC)YNu9D7__o@C;+`fDHAX<6FgtLjtx6H+@u2C9fL^LTS0pO= zysh{IXhzS?>m5IuCh?hSW$QvJXl}f5xnX3dhZ|Au-F&cr1;;))c0+62k}Rk#(lq>Hm`Ha z=*@u_HFjL)eU;svT0M+x5upifCbasI*DZIk6i^wHZ<~^^!dUta!qI!Ji8+F}(bUqaU!p_F4U07L-7;{+S)p z%LQkEE7`0GKWh-$4rJ>M-tkRm8A*3ta>5WYN-@05#!s)?KZRG2385pPGZKWm6kMmn z+CK=%xaRT20<$~YUuF|~r5q@u3K?HI3thLJIWk6)^iP1Pm^p~Z#P@|(1VQyuY{&KC zRBzqre5)6F$86c>pQgTB=axoa!+Js8x;lSwoK-)%KVzatGPD zk?_hX#_9$f$hXfZnBh3&)_offGu0>j8EsR5@)Ag+nL|Ub%vv{ z9;ZIJze=OjCOMF+`SWHc3upk|kU9691{7A_FcqMWFo_C65)~lpaO4ta-d5D&nm$5T(tok12wa&C;b!ZH_AXmyHLd1FHbuy>6EutghV9qXajH zqD)ql;k;u*`@`j9jj@c3__&J5-f;sa(AueDZ(`snx1Kute^5v(b}rVOv?}rHem|+u z{rK4n$BCJ{n+Ge|PMZ zJ)ZwS48#WV8esEUz`lGn+yE`xOg17*uz*IvfxlqH@!5`b#RjAs-WgWp@qr|4?c>hN zE*;~}EL2AWSlsh|eganjE`ZQBJ&TB{rqLk3$qSJ%aG48qY1n7f$1LfEw_cGI2~5T? z?n~m;95n2s4oc(2XUDG$*CrUvd$+N{C5N;e-&mv7($69%?cvXDmM&4@dB&g;r+B zFUP^rqQ?_+M*t=89-kqHM-h0x4As)Gm^4v%(}|3!wpqQQ!Y^Y~C>H%PMg78h|5Gc? z^At{rsE>vzDR$Qx->pHK3pkOea^?BTHRXx>Ev#pv45TcH}_uXNs5I^EG{$bqVS zuJNrD1jGtF9%g3MT9tFCFZQ;rHVURq1BzW;HrVQq)N(#;yChCvYpx7xguDekj#E$} zV7Q9eeiaZyJtmF3^B{-UsV531ol89=HD-6hF7;!3!}qcCJ5N3Xa>2vY&gFe=ONJZs}nE;kJGB;H`%S+Ve&vsTZ?d5*`ZcwuEz_f?CH6sbH&-wqA%?#1WosSh*ya5s^Fm_ zebm(bkhu1AYj=!eM;@GRrPyzFOO1162uq}}m)h0T@GOQsfVdh!sfSQ7U1>6;Nk3u4b!_5ARfHp=RgxppuJ0ynqQ7O*bwDx==!#;dH*kF832V%fHL< zPBwpRgR`-5{&aLX?r)&|TABY^?f>Zj{MZH;mwluuD#<8sVq;~?4E8XbtqdIgyyYiB z^WD`ur{Z?W3?^s(yJyD9$wSV}&J9l81m;Kv0>G{N57f-OY&`eY__x%|?3{N6_o$h{ z)!Y^R6KdwWCI5ZLjN_m9DF1_F_HQNgf7dy?Q|MovGXNV4fb*88nVjp_%fI?(zaIrZ zg!v~g^>6&Mf7|K*!biIk{NH@EJNy2Netr{@0n>W_Q-fz8VrS#725_kWUbSP3u|Tjm zLv8)WO76!m{-m1c_A zcG?&u^~H_wHzW5AA-+R|)d;^0pwBmBf-hxdqWE@4)P;ma+~%dd*0dx6eRjIb`X5z|el zp+>mtDLLC2;!~uj{-vCq=-h=V!X2kJW4}?){mFps&uHC!0seZ1{eASZ-xb})27UyH z{=i!Nc=Fs9%Nsa3nBQ{8|KJs8{_*d}^`9CizZ(rdEbNwfUCF`L2>gWmfvNcsE%?dF z{v(?4Cnfujx4($hS-{{7a7wcu)vK5|+B!RcM-ZZbz-{CNT+@9P@Vh~B-yFc)_J5oI zIRE+l_s`7XuEIYjjh}M{=l!R}A5$;q{|vggKVZRM4ft3AU<3X%MYa=YlE3TvuEw9= z{pYmLdH*T!L)SkQ^LtYyX9eE3M$VrG4wmw*HQtF4tV~uQ`CYgEBI5gI|FfU>_5Am! z(EWab4b!Hb935PqOyow#cqC+NtRz+m0W7~ZyQEtVfUntYHdJcC+6vWhH)(;8|Qm%+s*W0F>|OkrIVp&8OLRFg(Lc#+}Z4e5(v zFZCOx{e0NnuGYXa_8<8zfwu$m=VI;uyoKHkl7F?(JI((nl>8H(_AeItWBKqm3nd4z z0JwO0*f{=~t=^@8yg!hD_XpCC?kgHvs5)8S4cR|N7T2vo|7f4W&jr(MJHe~oACIly z1R?JaH}x20OFsa1z`_;I7ZW*xF=`F#u%k@oH$d3jotY`I;8xhc80yI51=itBeD^xC z)76yrTyo{6M+%g%Nu%`oRE%Nyh0%I@sp1~X5fvD(j^xL2$)1t(tT>9in5#zRn6`oI z?D<-UH$sl9Lx573@xBxDpucv&X2dBYVrfnup?>I{bnF2URjq2BpdB3s8CQ6juad@y zNmcJxq})M&>eoH`Oaks(8N&8dVv*5S5PRhso_Q}lb(Zx-CkQm9dwE^98d?l_86zc6 zNeUk#8<6V4@@0nQ1y)xf*(?h!J>ePsWIlaS?02d0C@rcU!fUf-aAb2H-aMv14UZMu z2HEzCDSrzYT3rm9<-peuU*H|OT&S*jb)T|3lp%yMCR(@Rm&<)R z3Vv5%+$6FEGpSHRFbXp}v*awv>}K?mzXgtPZEyq@nff_QU;{uWTM!?}P#wDaETx_% z9kBLl1G%_eF8QL_phPUlNkQ?lQY7```K!pUIJg{7bG+s|E*DgllT`wJ=Fb|BVGK;! e^8PM+M<)XZCpQPMSiut?7<)%UBcUjX_`d*)VvlzK literal 83113 zcmZ6yV{oKh)HWJh6FZqC9b;loY?~cUY&)5WZQHhO+nm_8bu!QUe&4BcesxvX>Z-f< zy%#PlfV{9M9V0y}9H8O6@)eGS_y@6#fjJxx4>5zZk+q4VDKYEUSBh}N#Ka7uW|odd z_Ftct`i@4zMus-OjNpF$gmZATH`2F)b4}mtSc@d!w5RvXl2b?mc3-UW5Fzya-nYWr zsMhbBdzd&A5CSR^89UzG6`Qzcenc_2N*|1Bw@9|+1K!y*l`uq%q5PzoNU*O1+R^Sl zb){a!q>L^Jb>%*pVaY$PgW5jdwg0|f-QJz0Nt6a*=QYtcRdrEs|Md$~7;!bZ^ONTD zx^;iq-1MRA#B{m2NV_cB^uE7*r1reO_^<$UxsQByZu@j~eQJhQZQM*9Z(`k7ku<%b zHN@z?r+6cwv7_p~$B4g_@%{b0Nc#+X9Dd2{dgp$*-GqB~d1fGhek;UUPt)0?d0lYu z-jI9L6>~ov85)Tgx+Zn+)V6M9c@hdVj;Q|^!Vv=!7Wy7|anb$|8HWL^DS`GKj}wAW^C5q zOhLp#VH!Dwki55eJ1-XlWFw3wr#SH{sE~mbZ%v=Pi8)m_GYKH%d-{GsTD#6)3kjl@ z1Do_^51mfyIj{9r@4s6Qe>M_6*Np!hSR%t84>0uf=^lv0 zcMMj`>X5i~ISXo=I~0W-9EwN>V3=_%AFfqS278F=FZyX|&kj$ZpO-W|0y%XRpKo2S zaZ@>S0ttueT)n4-)}M);oorjR(h+FwWC<__0=G=SXiE;U?1@Dvc9u|TG*4_;>U+&t zrauqX`u+bMe(ROeMn!M89*Le9p4mFb5=@j!;6vlHAHsQ1T@t&Xk*$EaKhLCevb(-x z1QXx=zD9mn%1XyRZW)oMX5-h1N6W3+%UQ)uUC$vu9U84UQzT{iH$GjuZ4@r3@$D2X zJNFI!sBMa( zrSO(G>w;8b$N^%NEh5?>^_xc7ELS8%#(g;?6`DA*^6G>KMz5h9YKx3Fdxp6K6f@}B zfw;x4HX!=pXy=M}|L$#{pl3k`yaaWWgIWJ1V1_lcMIk-Rk&*e8bzxf8qu?ElbwR3e z!sPFRii%v97ImVEWMQ(Hl`*qfmBGsK_Po!%!wVA8WYs$RJ(JIQty;%N>OyT_r!(C; z{ln_ey4|DDsyhqYZwwJLk?mQHZMY-PlGJ_rb$1hottGjj`t6ToF%`BgKF62KS4Zaz zJ$4?M7dtG&tgGeJ5&Ci>=yiQo`nZcno3$ttxhe`OFwIND$8zB;;*6uAC8HjS6rbDI zeV5->M;7ZL$DBWd{Srv&*i+gYRG^%f)Zc`drF?h?P~Yz*$W4OVbbM$~72OjC>Yceh z{S%iQHBHT&Ywq=B!@SS(n=Iv~#!7#D<|?Jy0xWR~d(xTG4Oaho017p7e0r>f^8E zVxBOU(Ce&nn+*%Y&CYBJlDGm0+Yh12_kkJOJZrWVVXS}Wx@J!-Dr9??6Iq7_(n09TLb5V4E*GuSRUNve0lF?|UiT?IZ zekV#ObY#K6MT@;^mxmS@F%Ciqi*m)V`x;eV+D8n4!pJmMaUM-@3$RhM&Ngn)X zE3~(h*a*yQwG*4XL1G~nuVj^ae_eyu27z3#mhzz9I^6=o^x4=Ig{6083@?YNnV40O z(1cvNu4$i@2}0{ z@sHx!n$~3^CxTzIXlKZmi^!k#YCo$yC~U;mQxtf*+)m#bGily}EMcV=G@s{==bp{j zLKWHqZQtos)JT_jVRma`Fk*A86h&8HCjFtyxP6P(r}U&!Us6s92?@h(TQV|u@rlU9 ztAg`gnX4*v*55fYj$SNh`{nPreE1Sw)`s8Yi zXt^mKH75bcLTj=gvBCw4k2!Bpi*g=jlcKYU&CV;-qG0-Ws$l{>Tw<&bY|Zo6xl7O$ z6Xl|wLQOnZ8LC^}3D=HZ-7$hIY_>xib>FoBDogia9tIG6q0)GKU2LkmqtuoTX=dC_ z1K2`%$q{8q(s`h3@nbGlW&MM@+(C#+E9jGp>yF9pQ~`Bu*q^3NhOf#`DeWDaMz62r z`{Yw)8iR`1bzv1+iN@7Q61S-rSRpb7$R!NcM=Eg03VW~Jl^V9-$Pu#~ z1ZGNN)UoP{FOe#~2?5kE`{6(o3{sJnyad~usuZZt?olq9kE#>5!6EF^+s~dMAiVzb z$4?^T0J7%wc$W7h3QPkGc{U%N$GJ2!4_41_r~8M6Q@3unW>Ze?8cr`XT%z&y=2&T2 zV%kHHO10be=j{jO)a?wuHruRA=_p-cBMer8jXdocW7TcWyJIbC6h>7$bHA#_>AjyO zY)<+5{X)%H+d2F5RVqdLYlFF05Z1-d|gORGV+^ILc zqk@ciT&iU?4f#%fI(gC~VugdotB5=-lDm%iGQ3n$1`;VwjtLB`!QPyPSR7;83jhp+ zP*$`mZqziP@IL+(yTL;PwhisWzb{2ePD`l)qd{mn@vaa;L1|^3B)wI~d`t7>^rnD~+;G37m;-&x- zguZ^Ct#&GaI(5qVQR*(m=|hsS2Xqyfph_`3G5s^&25fo6E9R(8g`Yc0n5O6Hf}l4wxAr?NxPc~|Jn^0Ef(}! z+SwX@tfcJusz-t0FkldOu_W4*NpH@_MG>$VX0O9{I_+O)-kr=3m27~{5A?N{$!=49 z8*MWmpSDwL`Ss8W^u-ZMY>g%-+&qm_g*0;+LCC!Y;MKt^q8}h^+qH%%B1HUZ>=pkc zguSP?CNly%9+?^UQ2FX;)E%`%Kg{_It5Kdp?Xnl_D$xi-@&lpWnA_V)(V?*N1&epb z{Y$V!mna`c8LCKtU+tVKe&2aX)0^=D?QU6 zILtH!x=*d$?fPduiXZ2iDcLQdbS|5Por=l1bQ|PfwtBpAvA^wNOi45=JzTx`8`@We z$D>?_hi|BL6aXqZ%)<7EVXTNI=m)K(zom~TmB{HiQ6N9NAz7~;dHYs3tjCPqEi3-m zSYmLW{v(%JZl>FLF;aS7Ipdk5=Xdqz`*{VC>I&Qa>l;kqT3nN*UqqUIi~*UPhXl6-`k28n^Mw) zvAG|0Yq@b^1a0+qU=(99|pMA;IykN1&W zpv~UoEam>m`AD`)dbabhn`I{#-N=>X`)KI%a|BJa1sBVOZ72-j%GCU7rkd62f4!!? z{*rF>a4}yxLR08kx9W;1L zOZ=JUY$}{H97$i(aC=KkuR<7Rd6eYLya&yaH zlf*c=n{zcHb;Z~v3r1rt&{E9W`koWk_Me_BFG%o(9_H}=B1R+)iE$O+h}kqro$y!P zX_MjUB-Lj$YTaHWa*H$qXN=@TvsN#0TT>m`c3(df>vPnF6`jHv_L1mh)|Jem^!sDYdo}yO#YZGlOmgiKjZHlRs{O5lqBaWCB7ClX{D13|3`Djm^ zAWD16$fr&kb?~W7kOrm+y=dmcnb@f_^wE@)43xFwV_)4}F;qXAf-;I(bDyRLC67UF zG~HNo$3eD~R0oj#+t1$F^w;jyL!_b`{=eqVq^?M4Qh(DsE`au8U-?j_x=u`Bno|i4 z{XtsQ1~)Z7+oaV_T-BAOrr4YY@(UL3j9gX+9YdVN^jk!=C%e#Sr_{@`on$IY9|SR^?H<<$}(X)8uf(EV8WM7i_=_q@0DMnT}J z*2mA|@5*P>fJ$e?ebsz|C7@rCelFH9SzFywrg0jWhz)X6Q@evy4aEy>1aU}X#1@eG zSxU0UZYbA!8$3=YgwJ-)3f1h@*(GFyIC-l~;G+O0Sy|YFagve6d(A(m z{>s3!R;J+>McJ1x6XrVY^Kcxc%F%R$E$zwz0810T7e@y*F2fB~mq3&IH}_H*D4mqh z8r`mUp}eAzLD)7Z2gr4?5-0fI$cc^lAJb5q^|?X`Ci>3TPGh=7v!{}uf*$nd_agUx zg{R+_X9dyQMD6F8^`?Fu(;8>r089|VSQF2S?SXUZE^ScGb7(t@GI2CA!;__Ua;$Cr zl{M$oc#r6AFHUX7PGN4k$c=H^tcV7XJ}HYVz7&KuK*TV*17zg46bZUaPyzF`OJo&u zZcmAbz7pQOZp7@q^&(g*ET`*k=sCACf6R)r|sJ{rxA zMr0CPCZWPg(}`;Vuho8_Vaq~z@p3!~9z#A=(qoxcZ(jSN)uADoD%Un^U`JUaP#3K62)T}_aJ{5F>VcrNI&2Mm zinq!7l9mUIi~F71M9<;nv4T%NK_x@8*N3D2rpVcS>8fhWWmv6?swG*gA6xrPucJBa6B$>w^Pp zYYTG4R+;ZUwC`f)UX-3KVnv0m6>^iHbfn~hl4oipLX$-_&c@vY&ks;#yD(?&~J*8$4-_fU!Uoi>&1f+M4emVHYC@?ce(6A@O!%iF~C zJP;9hZ9H7;wbNpDPkB~LTE$yYq)hE}=QM|A(sKLLO5(K8g!2Nft^HY}vvdc+$Stb7 zvVcRY#Tw1$FTumv!16rR+R1VlBk3-Eh_=c~8vc5*`)DN^AGF=>Q`%fr?IxE zg;Uj|q0%ajxLqhd-PA#=^VW{kMcc5|akQ(Vh>ZJ?Mt!XQ`hjT~27@N+IdXvyjx%wf zI|?`b#)6@x8v*H(EqK-u_=&wv6ZR*IN>dD#g^)2~x1RW5V_>sOHmE)EZxTZE>E3cI ze{%>3Dt?=I`i3y7Fw(#P2nMk{tZe22$Bj5%s41WD2$1-n81UuSNcFk7H zQ*(t8*qoW?fx-LJ%^!EXp1~@dJw)|~o6sHfCe6pA=;H6CxG4j0;bsD7KYK_<2j$f@Efk5y(Jqtda69N$Z@qS~Dp z=o^A2NV|^TJ+gouj%}Opyu7b44&4u?ale8Q#9yNDVH!f+loeQ2`+^_Qm3nVX5*@pa zCdG_-rmkG@rqTtz)T2rHKYvUWE9fEkqdn+DgbLvodV=d-7z*{7yBf}y z6MXuKv!@yf#Cm>2Tqdmh_5LMTGX=^qnkrp##AuQlBoqPT_18i7aSuod?wUxsB#j}m z4C4&K12W!meS3np-8+y8?r*Hny;1>o$IW69s^6;BC{vjT6h;@e!Wywr-svC@4M?{T z1M1<8R1XqXMNsKeMZ9-UAvg`6pJ(<`_T*p%x86e<;WO9KGR&Mi=5`-N@Lz+95g%&( z)$@2N_;Bev(I6?Y_IFXMMIkNuP{_6f@GG<+S;RniML|)-!Y+FvH?e$BVR-`|Fjfn% zWSWO{eZkBjek#96(lWRP-sGW~Bi4`ycK?oS$J$W>?L@G$Cn@&NiT!R-y@(c$=ye@q z#wT0k&PVDnu&>zg6BCEdOjE=mus502F%@Z|-Zp?lRFbmHO(4xZR+EQX$(TUJ%TukD zjkmN$^E*ybz4f#OI$^G(y`}Maw~$y#dgRyK5-^aLYKdDRUR{H7nm35E76FzEkRmY? zcC;o6028eDk)(&C5_5=Kv}dOUR>!ukjMrym6Kgu>zBcjy{VI zt#_F&Ea7cpZx*%rq{#J%nr|$mZ)!SYC1~M$5?Z5~V*UQ*J4yLX2KxR_J-iqu8m){_ zDPp_^op{Lfp9a}J)r>^Z$-7=hNp~g+Jv`1?pc#8mJMC8WaW>Nkk~}{R)K*rJiB_$E zEDi5`@%gtAGVaB>O%gwyIb%VJY*55W^CI;_&Y96s0<&~{-JM~DN&({vwPZ<63dw|_rUWTl- zypAm*rCzDW4%q3p);;wSZ%W=-rq({N3;Em+oq@@GY_+8Wtf|jdY~y(1K?-~C-RN$6 zIl_kRq#^AZSWaSt#-miv0#oU6p)%KM_cEKS{*!SZ!+hw4rPDC5h{Xo(4X$^3;BemN zE|dn|!l>j%{)w1eIYl?O!Chye-NZwHhoYCIpV@KAuh1CitQR~hor*`;p*3Fn2&C>G zx)YuJ)wq4rwvO*{xl{SgQ@(UtS{jeAxvZtBef4nXZPw8rQA|fG0=OQXSi`L9<)&5! z`EFZJKiy`+j{TDy*?~M0@polZ`pZVzH!aKcJ22j3HTCw#+VMy4&R!_4<+j!zt%h!d zAElK>PL|hB1>jtk#Qt6%IQ=>Bh#R=ah^Kk_;QVJ{V?;>n6Nii4Hg274R|B2>XZo7~ z5;hU{$~-1uDms}()KIWSnfD+40dl%A$p=QQc{dbV4LXB+-_uX2>P6rI|h zsl)Ft=)#dt+L5}5_$R^L@@Pc9O;iZz+bP1=RQ0p&NIbw0_=13ug|~D-t_mgC9}5qj zkwJ82t92%SZ4~HW&;sQT;p$iK6HDMPbN9yF`9IloR_mti_Vewzus8eHO( z{F#amu;JYM7E={Ss@ox)4l2fzdGvPHFD2M*X4xH%&zhjoC81BmFgbA!Ct+ zoz>OZUT(@pDzB?{|M6Z|C|>l$%dB*=FP%gGgY z9JBv%e)&J#N`{Pkk^e8E{*UvcMYW_w|M%B@VubfP=H*s6xF#dt<2M)Oo`v`O**MC^ zPAnW!%{*u*pjLv`Drr&>nTz1Z^{ft)oSD}LDmqIt^K%oke(cEyyY@w&j?Pr&>k%Dt zDc2wmY@qa8Lz_or3UlOOo`cYz{M2gU`v_(@3FxGx;|Q^=Zb!HJMxj4@Rw=TD z2|yvTiD1-1Ipwljg$^dQcGqCs;hQjT;cTc#3KHa${!>3ZTDUG;5MZ5wsHXAAbOelC^%brO) ze}r#d7@YkDPtw2Tvbu50X6c<Rspd(B-2XuW ztulkY%b&1Ubt6U#TL4#^eR>U7d7|Qo!f{Rt<2V!tj~X5g&ez+59i_VeQCPmiQqOg` zcWP>f3q|rh0Y9Zw+)_;(KF}cBv>sWus+8zT;Cqi|&J*YCovxp#w0$cLL6BlExgiw^ zZ2IbqUx3ufP{@WnpRYHHd=v{Wz2fzVo(K8oMxMEGiBTc z#vCy4&Thn+iq9#YF`ZHr6zJmRD5W-rwjS|IrN%tqLuz9m_b-pP2*!|#Bsh5gYtpuc zV%v!X4w@o{--`^S3CaN6yVnpEi0%o!Lcg8@-RjyOaFGcL?73zOGvfg@`Qu!eu&S7) zM@h_$TF^|ri`;4f=vS-+N4ghv8c$MYj_=nVgV+NX%cP< zljWdDLi<@A>{;kR!@-z~wIfq13AyGY-v?yk?gMyXSBp?#r3RwoW2~ZR${-2^+d`Ar zj0PjD87qXLKx(>&r`6f=oz(;Naw=rZq_c5444{bdCwrRxWQqD9#1V(A-9cF(4KJky zYhfw-R9-=OG5G1=ctH9GepG|=BZ7JT?A7#KtPjQ^Aci0bVXX%>7h?#a!A=(OV&1mob{-HKif*8vdzUzx`6R0x`Q1;PH-`{2Xa~@2LsyA&JRBxJnD@XFXBFIn(uPmu z=;217YK-kb&y1Hr8CJYT08M5DRlD#3m4^0YG%q4VAk9_K9b?ji9A!jL^rt4krivO2 zdd2DdE)%5E!>q}^M0j%#nT{7RbzfY5zvq= zsK*``Ttx=Bui1FI(H#oxaOd_qUje;3wKp-{Wf|CR@ut`;7M~}_*2Y4eEyw(AEc`bo3D(~pQV|9!YPZcA z_K>yFJ;E07vk4nK3K`B_Cltrv7axQGW8rkj#?*sh3-v?R*l$;X<{~-67F6cQC{1m} z?exMdLTpHm*$wm(xAmO1y7(C7Yx&5LyE)(;V+WGAhsgpE0*Nj^5{;ngjRw0+9+{>6 zRgrHx2qs)b(-ekTuM52WvZ`1`P;s9dBu<}P&auEyd9B!V>^ zHoOQjI?R;yDqhC^k?HNBdxM#UoxylYvM9{Lj`YW5#= z7!VmEPm?S|EvHrfud()nv@ZUj))cT9I=Eh=sY*fOSc9yj)#5GH{(TJ?$GvlsXCaXT7$Q+( zz0;@lpSzK<1V*lBG}8v9>A#(O52lyUI^+Pz-?$l{=ev;z`}}N=Lv)A*AsHBhp9aFd zspUGl4~2A2krOy}&L+uXDESDG&ZID-H>Txc88Yh>yNoPK##=cGxL?wuc|LUrVBb!ZCTht5<=uYp;WgdY zVwCBvgs7Bus$CJbn#HXk@w;h;yr%%&dEvY+gjT7aH6;OKIZ?sXn%TU*&5gt-u!?-N zPV8f@oifMa(DK@igX2}2-|qd#n}7HH_uzM09SJu4PnR&b~J5^Jk&}u)6%O8Xu@)FHy<# zaq;+~d@UH{y2SfBdlz2<`@QqiK^93Lkn>v`H8ui2I;W!^b-y+9aMtOcvLBLl7UEge zrajUpcq`BgPbXKdCR;8>5)a(#+~J1Ktjq)!Sf|U@y_HEkj99axioK=L)SlMQ^`Ggt zv}3DYc5ka_##mGA#SlMI(Na7RlNm9>OjTl~`@v{KZ3Z;CGfX zZDAkgj0wbsss*Fiv@M_xLqX|?_3*=0hCz>ED_j_a!kLF?rkcQ|GXBlETKxiG)h;F|usP+E{C6G87!drv<`riFNcoDgHjU?dl%cWpiOZ`Y%$H7 zj4~x5QJW$^OHPq6g~jf?6X` zEBjZsafF`)q=D+qOBAN7r4HyDE5GO2Sn&FKaSI@$=)RgoY*?g|--)S_Ng3_DY4e~t ze7V+t&&nfA8u-Lrkw@Ta8b5d}p60Ho?PytBQcvA8Dv0qfcWgF99RuWkQdZM99DN6u za^(7a35bx~vGuU#$FIHhpUj3Vl21nm%3Ei~V;wCDW z+vIGujL$l`)`<>WQ$u#Ni`T`X7)ZaL8D1{74=~qwhvu@Z9(e_n@I~#uf|=R)kFaK( z_?%!I$oZ5LxdnxN8UimaUl6PHy1F0goQ*lOdm zV>9Lg)3QpD#>A84Rxus|u)Jf1GdDL%xF5M+o<&4;YZ27H6NcA}h>-pX?KSE(i;^pj z6Q9t}=RREIVfix%D+X^SOddTUrkMc`8@>D|dx3;o1^g}~rjx+d-D*4)JGw@^W9iM0 zZGMJ%+ISwH)O9uMMhkZiTvUWW+P6#CHPbQh-ZXofBg;{w2Qa{TRiJHth+U9OKtth9 z3MlS1Uiv!&kYTejjp(HkXf*bpH)gdX(;DV25Clg3)7Rd{zVtPPq<{KaugRCbMgaUz zUqfA%s5WFKf+pmW-2Z=l8~+!>@hyia028-FFHC3KbEL4+x26jMK6u|3h;`%&vOAhM z>*CRL`a`fgt+iRz>eD92>_uMvpDBuIE)OVX+FJiKHh0Q`zt#YiJ=L~9G%r^cKJ1|5 zSh(l(yFfY&er8~u%J(^T+Q?6zgEjRqcZzp*3dQr8oh9YJVN^qdAYQp)d6t8`QTy@! zSS1C&BE81YL&gQYq5*kZcCm#56C~MdgF{MhTD2=c@;{DD|LTRR!hhV+PnO|{$%(T839t(s6}7OW4y3>66_FfaRk z37j=tAq53zY9?TCrWoE{09r+YuLu>Y`Q^u`OmJf)!XI){STSL3tL-FH>`Hrp5`Ql} zgTY+8-+WwWPv0#41J0182I&Y^dVG9-*2P7 zlu?SPp>veIxsZljiVx#hw$f)te_pTr8Kp@D#U4bQL1VyK8({!J!NLUgS9(#8_WLrO z7SrfDWCxd+G*F?z|MO8v&L;Wdr9m=&Szc0CnWqagmE%Lcl+l_}!-RlRXLcxNydhwlx*74%@e+EkXL0V{d?)kM%N0H%twhl+nqE32?MRU0VhRdW zHQ8IWz4t6R{fhsbTNG08u(K-<@An>l^sz#2zCSU)NUEs7+reLk2?&z-=@RLa9iKRp zz>%v@aXO46C4Xaz;dlIYg@TwnRhAFhg?_r)AFmPK1w-Nx6Rgy8$Yntup24v8W9s+;-! z$Nc~Fe=-PCvms-WNw*`)gt>oaq8iml9I7vAw**dEy*O8Qa@qSRK>3DZ;F-A264Cy) z>kiAxt zd@mkI;<=W4%!$?^O*V~}vd)>oIk9D23R!dG%7y8J?A*i;^JjyG;Ij4Bx7f#Wvx{?g zh1%FAGA^=>4ey@j@JJp){3|kY)|o ztUnJPBOIeHC91Tb6zey19u~?{{<6T0UE7@Cof!RwacM^~cQZxqk(deTI7V`j4Lcb< zNR|L}L2HO<=oKHA+}k<{v|H^5nYSr^txsrLP*7f;3(MGt@3F&uTRPYBw+ z;jtnzMo^o+YYDVscB#+CV;xeK*ecX~)2cHdDb;SxDf-Hbe+b?apZlfx>}U)g9)9%s zrnuLf+-@jl5voIS`}-+l~nHcrncZBo7=J46s(gDIMfK0=; zbWH|q@pxyxm`Mn#S>^^9$g9Dm+D_a6nr&$%xPTPtWJMfJZK;{goVkxPDb8=U+L(wP zC=@X7x~tU$^aa2CA1C$r1Y6{?vVWO*<@-+3q-EVg71&J6))`(nQ6mR3!%M+yUC~67 zV6E$S<%-7;6urzQ(Zc5{K%2B?&rrjeP{N)nCFi6h-Yd9g-$iGDTb)SQ&(wg!R@B1* zG}TRQ3lkQQCLIO-D-egJ%!bT(P=vSzcK?VVbS#22OX>>A>e}foX)NZ(PpLuJCg{od zccU|655_8kTVw?C8w~jCtFp|EC%!1xon}T?#I$2~wc3GH>z|RM=AV@F3madlZas zd{>`w-B~U5>=zfQ4t3AmPfOMqg_n0K?;LF^DILml+ZIYez%!zY!qgEfQggSczwYY! zDSdaY*@gv=HC{kBD+nfJJq6&*=7x&96TfM}8@+QDago~=3*P9n`(kx#DxDD`hYz%0 zV4R(VTj1h_p7x0LQUI%?76RMRLigx)YivHa1FT-Zrz8|(1v-HVK^WA~R%!m&(Xe}F z626_toH1v5TGezzLkpO7ya}BVB!LK1eaSWxv?p?u%WD2LRb&Qvs$_5}Kevbo@nW^y zoi|%dNwh^ns%7YRLXUhiib(}^P5MJomkIkHI0}2>unX=uUl-8c`t0a$tzpZWHEllk zUWo~-E)8Gi|M1Q2gW80J7OEiHH2;6Hjtw*PA6ds&H4|z~gLkNAwSVgt@!1V3Kji=t zFZc5B`f}>fS$|P_P48fND&Ik6Q8Qs%cs{9*fanCivr>t&63y2d8gtrRY`EQdEN&&i zY(9vz$cJnd0wkkPsFeAMI-xZPm+&9g{|rq@)P?FTC?@+ zB}yLQ*xluDV~ffEBYYZ3&{EY!iugtZko+@jAy*}|4j}{iY+`L16I0Ff<s(J4q@AhSD08N|JZZ@(qp9`1#Et2cua}0iqP2B^P%-Ayb%;YHNIfRy#kdixYDjg2 z4NOj@2_tSOP+A}{rp7nG|5#X;4`lp?6%0IiB7$?nUF{SkBCt+#KX{hqe)SQYMwhjkE zt%ZrjSdu}}_Na-dlU$ngxQ}!kTj|n-Uh_g)ZN&V=d?t(2pp?G5@L<}GTQCQBV3jU~ z_~3x+fcUMp8%L4qGel*&n5b!Vr8xNp(NxtFd_a!587teIMqT761Lb`&(Z6ENI4(6> zo>$B;PU~N~uBIxqaFO)Sc`hlsfGWfs6XwkJ|DEfV6TXO%e}3$2^OC|NF}H4`O=Hgs zM<%p*n{owz1}~1#U6OJsBX~}ozLMZqhgBLBoTxP@{`m#1hg_Q*I;47DORCVwCI4R( zD;6>IYDZc#05OX~>rv%H1=5qAtJZH+xH|fMeHA2pL45ikM{X92TbHJkW*n5u-S-Ah zgiPuQi!#(#V=QE#SG!wg+hpfPCJ)T<4V0EWMHpzX=m_sy#N{zYYkPCS;vl z26zVs1|XF15b(in7VTZmxwz}S#>$~x~=TE86xFX zeIM!wiynNVeI=u(-R=Hjh41}y={+42|I+JS3?T;r zBKtXd7*Pk)03;aVspw$VE${RKD`7`iM%t3=POD6ea0=sK=#Vb-NHz5;$X z9MQio&Q?gDv>&e?4?FhsgSVR5Wb3_fJ#Cg8;cvq$OxHqv8Ji1n39q^oDmBP|D1f<)zkPsjM>` z=pf;W_Vci_Z+T)KP3zlO#e)RI1?Q{kT&;RUBdJl?rZlKj!=;19m7!9F2U82NI(!2v>RB%%ndbMnmwUJ3s<^ zP&{3H=Jza5HpBr9S+GAkI>k}_6*cm`@TEyyJphSEg;g%Qk5q=sE3!8yWU{y>Wh4iQ zD%wGo3U2g&cWY9ZPEAj~=5($vp-t7P_-nc4AJPx)98XyR)}?D~{$C<3u|JmS^oUyb ze>i9{5v>Igku_KKOz!t*_KNbJsFJCEK)<3LcunfJDiD!B&B`Bdf~#g`CSdUpm-X!` z#L^s)(}GS{KLbMOJNdHxNj^zqB}b_U`9*tSaFB)E_69KGf75F&&KMUd;P^9oAynm| z&Ie{B+Id)thghXA{jsf2u+krlpg}m?F?ibLgSKyOK$ixZ=7&TBG_BRv4Eq6 zZg7!1RTPsXB3hg~MiR;v0^=%7OA`27<{y71Lc z#vdN@)ehk^Ar#%|OqL9zhWw%UWoP}kt}!gQL)o(8XQJP`6K}cjyM;ii{qpWGOfPzN zU_uy0MC<%z?+P;}5^Pl~gjZHDS&q*+C4H5qh!KIzYFCx{I8?b8%>Pz{3gXXVXI*Fk zrg-q;?c-6@<;MRU4gUnq*#qE?yH*|UsmA}FGnZma|5t4J|4J`sU>x^IQL-&g5K%Sx zbkHX^-i?26WsQ)XQLhGWrzf(yV0!#iaz>rhhs4ioq1(DUlFogfL+wmvov0$UqzMU7 zek93i2T7ch5TDW+L@9!mnSdAMgL&xSr75*m+wiL;kZl>W)o|)AygWFi09mVJ;`SeH zAM4ZK^YxEBU7>&&2>Erpcm5AOMHC>%Pj|uz@dpd?dn*LT9oI%66`*9am#tUqAj7K-C~H}g7c$2M%G&N z-e_V=8RX{DQ{wpdvAmA&gbT?X&X|8apSA&HB-|onX_k&^Qc9g#`o--4E_VOK#2P~} z!!I$BwgL_waGPh?VC?-rBcP}Ipr%kcTUo#$)4xHz^~*r>Kl@?=wjg%UfHwFbq^$ zWaCI1q`+RS0m9=IN2V30KfJRo(GTJe^ywR<3T6^3dre?0CZm|b`z67SnCQFFv$PN5 zf6S%RIjmP6S=K=XGp`Ztl)#8&$e4TJ*%C5slXl3V*UQQ>KzLX0p9#AHm!(i^ zBp^g}7uxL%eY77u+010M55pouu^3}n*sf)INoS|*y~Qn*sqgnz(FtNt9Kimy!CDy5$8-P>OhaqnF{(B?ok|76#^36Y-f1G4n7+{^0tl_e=?RtXKye z6t8iC{^ly3`|ctU7n4D^jhqW@DpOBTy6ku;bP`909;&jxE&_Y;hA~`p-?MxTNS>As zk0*y0N6*R6D>!N1q!nE$W;LVoDni0W?M!DD6lYH_?i8>*y!EP)h!b6^uk=+0UhPty z@(TR~(*!;q`2)>WNw4`i{o&Q$5F%4PM){-d{UB6Tb9jnus6q8IyO&@>k#PYczU3tE z8i!;{_B$Lix#_>7dIvJ2=`Ya_!;5x8W0^^DYMhHv2d*@RL&OLu(k{pgm382XwOWD^ zbs_9p$mts?Cj-T5pfXRmd+(EDr|fXR$gIs`n&~|Sr)tylX=1v<$^ybO8;;&BC9QvT z`w7&6A1t4qNwDm%3LeDKrTSBXd}f71Vs?t5gIMzWr$xhCSJ&J9KWv>-lx0zqtt)NY zHY;u0wr!i0wr$(CZQEIC+gW+D>hJD*?->1Zp7zr|YwQ&fbIvbdkXj4&sR~i>$_$hq zoUn?Vp5pG7U{jQgUKn!m85tpu=E|Yq;Z4$sHl6mF-^H3@UOB=EhF3+?Yn{w&MQt2i z;%Plh3Di{s53CRnq0%1Hy-pGRWetPg9~vXa@lJ{P#jtgW`c}l!W29A8EOiuctQGXk zK-VNK>W>nf9iHOv)`L?PtNm%w%?@Np)<{$6IK}PH2iC>=>GjAcek84lhbJXu6-I2w z#v+Lq7y|XxCzFMz1Fk~SECLtrxn$>?M=nE#G^za|HpSx$9wLKFr}r zdFf+?Ae_6iY#A#~&C#GaibC~RV`yS~oA;+gJY>=eN>v+$I?ry3Bd$1pQC_pSeHxSq zR~e!m()JJ=&y>TToYef(Oy?bf`uI4jcXq#$Dx=oRAmasol7W1Xe zixUDucagrhcsP`CQG#&g-+*EnEA|6#zKD6nvZNn~4$cb0((4St; zOxD6{UdY{^v=7lf>TIO&*g^P zP%(G5{&&MznsAzWtXnluteW{L{wxHpXS||CrhkXW;L9oO&{r#q^>=7<*fdTu5mBTa zu-^=Ek>{#+P{Uo;_KvuKmfQl2bWEQk6q)^}|L}-TXX?J3l@!k%l6HpPnT0mwzIJ*vC(k@AKZSLrX@n==yuyWLS@M*AmOzIl|+U)G!e4NTY3!c6m^`BeBaM`w;=gN44^i>aG=tW9S zZ>;LmWDSXblrC-5l*mpW*#TkIPVHSgQWl*(L}LzCVqPW71dY$f*e=8%`D_yvNfy%t z)>?w=UNl<&LdfPj;imQAa0;U3;UU~FLHkfA9-`IXSN^m}XVTDnAH$*Zrc>Rz6=3QR zxgVO|1x+WE-F`Q~_e~*@+Xa%nc?Q1CsEtU%VoWkc-0antvTE2US(~_~6xu<#=kQPG39Eyvr zqZ`PQ@6}?=6cS`1C)|Z0Vslg4gNQsa8LK?Z%sGoZ#Q`MKV$wS3Pv`srrG|6;3mYIO zQ0NwSz5j}XOke_%_fVaWg3t{Se${ZyDP+io4Ln|jYVvD(k~J$qAkiVVJ8;Y`i7}Eo zEdX5VzSKAn**pX0@&_IeWn8WZ_Fd(Ryd)Xn7`P7_!Z3hxK>_&R1qL;9WqTVxP zlSGoc-bl_#`+k`nML)74Ff=0&F>IKC>-4sBfh7uA;&_ur0hRa=RQ&w3EfU+)Xj7>f@OlhiANs1piKdzz8*aigI!P#E9Ezw!;UL8l~;_y{D`h5 zaCld&JdoobieynlSnu#qx$yU-7QE+?RhjfSh)ebb%nKdt*;kvt5Y0l!#>qx}Ib*VT zN5GWQR`I0>$mQ{C@60jpM!jaqSMsyA)H z3|vPA(E_ID@qX|5sXo8e5z3`EF3wymMRt?>TKVSpQl;zL@(=6p>uF>1L4~{|mqd1D zHo;WU#cJ$si^0`Fb#Q^%xckXm3d{!!2E@&>m-WNiu4-!r8`KXW!Zq@^{9HSSYN<8%6SaTa_ z69Z3Q6+g)Is{``V*E&TO570Sz%CbtT=W4)HohxjnB2(s7I)}*t>DkV1L7$MUsMf89 zl=C=D5ox9Cm!Yx%s!aLhqm3H5F+c_FTYI6k)Ju+%Y_75l2R%iL>T+|i+Ra0GzpTi^_R~l2d$wbo(v7rZ z2{cTXB@)Yi{_aGM`X9Seqgb0e@v%$obxs__pBwF=X_sFBBi9uaJ!Y?&&ao9VhcHhy z?tC5%Hg8s;RX{v1`ZjG%B=+28W89m%$`&qL3hV+F<{MmPr##F;yy4uFJ9pxT(+8QI z)^7ssNxbgv&q9)U6W$vJ2atD;c%)5sq_Twx8pq~sU=Z}Y-PSXDpf|PUJObo752+L#9Ies!3|&cr-#_tCv{7nBKFmG?+|Nv$ugS< z*oSSLW&4t`OYXTMx&p39o8vrql@=Y`*gLTe@Uwjz{?@oxDayY$T0&zU`dP4!xJE`q z<$~bWiSu<@+SdiRuu5`iBNRs?{)D@FYP@g@cJ5tr+T?aOrBV36GvC8{7cwd^H*V0_ z@XA}cTJ;9g>bIkYD^W;xA|^_qmnP*Z`oBP$6^m@Q*_Ej?HJE0^=Sve0guN7@5Sh?+ zR2Q~t4v`nmHWHQF68%Y=6GH&(1G$o@L43$!xFazvAfn|6ev!L-7fq*rL|vwUuF$~$ z>M&VH4acSE*3#9Zf9t;S((A)&Vj>7*h=b$LL_5dEA<@?&-3CyK$vuWuz4P?Ahd=xQ2h*Q!;9a7k z+L#(DG5)F)r1xJ;C%>t&6m&LeZF&lsj@O{m9>+~+e&xCw!cEer2$X4iZ8|yaBMD6x z70JLgX@uLJ-CZNPu5TTNJ6~tBz~S6XqB^Rs;$>=jYeFSjbrI6# z!AUK~_OEGY?$qWZd2bFqIWx?hMy#MU+|5mzQ)rpuYE+Z!nx}uuIYHI(g@>4kI3PoY zQR6Cll*#cYI3+1zEkVe+Svb2L!d~+wp3`Rgo=<2OaB>Kk(JsThzn&UM*HQ6y;h(qUI)Atwgluy5v4Gk&HMQzX^;G-`wxQG9 zXT~Ovgf+E_sH=c59H9ME6t-)uiN<;D{gAi9qk;8WX63HARZKSNhT|ZuTqIm}-d%Wl zGA+NV6rmG6<<&hm==~xVSCski?FfsHF&vRfbAEUXN&{KtdX*1alG=|Z`j0gqnj?Cu z5!danVIz*^v5-3K+rsp78Eu&Vue;nf3bdkvxm@o3acud7_vZN#5^Zp%!yroQg`-Ap z>C|L?#;M^-`Q*-R#1B%8g$^C7a;K{#3HVL6ba%=+zXTU6Ie5 zzY_R@HaZ6g7P#V0 z8Dv>!Yq))8)Mu@Yh>9s^`IFD?`~k?rpY9=w)x|$6NS2gvl;!n>*5{Y3CgjtBq$}KrjCpgC4{`C92qT)*oAn0|?WTH(TJ~zC=SmC= zFhZ^o6?D624lLhyz<7_&5;@UtT+nVN^$q8eUhH2V>CVMcP*Up#Cwzuxq(D7%lzNRv zzBUB?j9O9DjX8f(*%KD>$hn3u_r0FEIijr>)togNiV>ux%JDx#>xDptQ_;(o#1`w} z7W@72>wT&!FpXd!QR76+#8g$~Dx%zK)0HsJV6@DF%Fp?9K(X^wOql7>gX_rDQMj;UaiVK5+PyST=12-?UQDy+N<8{jr9nNo5#XC-fh)q%|`)`-7r$n9b-fT#cYS5LTv+B05V+LZq4U&8w>jg+){B)%;tE9i#k2 zW@JHUc+pc}g{t`G)6e8pZo0ZIMNwHtyjw#X;m$pUbD+l4a`D_(L#vY=0tiGyjhBw! z{-d!_`fvZy2u78`x+!Wc#L-_C6a~RD+<#zDaWW%yX?H;16ET8WxW+Ofly6~)x!3@5_WOS!gr@HQi*j}qct5sR) zjD9w~1(%4W?a6$+WSh-8xma%IJIdUJvJ97f8qP7C9+)d;7N~5W51-!B;~u)2xX@wx zPjFYeHQqq>U23XZstoJk32 zEAdITk;XOkv!%(R3QHPwnrrH~A`lz1G~M{6U`TAHyM15}{mkvhOo70B`hs_ay`a>n zg%6};YGRi6)(`Qd1rMg=nOI0kxEWNJ1-w`aL4-|qZgNw}#-tpEBfF)Jhu#^13O4E3jA{!2>m!Sb~3;$4k@Hd9PDX2Al)i+9jPU?riuVA#RLy^lKC;a$?A!gVg3 z59JSv)CD$@@HWrsG6u$}jj&5o(za52&X^56J|T3_WH4#&bv~`YIXrm#tf0(^PsBIxJfdF#E>wwu!>u##=Uv>YfKA8*p)^1y)0$+2%tha+;e z7LJ)s%g0-Orx??wWR#Ew{1xJK{)RF$(K$KlF3hNOyMcLv|2d%k!sz~S!_W(HGQ!wy zX33-e?_1eTu#v#Vn_&3{KMdG{zBwRzEplQFHw+OT1%Sy!=(Ti%1c3FLA_LvnFzUC)9-r4p$?B|- z^#3sIB+|#z<8(5X4jeH=z8%7U3#5OF$X|!>zc9*IHr!2D`p;?};GPTKR*)Um&v3q_ zNaAVpZL+vYj=U3pqh;x`Zt$_l9{>8R+1CyjVFzou^Hq1}=G52tTIb_$5=w97CxgyY zlyV`uM2UJ>QRAY$ior#`Uh`@fv!Ds7Nl*5#jif#AmBx%`M|Iu0(aOm2Yl8e%f)C$iEyCp|U$IwU+qJ_fEyRZw zC}v7wr%>|-kps8jaA@ZGQ>&_G9d`Dw2B5F?{Ed=p1Wb2~=dYXsab#Dj7^ zuHZj1`=ovianG-_sY1lK%5?1U%S60Ra0*m*fhv&vm*8!g_)76Dc>e{ooo}w8vidFE zKB&$4wwZoa;FCnymt`p1D7K&AU6<5&Gi-iE7<#?Tu%|nHXso9O%}mr(g-NZOw{UJL z@5-HP^mpitjJZr)MeW6Vk2~vYYeM57RWM+6Z@W6^n)(-kq=it=Q1v$Cw^2YrTDOa9^%v39F5n;ATJU`@!2SKjO@x#k!W&B)qi7Z%b+Rh3 z!kRwX9;4szalBb*EVEHJ|gc12WZpWC%OY??z? z{&&b=s8E?7LALIp>;!!uJ8t<%5ry+#T^wAQ_K1i! zGY>irX$QuovNJ z-OXC01V19W(LoyWv8BPQ)1$4kw}gv{Ac_Ni+?}T>tyHLz2CWbEq5UXgOmR_@oqjt> z@+eIFcKy^V$kIVmE&o={2;bC>j&50)d5<`&5EGlw-t@tpNPI>}cO-hboBVk|A;UtX zrmCnV96PPDErpX?i{TzmP$D0|O3HO_cE{eEwC!JCm7 z#iDP|cS)T(LKLM0=^Wf29;>QvRVL3q?166c=B5+8B98UfJitvco zuA$#i$^U+j(MrU1g%3Ct|NR=TF`M&3I92fA``;Roa{fFyf*8|88^__sc(z=q4aFatEuQATAc-cj`9OK6LD4E!R2Ky(>d${?(KTxNzQMXM7XRIRdj*uOZ6 zO;o(8N0L<5QUw}2j*870S$FC5Z#V3a)|5NRaU_`;4WcX+HC$f){q!=7N7Og^;G|AH zOta>H$1+^_ukYkiZEB?;Vy-v#Qktw;1V3AP#{%Jd6cozurHbYdc4A~5Vv9Y%U z8LD#U9U7^lGnwE1;rsHE#Fw-=wEC!>g9dI#RC2}gjn1$+5fv$D?Vlgs4(MmG^O}zC zHCuhB%KD9@O|?$C7GQQ7+Hw=d(Kifvek-KTEWSGsJY*5RmTOhCaLI*U2L0NsDt%KrV}XD>C)RX{XJb>DvSf2Adq5{{|nOVn2^hX{pq?AJ?kzDoDZAq~?x@0Sm6 z*{=}l^Pzd(9X-Ym6zd%lM$0xTWq=?+quDAyJ9!LZ4>jM{9^CZXxfwH}N!nrBdjQhc zF{7T_>MO6eb^Fg?J+oiGC471$i>U-s4V}c#3uQrrRb5FO4Rl$JEYvq&f6Vc$`Qpb( zr+0tHsJs065pl66)r2#A*3ZoYG+c^dATuEk_!DR+2!0*$Kg?mEs&XEq)GTaFXCF#Oh8d!@VL|sj zzmSnIKg#wyy_Iob;9W*@-~pyB#^}X3pB3+>NRB=VGQ8_DgvA#t1X6QjzM;l`83f?i z=TM9101y=|eBNtSWgzvnu)?@l>&*_8o|m#yt$?mJwr8hv^0HeWct&00Bm|MxAH*DT zreKPXxVc1VW* z7=lUa2r+_v)&u}>UF0Pa!T1M_MG<;R2{+6{WCjR1UN$N&#tKE^P9MUBS&bnbJ*NH$ zP{l;Fx%iF3V3IO82OY!{#ayBNcyM3}1&4}iUH_DWwB0r@4^BFl6~}&`rQ6_Xgpn{Z z+ngONh3;?u2`$8^X6a!QKE7Xeu>7@+l6NxU(5@$`lxoy~gH5DS?#5IQp*26|*$f=B zjx!uKvn9namuT{+yZe8eZ6tEcSxIq@g-weKr1!v=p3tH~=&!`K+QU&3O!(*3km@T{ ziis7jLIueMi+Q4s2^ZH%Rx&z0_-I{*Le`QP`J-X&LW|L>Vpw9*CZ^NuC|iyGaCkx@qQ(D}d5bO{&& zuN-Q5$say=9l0!@?z?2eSapxZ9(qK-C{Fud?qixpv0C(*UuvE&N>}ACs}f9M)UQWCQe4u!IYLzKStWY4C35(DR8+ zpW?5Zjaoyiz9#f?uM8hS_N2BaqHU6`)e0TTT9)EcNWqan`hCWw-GW3Dv{y{!a=khn zz*1$cP?0o4x?S&R`a5ndRvD~ts6Ti=c2kTLmv)TZ&d-W_@Oqht9XADqy50n_PU+g+ zy9IyEE}CyRKgvbMQ2^B+9emgb#Fl>?cv=V>R}nmhn}WNo8w(?f@q1H(#r3~U30#Qc zaBvLEGrHRdkO5Ht)3-2>|1;|T?ORaRUXF;2IX_n^pC6um^&->pZht#=gZnD>38%pB zlIEI?-&G}~i*usrvgK-k{%MzRY%_Y1aSq@nEBV=}w6`O7bE6-9mCo)Sm|6aKa<963d`Z$v z-I;v>4`!xMbIL~V3EzS(83Am9l^RlAKxM~$)0()3+@^X;yCgBygDY!Z2~f|&&;hJ3 z>I5DJLY4-w1c!TG8QtG3!rxC$cpF4Owl7q*DwR zTi`>ygsQvaPo=1n!uL&*osJMk#SzXDt#}ZB~~OK@917H z?+`2Y&F6-2zr|`*AqI-dpKK#3CUU^CP9)s3hiuw3P?NL%$oU+C_$GqTjvC197wV?1 zsnK#;u}})6cFF3Q&y;~9*-9^C*TpsZ(|V+Q-v7)Mz=({e#~z#(eOVn zQMLS@=!|fCYTDLW#x+0bXGkx!wW*QxDS%7z$15gnV5_1mW~n~=A8Finf}0Kxtg;`(-eBytB@&$+gpL-&sC%IZzP z8mm7RrI8V?1T~DRwN>oX2MBD zADx|OU9Q^hPpVbD+}+$SlWKvN6AK=WW@3Mnf`8rvj= zMF_K8e25s{9Y7X3_az{PB7;5aeZHu}1sf!?IA&pWxQQIX!c>tSLhor0vQL|6Ux*E8 zpwLr&lR0>FlJTZHVeQ%>|G6P-ZU)9CB?-z41zO0-D58NXq}fEslU#p%3YG@68grIB zuPA`YVDWSsGez%%c#=|pW*1RF4+f73yhpvwLxdAIKtuqY$|_3LiyBfI+m zEDogFR@Pxk?p9&3_$otV9YwuHaYGmi15u!topqMwJl1`(BCI8)D)o(q(@qg%P?(eD z^0s`!w&h|iv=#?MjfK|N2mxSpiV|YZ6vsbKfHjM)9dGRDKe!(*Q>drAdgwZtIBXQ-pd0)GZ*Ht4h9Dgo)bzI~JRq+o*zNb#C( zXo~KO?`{6@3Kb2Zmk7ur#3Z22l?#1xC{K3_>o&WXtph^ny%sxO@ zTGcUv+&VGW@&FLLD<2m6#4_CX;{ge~0yIE$ZLvRQpJEkKkQ3_!zdZ)h-BZ;`)h>;R>=TC9T`m|CuLL+H0(&GZa z3>3>h&Sw*#B>1X8*Hb@aj%dVAGUq`tXx{51fv;mBh6$~w(k~dk=eX=)DFMUJ!FKle z=5`9_<`_Z9GlYIbm~F+-0uxSR00+>md5P%8g<^ysxH?861es!h+CsDJ5nQp{_QAl{= z*gEasOPC~9t#`-^ghuhf{B7lDfy&@V>7njrcp|+!DJKijI9W}n+i2T0r_&P=sz0X1 z!(Fxs4`-zxtI}p~ndQ!|ovncM&p4F{lF(FtMmKzi(zTk-f4=>RsX!XAeqB+ef0Uz| zl+yhy`cuYTj2;wT10(<$>#i<1@?|#z>YqpwXp%;mGK8chX)w!e?3$igxw2sYnQuoO z!A)gb4cpUOm}LT|%4+iUSfAL)m=nW!qE!Y0vaB+w3b-3oJQ@Nw_OyMiaG0r-sW(q;nHSeYOFT+$m=(TQy@s&#?u>HWUgT*5EciZuVI2uiN38zy z_8k#eh*-Beu{i%RXY{MGAhD>@C_}?tUU>}K#X+U-qZl3}f+ifn5BZsP@S50p>^09-9AgTs+p{!zr{)#VLz zG#WJe%5L=D(q#^fFu&~<|No|xOWs`gD^+@Ecu1UO;vhmvuQD%f41~FP8ZZvUiQSz`L2e#U#1g9W)5ubuUJN88HXN0H_T)tdPw$zlEV`S~xX9 zY57pIg8(#I%Mdykm(y%Li!bit5fvvaAKJEHT<9Zja2TTn!IXN?!|(C_?)l2mj^re~S>`q8my#<((?RUyzKY+sV3IIS+BH zGnmAZ@22cM%k`OJD(FeMZc2y{l1`NRW$~Z-TxG%gtca{03wf229?+A5&-lB4t0Cz7OEw@69N*_GPc9QQ&d|hn+|X& z_|tPWT{Plw(Axk0PUTUiuBO-hvf2y)1WJvrAc-Vq4|fJV-guyA`!#D6ZEQlb zrMRMGV_x7S%;1hRVQg|V6zLfH;hPIKbOiCc*^YnxZH>#G8M+uG%+UJ;;T4rH3yLPF z0EAcl&#O9Q=rb0HLB#0k#Q)X+E$FZtE}Q9yrxB^3KOxu%w!do~+#0*3K?hyic#K zPb}zub8ox}>S|bl$?UnQb0PnTNnTzkxMWE^6U(GA9ANRUg0eoDvAuxdyvaRy(n;#& zO}1Xqlol^p?Abb8!~-o!`hu-_vVQE*mzhEN@l}n3A!-nSr@6`Jzl8InkZJ@m?s>x_ zCA-tBYb1w8uM001Ot_KGn~x(}pZuAIR*d_@cW1ca2ky50uMbD=KkEm}9dX`rH18-t zloQC=*ZZCVLN12)x$Tc)lnggfA8kh$;rGmL!*C~7K3A-#IcHZHWx`K9(zG@MP>=Ie! zB!!wFL!RiDXiAoL@||@2RfNn-2gXK3>Jr@m8C*)1t5x^H;j}`no*YRnk7?-P}amNlB_2| z5~@73DJyjDhgMlozyR^7Wu;I?W-0bDz`O8f)#Avy_7h}-Rd`uH-69gGICJll>Tj$f zXgf{xbMqs<|CqT){(1y!N8!2eS@mMXa!fL*vFJgi7rbL0=!knfp2^Ae$)4Uo%xFC|vKpH{GVqhN>6mS-i=U@j_A5;z9Ok z{|RT|2ng#whQ%xCQ}=jyzeXQj<8^#U=`q(4d>`9k5iJ=oOhdc3(fJtUS`F&9x$amS zk@tI$f9|OR-u79=Bfr*yeTM}Z;{DPz#^hx|JJ-EX^zJb-&s=^`%IP_+^TDrmWM3YD zZuaedW@nJ;Np9Ky&aJ;cB=3l{e0jwE`0ADE(r>(7%sHN_1^4nfGMf3gzHXqFmwm%XLV)%O7o{Iv{=wsylatTUeem}0uTs+R7 zQ97yKtfyqggZ~^fSDCx6S4%c=-R`Ck%bp?ofnJDyph}%#u4vUzo|05k``hJg?8xh6 zg@8T2Mm)@rI=`|4y*6@{Ajfy%w3FNOPiT}9f>^{_NIqA*Z2s#=QonX0(rDB|fWp(S z$l!XZTKGg{;98M6i9(ta;K{KSlrgkIqn5T`Kdu`8gkGS@g)1qb$M1pDPJ1wk=5^R1 zE^uf98q*?T0l4BOE1TXfJZg}oaXkJ?_uB{*i(QOFnn)%(`jG;JIDAh`K$EDgK)xEy z8Kun3olzb7#-(XYseC4foNE$TD-b$iGFiJzOxif6FmxuHg<~+?l1uFwSB??(GE}H5 z5ACNZs2T}?=UGJ(yoYi`u%6!{`^tlkAV(SQjn8G>kC+0DsZTma8WhoL!ITJcC(X0yuCj@Rn#e9QB zwc9ws#T46=&ZtAT*we2IJNKT&v=DH2ryV;t69`dm5cKWNB=x=2C4J=N zB@QgqI7>XHw04uECW_|bAl&aiPT+wRI=l*jbwgqj`;NMYOuvILDS<}LdV=O+j=`VY z&m{af6LVU$V%I1L73O2wh1QytKg#e7gYEN5YUHQtoY^0F2p~B^Dprn$4F49=!*mWd zAF`uUZ{4QaEK7d|$!IYS%vFKx1Ek;+&%~;R^ElP?xk4^J?B02 zFBrUUEswD^s922M!8AvG&LKiI&wlG$&oWp`@Cr4L%uD zUmg$R+0wIwjWoErti1@C!;G#TPkomgOS@H;wifC_oMEaB8X}EjTKVGQ8 zZH^->*ryZZt6?0nlM@MK;tDrY61O10GjOtW0iA}mb679Lr>_GWsDBC`9dk5d&5mhO zO6V3N_r@QDzbykQC-?9lt2E$FwK1gQQ%n&iis;@X4h0-Uo>VYz$Xk)*k7F4Lyn;wZ zsT`;pMD;`6DVMs(FhYX#Tt0xBc(Erd*1OpRNx5c8+sbR{{mOnh(~*=XxH4N2g#mQa zMuyZXh>EAwJ6HttTs@1#tukZ5#bWffw3n?k+e#3(s|pG3eE6lXrpvUlUzyL!jE>oM zF{cELKiy)zQ;w-4qIfA=k*V>7Lk+5PF!%3l-RVEx+7&ocLn&6+l;UuuE$i4Fi40g{ zNABg%3bdC{tb*<7fWv~j&}cD$!!E%HIBc*rVt zPbyBtgV`pr9dzLO!C78ts&2xL#pmNpuEnx(o6_vm1eld!2SIVv}b%z}T# z+7aGlWfp;f$g#9PDBXWmS}8@o0%;ld{M@KUQttA{@=^+0SpWhw>!u98AcGgEmoQi$ zQpTywfFcs@a}hDqau3;c0#if(c#d@IX#^EWKIG6%9ePLs*S4{7eEYkYN$+>DLT`2) zn0-_3*sV}=yDrz&7$~rIJE4jIDT3^Jvs>f9d!tv=kd0~HFry^0Z@$2!t~#Y}j;nDG!78WmqB`^&%+6J~?G9tWzQ&L>sn zaGjC+1!}bFQZxf;_#7N5_&wGFOE0A>vdv-s{U~MgDOF4R(Qw1;-R8YoY}4BP3_y27 z`}*O?dJ~?Iq2x}G$}h_XRm`59A#am9msmJ~L#QfL8fi9wLIt~Y7Torh!IaMkbI4UW znb`J`Oo&ZMBt8bL*4}qNxB)hi5ZWb(>O;r!DOYYzS<=dLb`I4ocO+TC(%wQ%d4~GA zr-kV(|L-fIWF8)?w?xeYf@X)=- z#MlCE`Js$^+&K>BgnEVHaY@1o`S)t#FeE@ib8bA zBu!0pTCbS^mAQCOP*OwZd1P1nxBU zkfoMI{a73lP{+QV??ie{{0^f~s)|kfmpx)u#^L4NC8?nmnstl4pZrE;?Yctjj)V*) zjmThRKQCc~1j$`)Mu*PYai^q}WbN9X0Xqb>NYTuw`c!-UxkT+9A$dTf)^Qs%k*L;` zZPAR5`K=fZh3AjFeJ-ZS>Oy;Gcu2cH9MW_Jflo;cndpqR6h{T_0~q+ z(OlDgI)!y#Za*58uV1Yq`g%+dCb^W<-+a`Si*i_88!MBRKa4t}NPXLtIcuVtJ>Hi= zR&18q&)(>8tp@~k)gMB;$1|EHW*fGi^=ljd9k9l1o28NBjWh5k+QmHHp1R|>2cDU? zqP?7znN_2&F+KHSZH}!3n#&nPg)FO26x59dbPwJ{lRV&ij^ICVI0hCRLB8cf3MfKf znm~0uL{c*)4@z`9C2ID(qw*TK4dVC~r8sb|ymk{&GjhFB+lCnD z%bp)#a45>ewX}X}%(Ja^A%7zK=S-(Ol;1dkRflL60IL<<2uNTphPS8z;7UC$=WEJx z@X!683@*P$Y;r|O;e0Qa@mD}lux?3DfRp*%&nWHi&Fz8*lXak->zq&x?lt;^fBJGy!4e7F%#`? zdF#unXmvLpJNlL7+^eV8?6mh4zZP?M$(}8~3Ufna;7k=uXD+dow0?Wn)v(h^z(&Hg zY4N!aE`i5|VsjVBs+iTOv~Itw{6>H3$Hg2)+H|ap8!;=xw3!{~QXE@8J6(1=l5zZD zei|V@8jA;AEC@egDoY;bX~I~8xz?nlzT`CO;5e}97qtfp0E?~>0(b;2q;VV1Pi2*` zx)~(Z?KaAFc)3y!R+13e8_ZF8NRdgrbUddyr+OgWJr>J0lKlFru=je9H;Hm*6mWA8 zCzQgr$AzIm)*~iJTO6E!a%{N-2NhR46%-DKyv&v4*d~!6$nG7D)Jqm20**$}j(UA8 zVKY1i=BJl9%ytSPbwI~__+gQ&s%;wYP`ZMVYSFOw8CbO|&K5@^$+u-badYrHO|J61 z@aJn^ZJ5mALfPYL4o{;mrpNB&BT!OrzF&~&X%I>AKl;(XFmay2L z%d_%q>nOCt^?D)?3|cC)9Qvw_vH4V!zn2K)dEFko;023rKui;qPj!oh_M`O3sSy_L z+xUN;rY7lv3n;n=!L$1Q#4ZGpO;qdS^lb-m{JnC5cYkk|E<5b-@V>Z(oE);20!%y| zU)!wr3_UBL1bhwbN2WZ`xi48V$bJTmv_Npfa3SeStmI3;J>qW1saShgbMCCp>G4KR zG{GtyPki5om7g2FjSbuQY6`}USM|9)1^L7KTZ-IY#iCwa$*?aoN2RVql@7I^3-69t z34y-Fs=C=8B}X98cS)?nV^hg!r7ZO6)EHZU0oU^|0REt?+LXXls#R4=XqYfow$Rxw zw23Ya_NU9|)Yo=4S*$*k^w2-sX@ZJWoiPC|27YoP zDju+ir@>e1L?yt1k=gPBnkF#CV$!`3?()CtBTwYNqEfW)C)YMp1R`U~GmWeh%Cb#LWrYOxW za1@llvLShJ(6PB}YqCD#$A~7@vI?uahsPK$ANqsIWRD{wdEFDqG<#*cPZ`kK7}uVr zEH#9KBR`|A82LmuZ|IH3c$=xw&~a*Zc%S;mT&grx4E>!1_?}2gQgAtqOi*%1Uu$5V zF8;409a>uDG-)r>S7@|nv3y6cF=tQE@g)%po6wj)*%6oKGtDb1oJF}k+%9eIE;FvT z+G~fyb!*l9Cc2E$v7%&LOJlavj5weva#sU4m+VabZ3`|PlIGH^JqYIbb% zyTTK|gm|TQ5-Bh{`2s@LNh=WW6`1p~sBW|@G!7Ph!{qKEaUc&km#6R!>;aTpM>G80 ze&80*yt5&YM8FOy7yrXjQBMkJQ*#v5lg94{`8Rlk7u5AcA6YSUl*l5=z{E&tl7bSY|f#BKoc!M9pSAYYfm8&e%WR>e6Yh;S9j98ll!(H5R z!bCf9HG~?BvYDu@B=DKTikx`}l90DVfp?A8iM!ZO?U;;9QMm2($1wRv%P_W5z+5tFg=<$8^ul8OO2Rac+ zkcPSN>`18#hH*z2$v-nW+~k`rAy6gFN`5=f{T_%fo9G8H`XOXyqH94P%aE7EN$PRUIOQ>tfV1s z=16x!w1&}X!ZbkfefkkeQJqF5eY;s(rp0WQvK^w>2P4_wUX*EQQp>5p=%dP`r9-_9 z(siJzs%;9Q)TXH7=<98B)+Wh_Y#|`Go(A+WebC3YInbii4_0V~PW2V$)Llk-p5fGo%eSdpLNl`E;8SixJs%w#9osky2`< z<0Wx6?I^P){oIB3c8{SksP`g|>*M@&58}Wbynfw-E-)`)1BZf(PuKk=_kgErPzQHP zlQf&>baX}APdE&g5niVZzaXyJqc!c9lXmpr6OW3EJ%2|HQalhH>6J@-c6Cw^b-o{o zdV0NqPR&PGKRu|CxS}wNG+G+gjhk`7A|luW z=z9(OBk6IsJxgm9!;X3V$Q!~Ch^<$;{T9yz@FtaH+evgN4tG2Ah}| zrs6q+2`lUEii0Lq>eqHSgS>i206bRJV)^Uf*4i+qH;44Veybqz2}5DSCUJdY?R!?U zreifGJR*KvPk5P`eH#ZiB#@h}^d_L@AVB1PSP3bm;N(%{JB*BQjY2uc2(MSaqe{U5 z#(u9eFME-X@D}RV{LhiWrx-2U#{rdm6*_glgM5 zkA_0=m=nr+qv=5{$5o=>#2ZU`sx>#lLx>drUN<$nR$rjKY{1#41!WDcuPhhR)^v45 z>o;K;RBQznmEzOKwl3HZF=1xca)l9k?OhAfg`RKYT$sTA>+Su)5$(Os^S7N3I(22S z*t!jKQrsWGlqEVh^p{&KuOAyCziE^nJ*=V89MM>qz+TQ>$ynI94U9CZ#AgUI8I`myI`kS8CaoIR-2+_*iaf(`{&6x;F)(aUX4KW^mjnRB*}U zPv))BFpYX=-0$mr`cNA?o6Z_Wwk%+7DC{Z&>)70rI^nN$)7S7e5_u#=Dp4SM-<_XP z1J7?jZL5;^HaP7r%f{#W6)~E8#rP;^sqLS>(aVdzj}j|FP4q(G+u*-DS+zk+VukPQ zLpkaVuC;I$N{8x>os74ypOQgE%QjLERFjZG&L)tdLK<7Rzu+_Kege`7KarNPddO-0 zsu1Wn@{&`PX|Dplt@e9W>>ER)0nywCJTE_G&5@&Uc{b)_JtPagf%=Vl<&w0k4LA@3RKI6Y_J&2fRjne|S z=%iW(1T0*%?%4yz-X0qk?$*{#A?-1IO3T4=;DQt{;u=b(P`sTs`_7I1;7NzHx z?EhTyY+ro;j!~OxbmkmC+ruf9%O0F=n9aRlb8j)oP5XU$7aD~xJQ-ZK{&c~gmlN7) z5z;C|nC-~Kzav5jLM6g4KHoh(dd|tn_>t7(=qdXtkWMjrq_W!3Oy6b2U0lr7mSDBk ze?LN!gE9)mvT?>xf7q*%E+o{B1THSct5b&5>L}N5kU@7@s8%W)N*bG2TdNL;iQ-+e z5F=K7zf|T$K{yvHZqdGxbcQ;7MKoTn)RkN@GjVfD!rLNM{5h;OU;pj0fqDy5a&)|- z^!Nab3QW#}Vx$;Wj-UQd#SL_ltx5^ApkRb7;o0N39Wtr(5aIo6`-2*2kgfdyBRR_anUX<65ayGT z%5+FMzIz$YETd?IRBi0f~u^Li5 zCoc7e#NF62ofX-phIRa*KRdM5QEGVev2;=x-YU-+%1X{1CERHXg}{afnMC*@OFn~G zn-o|MW3JFhJq<=EyaJ^vJxJ{?qVP4X?N1Szen?@QYy`QS^rbw&z$x4AmY2MftYY<3 zSd;*yHExtb=25o@eH)&Qf>zX+CWJfHitry6MW zvYjPNUE2#GqczrZayoIyUsBXgVa~^$GGeKD!w5p=r0k--*C3fJq{+r`PM``CC7-FF zV!%l9I*EI22gMMU1nm+aW0t7czwcbC)MV)|e@&>#f+2lkUDp>RrR9Ea1+p7Vm#^_7g1%>4PxxY)^6A5!2^sH5u%ZB_hgOh0Z2Lh1{cH z0GB2T;lupvjcKgMr>W!I`X0;*4Rg!wtA`PU?=PzPE>w5{E(Hay{huzN-Ub$hxPk){ zGpl#VkUw2OY$I_MFxj8LwNKv>x?XWUAH^W0^}sJFK%eZkS{DTaa;XN~)FeDNsz0KC z_v5AEN>LL~V+}(F`B8*0Ylt z%RZhvNAj$Kl}cOmphf=1^`-A!wVOlV10Xk}c`b}i(xp^7#y(`21(weFU& z5C~}1Oi%-m6cvXdtV8hzEmSfaRu7nEur)S?uFiWkc3*i^iGi5BJX?Dw_3lm$cSlja zsAlY2Yf_aqV7!NlM}eLy2$!HnsF>7dyX;r1^5)j{?^fk&?;HsK%fX*!rLjiOk4nC~ zq9Wqkr9G3WfA^Q`mwok@e^v7Z*mD0&&eqC$ya&$hBS!!M*$@v=jZBmTp=r#vY30Ty zw**!}(dB+WmhP{Hgrf`>@aU~7wt;qJZ5+&nv=*+|V;qjwqp@@Dn{f|69qE|QrjCRsovPkITja% zz?-d`N@Pej1)6I!=2f8u;d=rQDs4IGss{N#R*Sm|c7$AIh$J?g_8Pk?Fw2UHo8}F%F0}_y!7Bcv^>^yhTQ|d|g zPh|rofI!jvaI$2J+M&fz-Wy+20@|%_v_j|elz^?&0&mD7Z3YmyF=JJ`AL`*X7i9pq zK}s?4#UQnw5<1@ zHyi!l)f)5tup07{ob}Gj0{0CjqmfV;O|bFZK&TS*teT}GERJAE*U2`t7A%PEQ2woy ziM87q+0)1pr=xyqQggF-z00^z2TQc?=#cyQ(K&nWJjZiR&8L`bbKF56&u`WDu!mJ| z@*>!z&2eu|zW#Rl!dCCwP)fG(8BR@?KKq1*R5TZ^uq1Hj=QA>34ta=`3+6cinN>^yvjXB+trX<}>a z}@d?t1VHimz2rhnnw+<&6zMBJUll$;HmP4NE){$K|5 zUjckNApv{_d^#h8uOlz-AK|}`bfR{)&i^58N<&XWkI(vbTE#y?UmrSC8ip^3?Y|+$ zFNpoWA*L^gXC*qh+f$s3rN;FI7p{AC4s14omuLj79@os5aGg@K@*JHFOeLVA2=W;RBACI&_p ze4W4Kg}zMimB0y~`5$d`Vvcq$_Wxm)zqR~@{$m!UFWrs?wodkcv>AE)154mLJGz+s z6B7E85;k$QFfvgT6Z`}I%j$|IPIfMiMkY@9f0yuo%Es^~6aN%W+Qin(*&LtYPxb$0 z20Bp-YiAQjd^%C3G`f8&(Fmz6V%XNV6H&UQe)nMaR#>^83Z^b)6a1SdDuJqz(db0OWM3&HD;< zc}86Lo7!(@wY74x-nH$L2Xvb!#Kyy^Rv>P`1mMZNf^1r+g{9cT5Yt=wq{3zi$k@q1eqV+mf7VuNJ)CW;cR|e4s@j8wgvj% z7++Hz-mKC0a6}s7jNg%|4`ude4rzZtVD~ozT#EAqC#p{{)jK-dX5kq@)Khq0Jf4S@ z8}&)wH;dUL!?4Ugu1KAW%=p2a&rlRr8p-ur+FPkaL{wmQ$0*Q5M))~^B$mjtm^`9wJ+0`;jv<(9~e zSZ=p4J-QBgxD#y>hVAnHy^~;!QTuMSPxt9baI?BRP-04_>qFv5>v-pl%=;P}NkVaj zc(F(}dP5aRDiSvz*Gwx0TR)GG)ih!}G_LHA8Lyuf+Z3~9l>e<`yh>>tTU3@viR*lf znB{;?D*@$X&Do7!!swc~+9}68QB_xY^ZQOfgS*ASpikR3AO8k#uK*bJ@|bJ?s2c=U zKqNzjS3lNKZ)5$ma)+oeW%o0#Ue zm1{=2pK*6W9({6`J_L@=tI-FIX+fLg-(O{i8~TUMF4Q?p*nHfTRC390ip9V0k5)1{ zB9*`Jp&V#o@Jy>aM7fHC(kVcUH($r7KeAh>%2=$p7id;93_(#6WW#BWvL8U*S=?ay ztUVBX#=ZF*g=9*f#;#%0q#7K zO<=FF9yKU@zVsb4B&YEuVV=(`tXoLg+uV%bF${7RUPK!ti*yQk+hz6fF zK=|?A{u*Yf+CURyS>YFPAhJ6_* zyrJ`kh)UEp3YKN)N=k}KstF`fHHEbZh|=hhm%{N0JcM?_(dqV#2yQbL1R+nty(8>` zF5Njf#ml;{@jm+N@6BdIc!#8>i?rR957PV718-it%AiBI+N~)hxIYbh_a)q-eQrwC zux=?K@uaJ3t-?Y^z(phpyV}RUI}|2(2WY|G+rmKpgflS&q>@Ifiyo65Cl^JfyB%&G zO?I&E2oGno!l4FZtXDKRs8E#$IZ)-2U<0GkuU+jIb{*JMWGo3}v+g03fPo4PC18#h z6^eFXriDu>y*&nXj#5IZh+_d8y2|m&BfTgga!P{7&fuF^l6j!VSTA1Y=m?wECx9g5Eg+aFU0stZt?Kf%Ec2X`XVhBh z&xPe(8q;x>$4nKVcsuIjBw+5mipD#qxW&_t{M|0MS^Z;?A~|}Dc?d$=2?oztH91?^ z%iHW-Tb;U5TZN^zwzl>rYXhlZxq^~n3dZMFnPt=27~3_f)tbIzvB-=x07`nIpK#zD z>(7;IVu;xW4>#?NuZVqb7#~1~`7d(UWpN!728YV9opXH})S_e6wQKvn1%sAQNY4n5 zb3@%Wb8|fdPl=!$mWi;BOlEzESRo`L9b;g^5fC|k>lvz2UTdROOKHw zbBIcpL({>jPvv~?xHpHppe5~lrUTCrP9g7+?{Q6YqV8|56NmCZe(h{SLyj3J)|~`9 z+sGF;b0+zglgzeGbvEp`i%60}6Yr^1P|XaoW-nT&Q2D{v&w)8|k?QAp=hj>UHCZ*9 zx7|T-teSTgn&f>g4&f+oY>AA&54(KieLqw6pwq5au_eZN#wdp4UH7yqB1Wjz{bt6v zHwR{>_x)g_x)h-wX;>k;yr6laf~>#lBTZW1ol&H_aQ|F6(eUEd;Urwi5|MN;AVq?l zewMLO&`boUAdDJZv{6Bb%ObohS-)0YVR+51%m{;l(3b`$6#jt#`J>43f`@ARYLU`Y@R|~{71DzNk!s`?vUx)wP8HTy%8wkeU-s0v_sG+q!f0e@_$AtU(X{Bz&9CfW#b@(WEU|$;GY21iq(Ciq|QY8SHjw z9B)5>kTTL)+}E+h?dte?MqJKxoU;0)4V;z3iCe6~-?N0%;?70`?sS~9Ia zi`7>MJ-JNS`UbZjVU-vbQ0hL&a454blErCu*&HDC3;BxCe=bX{VW z%;I!r?&E@x4#!-%tM@ep@d3OZlbkXBt5+8eEWsL*D@2F3Jw$8xVaDv_wjsd8gnN3_ z!V>159+Nbka%TJhnyR13DldDlCdNd*&@sCRUDN-OQ}gGxF=QHxtSm)9ZbQj#+Xf8} zF<=#4K?%4BRd{U)cx5Z>fjE8mF;O2K1K~oHb^AkNGTm;3a1X*oQOO3eShTtmr`)i> z&EZkp>i+MexGEd4RitIu*!eh-cbddbCdZV*VfT-bj?hN9CCDJ`=~5F+Bs;|nX5U{i zVs1qTum{*hV|yy!r69Cy2pp)F-L2 z$=Y|uXCX+6(R3x*UrVT3*m*E?BQ^e&V}$8$7fO z|2pL(`Wmb?E0+q%J;p2#F7mrHHYZ*JS+hvS<@bL3%ZF&>CI+q3-bG-8F zBQ4RW53)L#jTxb)KEKgU>MUxs7ca2swJGl}rARhz869Q9 zI+E$t3?u@)yOT*;ve@fO&r1spWt(uA7mO~MJVvms335zu8LDi&MVF0PNlELk&8rFK zo|TfSy9ks=eBHj|^Pr9f+qA-vVBT5Wy;C~I@&YCeg3*-0ZpHXwKY~)OK4tSfUn4xh zs^JG0ed0|XLz{di6}(du?Y7M1Isk!KgCgV2!9a*8{Q^Yt#gWXR`hW4)bsux~qSwM~ zZssQt&!$R$q+yELAn}MP-$19UYxFet7w(6?suziGe@oAT4ufl+`|@GrB8-0g8=Y%8?>ZReZF6Nvny?;q@EpewO{SM6ZkF>A2(KVp^n&WP?HR zPegTcC)9`ME0BZ9+U1_ga(gZ9DkS2T8nNA>jiV zrJ+Z;X_W9jT;`D;ZjmAfi_eLkE&%)2+J5Tjcg)`c*$e{!EE|ot4^xWiaO982hpmb;uS?|-jVUhtss9+K-gvO##?ha4PC+nJB%m=rB82k;1YyU(_4w1He? zutjTmbzEqFdH81QD9m#5(pinYy~pzrY`-s0*^0HBhL8kU;7E;m7*z!~9yvO^czeci z=%uOegwoV@e>u)K^!Ji_o~Um5<>11<-vQKKs|)h+;J=&z&dLpwP@V(c%`;%^7JuJT zz>AJ<%_PoYY^h!e({T1Q;a=o@})TO9$CnP$234ryq;}>gdptQ;_SX7anHEvr| z(QMm1HtsQX@pwduZ0c5(Y~pBBJn4X~GC*Rw1IVHwKO`{I#L2-&tB&v_JN6E8v1fUu z5$AtotvB(Aea98T<%3#2$8X-5azkPf541f;0t#;95Ac+zeqXW)xXY|BSRoD2LHP-< zY(HN?8YR3&<^k%EA-|inV)FHbr_T!uIzuztU=kjuLsw{e0nwY?S+#pV*rJUK$VrlZ zGugl6Ix0QykJ)NBJ$j)rK1~i7fD>Pgv=r?8fP@g{-Fhw_(bJ3JejK&kZRfjNnd*nL z^A_E}>jYo%Iv48saYP^Ec7!c3NS_(L(^QvR5*tx|d}{=J3t2fIm(5;a5b+Lf-yVwUKn%PwmO#d|lE5%^n4$~(~#+md?KfnI#O zzB_fH++jXYp|-|D-I0>4mLvtP^D7uF)?Gfs!UfZ z`Jb$FZsa#PnsxSK2D?~P&Ad7kBNi{MBZ@h_I35T0Bh`8+)97Ez91c`RQ0kXJq>=@o zYAyVB3XSKSlfEP<9}!xxS|Fp%p_*rzyRYD)z(nbO?L{g~W;Xc#%HIw63I+Q5`5alDuZxNgf9PytYErT&C$j2(=ow93p2StrnL?bSy&1$URH#!FM;DDIX7(k zHpx@KTY$6Jk?4BA3i-&&% zhT#yIQg|Khj^&G`8*N6GDkUdMlB6kMRRSwXDP=qHxI=wGc+oqinlMi`bgM-((Y@Rg zmogUGpENhPbDOoZuf9J1YFrE<>4P%wS)%pZHwb2I;|B|oH|n~hOiAv*4Z!;RhRFvI zma8DnP&P{CCyie<#$8J^LYI~7@D|C#C+8?CkWS1hE6^+nQU<%nT@+Y9M)suUN#YIM zfqv(Gr+KI8X9OK0_fW@53z~q1Zcpo!M!QAT>WMZbt8uHrIR|wm;z{ty@X>3MY?4?a zc~yM4()PoerrBl9cb>|h>S8v=q9?{^oepl-C#4{vsX-~KjbIicvs|XG!}ZXH_BSW$ z46n*%RKSw$>ny3{%Ee)wnb%jl6Y}Kq_Dgppn>+R6k%nMju_4dW<0rM8bu(a+e1~vH zeH;WFfVk?78=dQNsweBE16B$E?4HgzmvC&)41;Z-v}7m%Lb01UYjB_}5}a~6zL`h% zZ(x-3NTAxcf@I*8GdZBIy|fq#KE%RI7o@eO#N#C0w~P;N4UR^(-#@>KLN+7{>WvdV zqYTJ5u&82;p}NaZjG>bLDO)yt^Intl8AMR86C# z!^YN3Ly02(3<3VzU=8zZ4R|gxM2Nn$)2lX<>27FU?4pt;YMr}e5$~GT5;v7HQ)ySl z!l5ghJ{IfZ(jIpI++mn^pHG=aw#H)+h`9x#)a3lBkh7Ces3oGsiJ}mxoW)4PZvJ!o z>Am9W5EiFUVsl4pV?8!OOEsga4WiW~RxNAQRFH9LBg{QPovR;2-0*V|gR2&giJ{WG zx0?7R#r4ER=2qagpp8$8N=>pyx)he6ywa8l0=1%vx@L@rN*vMUg{ijsb6#D?9+<)PAWTuTWLm95JpjtDdyxZJv`UFKmCY|2E?h0iTf| z@+tHMOzp3-LwT`H7uLh%p;W7My)}|%^+6WqBpRyO?nV`c~JXKRveuQ^-J`4>- z9=Rfii@Jcd>J|out1u{o_$(Z`isPUUbLc?IJpf!Mea*>St(qWU@r^vc1eYREQ4K+8SXX* zmdBK2ub^zCB+eW^B1~3RZTc_{=i;ix8SGIPoszj_7E0(=zDWCDQQ$HBwztHAx8I2ap=?2R;+g~PcP0^N1+$?<0>$3n z;c8<1Y7pS1l=bp@wGjrz*9D{cO3UyrG;B|uR`n(-~-Ej(RXUu z2)SWfai|EmKg0xEUR2?;?WMrwIym}RMs9@>b|k*@1zLsRYd`jbZ}}4SCB&_-lLTHp z#ldGgQh_gTA@;$riMdnWY~T~VB?tt9Xo1@bx9oZO^~JzGHxR_KebDdE+XZ@q*74~C zbexC~&W9UgIy2BiMwur0+$;0b@mP+w(B0ju)hW9;$-w#gGg=;ok+G2E`u* zmdhuEX2#|Dnl_RKwZ{g4z4Saj;tKYwHv=H?e&h-bz#$2p&5#=?mjTH98Yc^qKPSc^ z>S>+Xf`#<%eZK~P-FdSC{SbdpY7A`Vh^(ZnbRWH@5X`hN9&OYCJxbOPev{z(hrHEk z#C}ffXdVrj{(dZ~dmMIBu$flGVWcg7z}~)xmO`zmb9^@s%2^i z{Cv}j+-4a)s?o$?YPx3z2Iq*aJHQ?ix<#tk<&Oh&HhphkA|~~XEfTL^MT#=Vy`=uGz#E+a};$dq0GOJGS49mgtWLE9gbqGU;CXp-t&X z3}t56r=O{`&V~uYol+R zW+su`$82H#gmvbCs`-Q!IGGrC<8s15%f$Ggm#g8OVEC05e~)EWCxm$@n6E2v)WF5c zC1$9WUogRkxaUxpa~_CXS3l0R$3 z$AlY;blQN(DHA&p6At$PBYW3B22PCc43*8uI~DtQDV&7513y8sj-JDvc*$Abp3yKY zj#Rk2n_8X-HN_IP&#FS&Ouu*uM=*0-T5x8u%^L`GKCPP-Zj(y%48h07Jh08#T}PbkZucIXdzQwD zOsd1l%DlnsrMVezxzaQH_45qpY1H<0?xGL_*VT*r5HqOCA{`sSjQt8+3kr=jcH=6T zA5Jthtq`?{aVv@rRmnpc&TQeEG`reSf9*7a5zHwqQ*|CLBz!u-YhhrZxRCyB@{5I~ z_XKKALKdm#sB&@bfFDrem>ci^n`ZrsX!{q>%F4k^{}18F@P`onf0J_mW<>vwq}+c} za60kRwm;~hhps#z@!Ewzh;d331DRdWU|$Prc>sum38LUZJhv~Qe06suoUjr|U zQx01l=0R7z)TJY^pcCo=mk%(Z1!MO1g$a6PP202P)+e&iG?1HL+jcfu3=lMh9uN}F zP+i%%SBr+h00CCDYS2m9`gYFdZi*jH-{Gc?Sw}>4ehd<1*s; z!9tHu!_5B0b~7`xe37t>4FBSmC7cbcEsO+g&8$uE>HkV5;AHfNon~YEJNPGWf5J43 zj2wT(3mMppn^>5ce-YSUr}+y~ayGG1#b^IJ!JmNmKY>4``=W$R7{3(%#S#Axk^G;R z?EjeJ@AJ7BI{!tRD}Pbdf8zc^1r3}`{_+O+znI0s(aBlJ+`#dl@=F{1E6l*~ch3LY z)c6el_79*FvHc>dEo{y3>C`N21#F!x{sI0{tY%^CZ0__ga{doN|GzgTrawG6Jw6Ky z>%YJMg#VWQ6Z5~*{ofEawm%op|JU}|eS2N9OPN zzw`S?{*Ml}FPXnw4Zd6k>{M(m{;>A=e?3za|HG?+;g9pgKNs)6n19AU$^U;c|13<5 z^#8^DZ?;3YD=%*HeefJr)tj0!zWOqyrAa>o0SkV^5bDDadES>39U+tdrTnL7eLv(sgT1yeKd6)&{>2mXV~#2~CqvV6#e(aKbI zyZ&g_u-2rkbye;Cxi3dgPuvPDtv0vS4#arAtMxR9 z{&!$x%UbS!91%+p^khE?4+!`O#2!OL83;e7)I`>$G$-|8#h& zVRIGJ<3aVf7{%#tCZC+y$&VRx*Gcg91bjg#Zxi5Lh>FRr{)eWh*8*ob4eZ!xn3 z)yPs9nP_2&AUq0hF3T2%Coo*GTY7=Gc15_fjq9C?Th>P-Q75%3pp6cEYc!)mbHxH)YjDt0DmnS9MAIb*rR2>i)8Xq*_=_*ST!o84oFYW#w;>CrJ%rV zqUHtAHdMEp7wt*42#1g0=qGNe83ZIk5Y!MgV-v>j4@est6$6)Y58K}fNiCCE^zb<0 zz8ap9PVc=0M~RnD?pd#RsGAG-Hxad-bwo;pxXY5m#`!t;*u~!V)awFu<>vDA`8tw; z7IyG8^sVZ46XWqpyT)a`bx~@IS7MBp$d)k`=v(vxnsUDkAer=AX`Z~-gg9a$DX!^7 z5^OM=<)m#$|0FywC~E=D4+#3ilg4)KOI-`ut+9m3B(m_bgvFl@_w}c|Kl0PlPlJtJ zVkkVi3fb!?v`wMXDq)ipGXyOPH?S$`);;v6vqLKfwwpnNMXs`Ljte%BpD*r5Uj))P z1(z)c@TT*~mdoF2zcn|N#h_8`>h36^h8<#5f}ZR`L_t6Yl&{jrRI7}Z+Oo%0@WzpX zP?TC6E0ls$I9ITT;;}x?ac#^l+uMF4|1puXO4#GE8`QW@oJS9KIM+IX?Thk?-wfoc z=l~p9czbO z-*aR77K-|bG};V9kbUeo^l$8P6cl-`V}tw(+d<#C-gfOhT6U~>JfB48(g7~OFgIl_ z%CJ>Mi&A7v$Xn^XDK_vELc57TlWY1Y4fNok)S#nQJDF(iMgR77K06Z<-)!k@=aQZq^mZ|?9M`z((KUtk!}9nGDB)H9^-L^xiWyXL{Wv=YuX z7hX*IXuIKpROKC25(g-S!5b(nY|yzuay{r*Q~LB13^+oIArK|Q2~UtlP|O>%)OPS@ z9*jow!+Rs_K3ZT40z0!B1)@h1GzaQno8}`OEa>+^zW^&Dh*caM9(wOLywo$5_9Nx(qJ)^fi(orRXqSH@unc zz5ziTJBnU)nvsbKo`-5x<=CGco8@q=YBS`Y&h}mFB3(k=ke4PAxj}c^edpo;E3eO5duZAn|=;+XXfL`Fh$4`tKEiVuiG9VZ;eQ61WaQ}1LI zy;-lc9*D>n0r;SfHsUdyZq#f6jX?sY=zOckBU0 zw_kXgZj5;)Sub>;V#1eRtNc`!mZ+Kt*K;prDoQC5TG6ph2AIEXB1EHF7(kRJG!e=& zO@qs*<(iYvh!Ik9$9zhRHKu={)V>o6nRgl<+4<=yP{}a@+Ya;8P%!fQn!r%nv!BuLD_IBNu!Ow78TzFYXZO#3;+b;A?w zYw5L|>brj2BL_(5biNY=ZAz3V(*~~0!l9#=@{aDtTa>BYlW2K4brKvbYyS8GzFMk9 zAUJG=189Xsuj<<70p)D9)}fgYR>_giF$+{ode>#;UBtDku}jcfTk_1 zxM7S4{rslD@%4frdZ+FQCdYSSiekRD}NbzeV|UAFnLJBRh^kez^Yj1O^icdsAq0e{NBr5 z(D)g`745kQCbd@t6h#!75XH5kgG)=TX%RdPoIg!wY*{*;w+G3D;z@n!M|f;{3 z4~7LdhvQ(3sKV{toKa)#WwMf@b`6O}fg%UC6e{}G9;h;y-4SWkT7IS?t}BW8m_GZ} z59Yg6hX~k8&Blx?4gmoylpuy6^>a!2N&W@oM0&k-PAV%4eTPd z6mr4%R4L!blDXP$9XTu4Tuy{jxlx`Mzr7-{F^JG-Znvh~v)|N2sMp*WpTO6kCo%%c z?i7>hVO6O+vnE)b_B{@oD_+5IZ*_|7r*hWwWH5x)e(?w4=W;R)v<<#lN{kj7cH8|_ z-JHFE@3Rb;UflOj6RXLK7@6)yW_9gE6_%rcAhu=hJG~0o)s(e`_6a~&XkUlaQYNn>(WMeuAx-jdb?#;HV3Z7N@=@2 zbwz$6)(zfK^jLl*1mXZL@*P;iNwZ$wm_>>>ebHoK#pGFh(MH6uKo-pn1&F6FbJwdW zx+<{hGa9P#G+M+%Rk8MfFSO-u^qH}iG8q?6!b zzr51)AKTJ0-d(TWo;nTD@aS?~y~B00lf?coeoNdPO|Yw&7M&)ba$AUD`?S7DY!#9e zi;RGqb}@Mgzd6J6dYX9EI^mn=C7S=y6%NJo^+byQ@kWtd*O3&Xsr5|q&1_Mre12aE zxj?Dd1g)p+ zMAJw(kCEFn4{Z*pv_y{IKV}4=LU|FOWr`aJ=ibUx4yGsUHM@<(#svOMrsW0|Y zYO17THKhW}-ig*@xA;A{kL*B!E9m7#zl^yo3c55dQw}(~nYM>`8vdHam=&lZ5c)34 zN`Qw=h_yp`Z_n$Izx9iNj6jQkjzYAvrnp9o0nYqPWok^Im=`LPN}7_9*#3nFapi|< zSgs6~IEno$He#(rH1qOZn2+X0M!kvyUVtg}kKATsA{3x`ORQ@so#2HRnGN_T;rX3@ zzi|Jwffo0TNg1r7)*`5%Dbj?SLN+h2S1%Gtg`1=Ad#wePZtQ)Y-5hLubD37l&~KAG zSkbt@7Cv4Q-xSvI8a+G;dbOBCHYg9dpls8bS>5KSv_zvfGB@@o4O5dmyI7I&I6jNv zY~6ViGSwc8L$wFJqrDLQzAb=(?ZKcdeN6=*Q?OF#A>Tb-Ki^E%#&Z=bhK7dWr8?m* zm=RP{?>%uer|G>GDVSFid&?N~&=-JyM7xAl5S$lRvaF))9n{-ClaPFHtC!y0+xb(> z#bBQQD8zBYH;aSIIy~?#4t&3bf$1y~(HQ+cxQ32OFh3i8DAqFq__xfyJBHmLVsc7a z)_-?w4;vN^o*g~p(Z=XG4DFHg$7 z-I)(ZqBQVFwJNU)^`FdhQjs|h_0F+;`HIW5+IFF-L|JyKJn-P@R6~CCx zZR4ttWnIV?{mJOr5-Hf+v>isbtJjT!r?J3EYO$W0>QoPDB#C+?NrV0m>=rs+^KgT3 z58f=hRJ*PS+N3~*;5gG$Bp?iH{CPNdly}&&TQQNQ0VcWv;{B<`l|BwvHEK2i+h25z zx;V7>Awn{W_YCnqA0&*8gC~c=YN;{cvaB)owhGq>p<{KxHWE2(e%HMyDx#2-LqJJ^ zJUT<*JPudC@irB_a^8?vz3jC|`;Ah@-QMD9Nt^}V*3|p+1(?!R$M8s(nf8Q$@O%pw zsMJV{C-7WvmwNs8Noa4wuu^yzl#wUP%~u;A9?<4Lm@)FR*#>q;!XlIV--($)BO?x6 z^#=WXWOZNs3|!or9czkSTq;Z9R_SkAFy3nDbz5{+{2gc#NKBt7z_$6vjh0?~II~zN z+kRXMDiMVFucClg#YeL~)(<`Nf_ATgxoVzwEKO+<4df3_kg^jJEA7Sb=YUm&`}L8d z)+d!|&ZCZXox@Qb(O2TAOgCqK9I2UIwN*7Za%H_A7x1;d${P@J&Kwr$(iss7gf_FDVywa*!6+<)%4BXf=skuh^-#Ei(u zeBb$dp4r7L9qU2g9m`cN2veT&_1~fj4zB%|#R;zpEf~I!GCnOgH+Hp0pcM(TY!%U* z>`>O4S>S}hp#xlPBvnZ8yinK`N(f@2k;uNhf8p3HdM)>OTVR7ymRps5k&hFzfGP{} zK_%r6$`C4h9?{P38W4#67L^@`Sx6S89Vv6&dh=hwl!vIlg&PyByX3q-R`+t6f2Mez zk)eeUw2XKcOpNRf<2%WXkF@L;wD+CF+YCwRS0n>$OTR!XIf5bT|Hc{<3AxslpQM#2 zX^(^^**8`3DB~T?y|8&+HX&J$OP39x>wd_5J_KO>f#k6@)6E4YS1i5KWGm&>>ly0Y z=VyO3_p}vwU!U}yQKXz|)?|D;h4C`~1bCtZbR&149?S_!ws^vZd~V>5vnk_uqEI6n zU7ePX^qei;_cE&S6fgLAUVR}91^+C+lVxCc-2-}zJ=)GsGpFr~b!KM$i5EFClvr3) z61yGWw_6)<%bz5FXC@4aOq<}6$7g1@4_>t_tey?di636@Kfn7YU-?FepfkdEhg z?T7USU2;<3LhFjLGZ{jA5OTH^Aw#PwS-i9_MbN;eD&DuNpU$NS27@w9kEc)`_7`s2 z>sFX68pFjE$VK*8)fT{�n8Z=Z_Wnp(uvlCjcJo&J0&Q?$dof^tY^rJjJvvIt^VG zZ57JtaZ8Kt+2xFw#Z;`*cG2b}nmix2rQ^Q8mHyQ7meD1?H~YxlnFZ|ju3Ukol8#83 zoSm$rp4~Jt5Yxn}bgXpI&=9!GkRhdEFnxlQuM~HS$evfPB&k@<&VvjXHI;*3_qGty zOHFUYl;}sK^2!b0(^Z~l4Rg0R7nemML%Wolxh2^bZ<%Sp{M0W*c-9Kl8VrSq z?>$REC~#Es|Dl^F$Wmb*LX4H~M={r8Ar|8k8_@E$raC}(nhQ|8LU8tLGUg4 z_pM797dEpPwEMW|h8Ys0>(9yZQO22)*{n*Da^n74M(w<_%X-N&4Mw#G4TtJ=;7qPw z(QYB4z&ayQ?EwgS*v?BUQtOP`SyOE%76p?y-pv6+)Te5|k-woo)2{ObqOIV51S*itft0JL# z9`m{N9_0&3g*h^bGt>0w1qP;MxXp5!#v(O_&i;h!r|k_>@iDPty^+u^>a(BmppDjD zV^Iic6uzmVs|8ca^M(C$6dztv+l!L~T$KR0J388=DzU&K8Kifm?3_|ZHV|Kos>Pb9 z3gy=@nmi5~t(GM6!Y2i8Dzea0TlVm&S4PX>j6J4&zj2e*+0iYAzUYaU4c3hUYT#DX zll&K&r6GZV2WbZvJHG)eKuc>{!^&l(so%9I%XDT6{K}s^d^TCHZq>U*JwS>H*2Y4B z3B};eY-hAX8cbtQCcQ1~qOP^$ViJO6JmGEe(OYgMs2KJ9BK?-sWvtBlh*MSECjec4 zzhMWjp?Eo+j}lA2>qkS9xUHTwDG!zIDFCoMK)JTvL-^i*1jgLNbFyoCqpmG{^cy^+l3zNlr)pz-4Y`uwx<+^7*^6#i^BoF&V1nRm;QGwn+s zO?SfF{&k?1jb}d%O-$@1Ow&TxnTZ4Sc0Om-KHvB^gp<8UeMm+RhZ!5ibw!fxhoy$$ zhB%+am@CFUDNRq6@h0QCQSiX_$sT*T#Xps0A`&^q^VIabRPJXemi83BYgfNXUX?$^ ztXRWwy0ByTxm*QM6VXH^bMz{jmevfkVzAn0SZADNU~?H1uQMYKEQzw~HvDp0qr%qd zw+=Zs25*|}F*&r8&FGW$Z8~C;QFMiOp&j@?p?6dhSMLEv?;rc$lTe z(RJ)47ScSYvR6@BRi!$yg95%}Sm(Fi*}Y@O&LNnHhn!XZl_DLLD+vlEQGm5Vqxhhw z*u|ifpI4w!^NuY;XHSGCHVHH+P>Or~QXMTn7!x1Rjj$x4rZwk@x(!`sQnX2GOZ_}w0=~y` zlb-aGJQ%b?s&Qho)#Zd~EPX@iW^-X!58<3MzDIdSb2V13OZ9#-`e}?*5-j4kNLVjg zLJP+lM_pw0&xsJy$Ix}}dzhU1QOjy7~zM}_fmW%R0bQgdKpreh&jXk%+#2p#Di%S6>%%sjlXN{xXUjZzk-Au~M0{Hpk{xa$DOR#=dm~bT%@O7t z*m_|n4>JQoJU8Qrv;P(t%wcye=r7%S<#mFx&1F+?a!_JVTQ)%^H$CY=mW%%00sIKJ zD_DfJFCMV5S$VzU_a>eS9c9eO2YwLG@uny%#GV~P(dBR15O|0lJtZj&1k$NEXWjtB zrfhebHoY}--1g%0gKP70g}9t*KC)o4Ic`^thOd;`3tu41geaUAkN;BEnMo+2+`_{a z%gu`hcy)oS#abLCh)~~eDU?lic5$8qJ_iDS75S;x8Af73u#jz-z!e>ZFTv( zEi?-?KfpT!KTLiIgs{TGY)*Um*KFuCxosPSXLIfwGsOQJ(u2BVww%t~)xR-iBg9gAW zHaxs_0FSoR6(rkpI!n<;UYr%;JQ1Gs5V*cS<-_W#g0knT=De}9AQt;1aXr+!M~TNWWybs8s|8Q81I_fY-he(NFNoGl zTS^z^(&h$-_+iFye*;ywf0PYH+jrp1H0#MSbTIw5GOo zFy)T%O3D{W&p^>H;~^DCOSq_C6V!B~3`` za#5;PTr2xoa0s|5Nc)Cd6K4j8z;3kCrK*dgeo%BIcn?Gx*%&4>beY(iwKcP>nd*}H zq;bY`Cb?rhuYj6HB_l9c>4ryt0?Jd=|=U6ye1ENFdHr_3rkT*7FiX%Rh+YnJJT0WCv{di1!l z^$DGx0uORdh?sWu5)BG%w~cY}R-3(FYv1MPDUKo9UCj6*<73!OHwy@3vCFF(yt*bQxFNeD5n2=^6wFUa!m$&X~w8aiKSz!d#0@btMg#p(=gAs?S;b3ebokcY{ zm&MKZhJXrj(t~kktB%Z%p$!+W$}f+h8%vr%t2>#ZT_!#jvaav4u0OcKDAZx*L7#hG z@@vIblP9wuC5CYsEYISTAy1QmbN@8pc&CVXqOc$shYK4ES|7UPqDnW ztU^C4*xsHsZGaPlz{O0nX(X?-u&iM*RfI1tq{_hL8Xn;#M8-T^EF8{4DN}3JJOJln z$y=FPdw8aSpp~{da~NE|&$Don$)fN4HHzX=8s+~cG~rQBto@$nZwXbUFhV)(X50F< z`+oev7IQrJD(e}zpBnZK0KYGjryy=-W*7Vt50A(tK5Po(|9}y2#rnpKpnbqyV5Uwc zl5NnNrR_RbKhY?WGMuWFLRw|wt&=jaueva$xElD_RG$I1YkB3ZM85PvvV|J#{^9O4 zS>K7vYxRPdSXMjz-tNDfa#~4AKXRIx*D~_axbWB@H1R^kSyRdXb85}voEnFzQ{e=f z)c}0p`?C>ZF2-haOl*S;WV~jYFXtvf{oUBOl0CbgL4%vqleZP}o{?BpU_L(yV@Fv3OdD%AtjA zFUG;+IK5sLAes1%O#icyU0U3A6cQ%a>Irw&bt~x_sPU%JE*4kJ_5cgZwhqaAqG5|? zc3sSYVnGWr8kNbh2I)37yNHs9M=MG^XG}wr#|jFDR1*?N=Q_gWskkpEAYnSb_3nIL zW9*&+Ly90`{Ct5vCxFHaqZmo<+bcp8=;IL{*A1oj zXD8nFv>G8dSSd~=A@{>(pj{uFfa@BZ;M2;bs4Mr3XQlsD;3rQYnQqWk!KK(!D-}W~ zZfS?C$W!pw9whic^hSN{LD5%TsF}3_d`~03UVAw*?J&F5CV(Ixu01v#P`BGhA>Mn* zAzRU#;-E@4;dC?d*vXeqgqvkG{;KTeEirQs+xc;fc|Cs( zpxS>PCoY>QA_r10QkPi zi%|6l$o4>0oGz^z5D%=atE*10*IJB)D20*QDY6zg;e^_aDHSd(#31+udH(@A!2%s%R-vPcg(82==aLEI}OFZm@Q)DB3 z2Bw-)#gAWsyBE$|^*R-n##HH}?%ZbzeQ^ z>~8AP#|o`<$dHgu1v;N}vR_7I^yyN!ld4*G={)F$G<@glarf(lTr@ly`j*ko38U`; zCe5;BwqF`NJ{^DR8YmG#2=^~OXUkmB5a%92Y3o#U7BXYClrH8g#^DfpsjD;yMrIE9 zCnE`gt=V`G5*@$YX^@D1y0@ipGmz-#Y}mIoHnJ)2Roy?2cVO{&-SKPi8yV>9gmLiN7z7@FfKuAO1vk^mGl)YazD|IL=R?Nnw{^3z z#%kT1@;AzL(1a!g?;iLrHu2JGA&NjfsUn^em1JK!zDKK! zBn%a}Yr_E9(8l|5RmU|z`JB2_w{Q~oyCsG^p(1)z-jW<5cSU{E0=p%((0Eec>4(aK zgG%;eHJ|Lx=~^h|FUO{8NFs)c0#BLufX!R|m%2UJG1K|7&&S3tr|q}p@5UHqIYFg` zw|T0OcdJF<0j~#iXWuf2XlBjER7Nc7IMISl=ba|t=0P7DCO)FKmq+X@OKkAQs=BJ| zH_x6bTB{aZ%Q2NNb9CF9pUYe-FTTtwS1wa4RMV_}-BcZqZ!)Y^K+CCZ%vZFRYq%}m zJ^i@X8R0xVlqu`*f^;CmWM$UnNZ=HcNu623$XrlP!CytObOG=F1T6zO#Qg6F>0fBw ze;}kB931R_Go)YW=6}cV{?LB^GlutHSYIUpn_YV7_EQv2XSkrOzJnOSL^@nkk{)>r`w9h*mdFZoHfNm4m{u>!EU-;!G&L1IsWga9){Z zt43BC`*+uwPuB~y*}0wF^V*x|*umu=S=PFzqobNO4;N@{G}Uwe+OLGSXKXSyCr1kr(w_`NJ(s-iV&Wws~CX+JP@A zowfQ|l)XXtBzd25xtTl6FWmcC<}~k|R?yfX9wI$aBRM)IFnj~Hz_-AAAlX%bQluC(c_XFd=gB zatpiLkm&C3{^suC;G}dgdHFR3TItNDPom%4$-lW4{+!?cxE7edpxeKFrv7QK^|#T~ ze`Q?%!dL&i^bed^T2@j-K2|L<|){~7%K8`=H41}iHo{-5#(;r&zoTK}>%`v*Y$ckMsW?;i;GAFuzZ z^AG6vKWqQTJO9xt>tB{=e}BTiK+Rt`@!uHn->C7Q^*@O5pYp%QjsM#EAAs_o<$vJG zf0q7~|Ars`b({NF{Fw3I7>|8fr2X&idwuRW#)g01RR zD&DDY@VB7Hrp&Q~4*3ii_^QNiib9U3t)cAd615S=v*{j|@60g=1IcmN>t}k4hTkJL z#2Nd+f0<0H-% zC5obsLckNG8wXN1y(|>xj#6?g9@I3N4a?LHaoERuyS_Z6(0<;hy)h(6YISbJkHqedD)4_p$rG&FRO)GX3K=OSfgVwgZ@v#Fp@#_%BFm8j3I zt8z|1e+b%4)T_*Pa+mCx_fNf@qxk`@og-lI^$>WT_wW7ax<`93x|nO`GL_C@C1BWQ zO(excEFu&CHFr~VxO`JYhF&}<>5~lAW<*9(L@J^Zo_8@-r8D+qC_%MK0Z8vO*#Sv|PrWaW>m4Y+QHJG;eN1_z5w9>7#mW-GwME%Z@o2j$#@ z5L(1B9?QP~TVIML?hLO7oH1W)fH)Qyvc*1@UxG7LjVs?aqzNgtjsIijttIJ_Y*#$B$W$oSsWGzJ5|ucQj6BVF9;r}geRX33ZxDPv)mMytOw-ap zMrN96S<+;V;cf}m#xB2N>hON0G;?tGT^`b5S`EN~eFtlVZ7)42N1L-P-I38ROt9}2 zR0s85vHrFO+f|^0o$s6~d(PYrRDF7mBpu}alq?Sr*=L*?yg!G!Ls&5=>IvjgnlWA(&og%jqUXzOa?SgaO^f!Usoi?0OM}Q!1)i(YNhc` z=srAHGKGiPE!+|jw1sXP&ZzgJ5PTIi9A0UTM*d*UaT~)!CZ$qL*=}IvN)LS^D-*SD z?|YpG{I@Jh6PW(*A$<0-HCJ85vu^N3iYV_>&NHQapp&y6(-Q1}OW?^Tmsv@CfXC5e z6=RWi!;KO%!sX-z8j4Es31eYMh&zLW{R5F<(czKw7%<#}j1bE6N zy%Et4Q;ocH>Q&ux{qTmqR;7}GUq1j#A^$1&V^qW%Mxbd@WZNAZM8H_K@xj2JKM_?u z*zF?<#uSqot|^ncWz8XeZ^pV}{Jc7W3e{t+3b}kzw+)KexOn}DM*SU(}AJ4jNFd^zqc`Hi+38YNpko=5`C zq1Iz8X3Jo?X2H)GLsa{%5!52xXJJtZV|pl zfas`3bV_lOs%u5<5lIlx!lg>7W|I)UK{Cd9c=#0>3R86^RJckxlgD6_1oS-Z# zMQz3J^<)}Ug)PEL)!(`3)TQ6TMGS#akj!Sq7(x6uC<679LhSrW>ht?D7=MGcZ!9C5 zg`3P5prqka)MHBc0$FhiGd&9$E#h) z7ctvdF~faXk2_3^6PmiSOQQ7W!f)u)Q%k6}(4k91e!o;#SB0-qV+TXIlZ!(2g;%NR z5M*nRT0q8eEH^H!Z^tZZQj*XsCkMT;iN1>5hS(HXo|r<&c8h?|X2A?Ji-FpH!y?k= z=Qy;4*nFNP;5Gy44Pp~pV!+;RNvsqSTl!Ox4Kq;Zr{I#8QD6kQSyS-UTMq2@4gy5V z8um759|CQm72464(wZ=ER4m}CSAn4YXaGV@ejEY{sz0K*B`JuRn1+P%VxOp4g|nktJ{v7tOn(j&z~d zO9{7Z=n>I`tXX`oBT8_7q=-@iayM-q?8+Lmm>g7i)i;vr< z@(2QxU5k*1aBai3Zt6PbQ~HUtlA6fR3b`zEiGiGS&@xZ$N5z-bQModEhHvL+N`^v( z-GrV!w3wO?ni+skD+yCG@35-N)h8X<6WWAw@y`XU3T6&ZN1PI1pt0w(8%TJ@>qkc- zPEeR1c?-Huz6~=-`!m=9CI}kg8`==_2FVHHKs<@nY=gD>nr&rQjj{O0NQ37Fm1Kp^ zd;A8@tGDQd90S7&VK!qduy<8{;${>+_)5Als-GmA{d}Z$1yeX&@12vx37SyV}uG^?(z$w&AT}$UE49R4w z8N@wW+?)8LKaluPeI&4AjV(|DbzP<)msPAH_WLr$7^zZve->}X5jyVgj@Td%p+-3UHtKqs&|4u_k zO5H)Z-?gb6+C@1#i=JjTjK=&ik-L>wRdW(6w8b1f3&Rk(z_i^IAb=_ue{ll{Z~Qg-}1u$3k`E@&-Xrh=-^9lD4bOx`xzkvc%Ywcdo?!HtHA7ynHZ?c zm_68C3Tj=8RW_CRXUX;aI(u$f} z-dRktIL{^NV0R&*jt3~PleDm|$^f~WO9bGU+gDEKmum0vGjOuv7?kskTT`Qs)uiiV zfw|v2Pcn}Ps>ymjuyZU0*;86N#cHRwGb2SmZDqNAb z(V`s}3!beE*x-4A)P1Wnrd%aAXhiqB`c;EGE1L8HI^k;1`ER=NUsT47U$)AB_vF8i zh5s3={%835kFVRk zvj3;j_}_NTSA8Wn$1j<)gpH}~pI-Rm^Q~xNX7S}|{iVqk_;N%y`Ad)eC;pUkFg9`c zBP}MEF#gg}Tl{eQ&rM2Bc6L@K)_>I1e@Ummk{SOlukcTqvKqb?{g(`x^^ctQPt2_I zuj<@?p9}h{#eXJ1z7FvpD((NnA^xp@#;5yxuW7{pYU&?yaASinS@&0${Sieo{*{UO zhg11K)x(T`zRmx7CYb(2{QnR2Fw;LR(EpFV;mqt`vi5&XWS)Dtcq*&BJUZIsY`jXF zk|tOj2QecK!OxNlfcSyH1R|#A`@(|&2Ke&}Q;Q?0_lu%n2qr>?)+--*Da?Pap$wVul%=GnNITGp@iv$c7kQ)V< z*^8gdAeYm_UBq3)TvW?s2eAo+o?s6lX2>u;PBrD`BmkW>wzBlxRU_uzN;xq1=?UPW zARo^z<5EZG52Rg#AFo$Yr4plZsqf68-lbo_O#3x@ie?+DL>u8h&T4Gg$Jw!739({L zagnsqlC%&RxqW!j7Gl{&SAEIhflAp*btR|v1rLvQd^h-Q<216zAF6@?kcLE5qW~Do z6$mgq)ZJw=nk*kp`O{)Ayl8OBCc5Q%(vW9o7UiH34 z4~BFDyHNqpPF?ew=TuT?kOwDgr{VhjhBGpl ziLl(coO6yMx^X}RWY5<7Le7rDdWmAX@r#KI($o`bi2^~9{vu_3Rz8Xu*Pis9EB|Gq zJ49PbWF_62HfmkN8$%F`(9A~cU1IkF3YcpuT1@^q;V&YHDK3A9IFozu6)fK0Gh(@b zDI6ayLs&h)FEJwBCK*6Jp93Ww|KJ1JSQDu-iH99EFD<-+~X;KCSpHz}RFh8YiDlahVm^g2*4q8NiuDS~Fr7~fW=WrOj~Yf-5RDXEk`1QJE|iN+IYx?x3yLwm z{PIThvVLAEX3yiwE3QIQw@o*#TTW6Pxo%%Rb+~az(bzs@`{DrMIQi@tz3T=pjjbI> zs+GW5s_-r0icD?=GHBpE7uz~YU7E~9z)rlIik0=kt(3wgWWVBVda~ZBs0PH_Io}uq zi)2H{QM(IY+44oqdQqA_iucm!dH~mM6nqNWv>-U&-U3+oq!qJALzIX({UmVy!hUh% zN@81yx1{X2&d4zfe-0TL{Q*Y{RyU>4q3`{m-~HSBw;|^(@_a%3cb4}d=bybL;&eSe zv>rO69`30yO{|@mX-nZTSe6sf>(s)vNdv$%I))?CRtrj0-H95(HmjJ%Qrr@pc zp+d@=n`06z$hsGMHq=20GOaR= za?{H};rQ+3H!Hd2G>cpWMb?O6R^Ro#8urQ}Y9nXypQ!{OZzA3!Ic4!o7+|NPvMGLM z+RGVC$Qp80b(}J+VA;=djm|!^iL?Q51^C;?NDyhx36*yLh%#+B)#RUFiy%<|74Of5K7^nF z&>u$r-Bm9hN7@y6U3d?Zh*1(>yc6Y3g{#;K6TW?aV?N-(Ywdm#t192Q&d(1{CQAVa zvvaF|1Ow0OAHxuK7U<(M^qimdLX$3xDm zKI#SGxCuM0ph8UzRV4E*1)32?Y}ABYDmJH=8-`V&ag~drv~=V&<~|WmDjY5m7v+9E ze(x%**63N_jp3NDYZBK@Cm!4+EC!v92|JPemzAAffqp`bz-#QYglTb&PTMFpk}MP+ zym3x9ZCzSP?!ZMXs0?cxk*G0vyJH4z+3?E+uNS@oH4?Qnzd`Kw z@vH)1uNM7a89f;rB`|+II;1Hrzc~w9EIB`IEWQk#ARU1j@w@8r0O0l z*WF$)OiY)Y;>6(Ry~G>$^k-6r81pJyq|cS-V0PWz@zdt+;SSGrvBZFzGByHh7|D9n z%_NvJI^HnXP}UZCFq4CT5fxjES(N06`FyK7E_=D4&EdJTe6Wc#*>Gd9wZ3C+*&eJm zNUNGBiHlY=mS`|ZemkN{a$ffj0fy%vGqm#AC6LKOH#~jLa(rBbx4Bd<7R1~I#G}&^ z&h#7^12LY)XGT1W@-cFhIr)rgs1s?^x1_YF!!VHgHWKyt{mhfGn7Qiw&Oz9})zpqy z43O&UL*G?*{d{~&L2M0K=NPl3F_3>(9`E_D^9yr(-LQ*`82E-(w@e5l)k^&9&jw^(V>*`yY9hKc;3k`!%%I!=9IcbEaih<%7$K` zthmE=*WPc$e)8JH8fX^zrT}3zgg%B&1bL`2bmVKgyj&k68(rmaW&Xeyo=k|j5v(+B zoF7cvaB*d1Ha?vLT{hPdYGwnQhLqqhRhn+RpZ5#1TG56NKd493-W~UEzf{UV~$6+`zBFmz-ozX8t0ih2sgmMB|kI`3-8-Juc z4#X{>=X4Q5#=j$ZJhrW)5ew?l=DEriH>ARJS|K7ArZ+YZ@kf0M$)2-3pQ7^0BhfNY zrH{bYUG{IbU+z8~Udw%6>%V2xN!fbZ9WIqi995r&>S@Bg082x?f{O>8$8C#9!!RXx z^f)Pv?jCwJv*%B8gf^b7Rk-FIk-l(>lwQJOq@e;EYFY;*_o5H=x? z7!k7=s;yV4w%xt6Kr0<_Y%3l=A-;~w??_bMlQKM4y`qO={sP}-_mCA1B0evgNm|B` zsvpd2BBWcS)Lc_#i&FsP1Ql$iZwhfD!?q>6we-}$Ts{!xT>e@6~B(e zjL*&tq#8S!8c7~B>(BE-5@*?D&AYTvPiS^ZeR7&D2DWDwm1>`P4et)24eXs_RbkZGN{}id}_(Pb)SDrer?R9~PQ)&&)J+0Kb;m7g|G; zbSbjP$BoM7l;`5o*~bAA59_X9gwvXyAFTjh3W~wPExO8!xJ`6#XFLF?W&7GBWM@}m zdIb)G6XVl0Hnpp(&}6uU;~K6@7w=P96ZlJr7jwf1Kt*WM-d)ZSB~nvDlb#DN>|9Y7 zr68?D?&aOGzF#*?F|hO4N==IrqBysGHw)$lu~_j9%P8>2QXj1};n6qKSB2aq|2%XB zog$k0!>OrbovuP{=JSMLnfOwV!U_;Zs4S^OF?h%IVc>#$N7xCaU ztYkI`Vo_atii6E<^>_ITgORMIFRytPJ8J1uSE^X`fcc9S_3bcH)Kj{GYg7>=clD$@1q;fFh+fMwJT~;0n z-*&H7`4HaQWKCV~0)|~KG8@jPnaa`HT{4k9Ma~Mk%)h1X1dzNFYw}i$+I(lLti7n2 z;WpcrymNX1duR3r?C{kyS_8pamMMxlh)T|?nXRY{$Scwur6Mf~_ev{Ntz9+XTJE{1 zudyIl_+Fbj&B{c9f|-(w3PVx{j1dT0J84*Zp|oKs>T#@d$*i!t0^e4*kUgXLRwp5C zAOjStYS&3KsHvcUU!EYkwjvgjN2VPsMEHWnh22^Pg);+h%YWv z;QNyzJ05yQa5{~G5?4H20x-|wGORl*fwHO58YWQ5VW#1kL(@5zllRhThg5o^{^|X? ziw`GfWf)Sfg#8QXrjNq#_D1pw8KSGao{q%(rTDWx2W@zbqBS$kW&*679YFq zZEswQN!GVbx3=?__mE;MU2bQt4xjTadAB!Pb1dFQ13`n4t!%jh9#USDx3dUyuEOp! z@dsyb@Rwgd%5o(H9KTVUqnzwf&<6FQBcI`NUBm|pm^pe>HII&7hE}*Uk+C_7asxU< zO1G2nL)Rt(+-<;zf$Ndsx^_&6ORO?H&(N-+g}qv@t33$c4&!z4bsVj{&79B8y zO|{<5V??Sjl-P@PZy-r3`e)FzvUIz7D&ibw0iKhV92rlI8OywPXH$L9peip8K+$&&Fr@JAC#+- zlOtPYXDV(PR%Mz5dROHXKArjU#iPdGl+>jRioz+c2ZnUO=Sj9R90L*WLZw zCBq`D50NRG{HFWuk{P z>rwRS#`E%+i!MuLS=DB{kw&6xysoFKhpKj69I|zvbOUALgk86uUadfUB<8Wh!*Biq zA{f#~sV(dq1&QUo4sA)Pz50zB6R>LCQ4=`8q2PY6wqR+U>|aB!(E%COl;DU6`0PV1NgNmlq6sp={*WX=%J z6)NRv6C)yF9McbWvL*an0sBrptv!aZ^!khA-}U;rST9UsGB<@}f7@Q933IIOvPqcL z&|HJQQ#iDNvW!28f2Lj+#KmKP{2bS33T_6y18=s|pLf_&c0hf%q_S@dp-;yddG9Z|hlepw~=~*?h*^+T{pV4?R zs-R(vmoTfuS*v$DVegYW$Jcd#<$Gs|huM<;GPQ9k77sX+CB*K(<~Q^clSmoe9INl5 zGm?Tf-H3hvWJ31(rsGog6pIv`T~MT!YS>;7P!i`mCr^~taD|~ux2$AI5NBCBM(;*{ zg{d4pnTCPgQ8GN8xEfS^vhX>Y)Yt_v^{#>8-b4U1kCYrjc)urc(5|pbC}LzDqya_x zPe2U;+R&7W*AgM&b`A}1-?Lq-606F4o*b`**>VdJ+Q!6F4>{hLy#-i4tx2+k$h<}B z$fwep>>><^Q;z8O{;eVHSK%yggEc9qr=U0u-3&jUAx1}e%rS-`dEnO}jCeuD=s{a< z%$&)+T!*ZWTdh!dKr+VgATKPp0^azZHujbXQcR;#jsD|()=Y)UnIIZ>-D-ul`NWs@ zY14)*IiNeA4GgmCNUACIiP8B8vARh!G}{=jogn*drp|C#o%DVSrO3MZa7#0%`F-*#EvpJ?WqYlFmU|Y&?j}-$-svXGzId=cpZn~DC`J`sbVQ^*QDeKH|OTKt2lNqceD7eZNyhQ~+qtDfVR(0pQz1dq*U-2dfwhxTNx&$28 zrpV&Q8!FG%n-m23NYHv%%n~-Yk@<>%+ix?20IM+6Le&0;#gVc4Wvj&JB=V?t(Zv4M z_ER&xQI>hrb@(e`75> z`t;7~hN>32R=S=Qj{7x;9bc}(M6LR?hJEP9yT$z$I|8-^f^m4r3^gH<`VOL$7wm+3 zL+J(SRo5UKr+6xPvYTB%d2x@1T?TNy3e3odMPFV?K=02hj16>9k9|NbsT7J%9% z*38!8Wf{GTm@ZttTfsLUFXz<6tW~k^-Y+-cj5pX65nX7Xd%GyrB=_?dPZTp?#nY%0 z;i)~v$#MvLnsL^z!^OF5m1%2+am%wdl5VYAl=1;X)NoY!1OC6QmI%tnlc{J(AUisLthO^WfszMtie zas+w_yr4?j0Wrpgj_L0uJkF40WnB-V9yozf=2NC*9P{2A@eR1}+@4ML-@eM_n_I|| z$HWx1O{1v>fTM~)Nme*5fSt-tH`zN72-xPK(8AennWyL&sNOCITRAQn*B6%s&}OjR zhvP|l$h_-HZEmZU`4R$-_&s#YL?N&r1C%Htqfx)_70>AEUa*k3Uv7GG9$S{mmeV~E zsIOmZThklaS$)7dTsl23dt?v08~0>C@pkgVb~%ys7@G0BKs$w*&}rBM9Sk%;lsknn{}wfV&y4G2*ph3>%n;D5;@PYr=^f-D!AS%@nayaUl85|=9V?f;d4 zSsx!QUKST@R^9EQNl+)}tKu6@yqGC`KLO)@v7B!6ZV^&OQ^iRa+OEAM*qwHVu`(X%rze}j*HmVf&IiP0MJL%<2*5NB= z`iEjeMRnu7nD${klBWgAa#=qS*|rh+wzVhKR`&WCTLAPGWUFWZ7+JS&iot}(rnZnB z_6c_GT7>i;wGf1VLmP9T7rNq**8@dMwFiyz+A}E|^q9EV1P#;0c`YWr|2`clSdA5w z7QI5aO_`(+VgX;|y&wDO-qnLa-vpiBR$5rc+3hTBLs%5^sgR+;bolVZ=L3N_I^0He zVAXoxqbi7-MS(;f~ZKA*1pP&*F%2uncnkzyR!DTp};vT3iOR;*B4j#MA_fH<66Bu z8eV_H(yl+k>DjmX?`p$on&MnDd+T2-CFr)uzSxj`lE9*}mmh9+TkGNDnHz0y#{4%T0*?qR04Fw%#sGr+%31i%; zWf)x?C+s`lVs&*QFbnZ zUxVr9Xk5v&LVfS^r|`$Pk+jDVJP#}_pt!lgloH^yL@q8OpHi>VEXPWHM+IQry2QxJ zQ^Etzv1Vltjkk{zEMGV;bWdHK?R;R8Y+m}hDzCa-2Xty}RdV&=^kRZPcY|oN&%4dd zJ7aghJR7rPX+Hgs-KV;XW#k=?bYw^!Rzhg`gQ&7?*TDuouXV=m+cgeu(jJu{<*8r> zQtXRLcI=xO^bbeJE&0yGzpWc56>Yy{wV5g*p~|NqdzFJ79-buC`uJ1!MmFM;cvhF> zl*6j1mvZM~mspn=l-o#Ov9qe^T3w4FV(i6({&&t`yQ0jwi>~}a!8S&hUsz4Oo4Y=@ zJ*aMbp|{5S{Z1gsx4Q4in{c@Ym!r-0-1;Hsh<<5<*3C(p_(8xqO^_ z7W>KEcdefD16eOj^RmF3&oa4nIWa{1vf7h`4iD^KJBHge4;A7nTAp)%9ncFdQDpSr5O-~O)IwIm%SjYo4u?Nt%ep~Xt;^!CTa|xo{1t- zD|&pB>5g^^HR zXOg+V+96tsRX&;@GlDQ1@pvAt-UNLq*1UzI5?LHoRuDO@^{xTlo;wrWKlg<`iHo+- z*QvZ%OgV4|I395OrXS0y%ihj%Qdk8%<;FH$=+&4G?>7PSl*@Ui!C#!Uhn-_8^SUcc zfa8*5@wp>9LalDoq;E>f!ranRWpYEsWhPaf3uRz)?8Y`mkt~3tWpno}nun=i`edlI zcCy;76(dG2a<0ybg!gT$A4jU;O!;n~MCJptUV2&zcf}-9RmB-fUh*^|X5!C5cL=a@ zXp~D&=N;(m>tlHPj_j>LhQlXXhoHm?=9V~_YIKhR4ckf8K~sIHIyljX;`6dF_3lv3 zi|ZnSj~P8E@Ot|~E0(vk!>41Zdp^UzjwP*hLNub!nNZyJmxL9+X1^qAw`%TLo~|ow z^v*G|nwN{I;tVAE)I}+y44a^jA17A?Sz0PYd3m0x)xTsYTE)H{E&jga?Xowy!L@*S3YR{S&=L1aCpI}>6Tvu`P|6G* zX`4uY!}^_@zi`Oyxe2&z+MWq~2}1yP4U87<@Py#Ol4eb}dQ|%BCj{Pm==X`7rzj;c z1CXl2o zEe|AP3TcukxXVa}JyzLc?sRmoY0+qBhS0C+NcDO=N>k0y$}Yco!kfML7L z^8FoCb|7iL7sxBUoI2UH#+uNE%AAwU__C}*<+gh)o=@NWFr4Qd0u=l?dI!8X-KT-Cff`?TGakGShbWceyWP8_` zZ}?We=xpkl&m*a^?5{`$NYmGyOD+|9D@u*>oc~rvpldcHP?K=6AZ3DPQn`Kmu23th z%gRXFZfM)QbDq=2+b0y4T?)j4>x_~87}Lg=LVQEFNlhKfaZZI?Lew|e;LJ$4?^0c* z;LIVg!R^J~88xu=En%ao|B-O_hvTlG59z~pvn58+YEO3@JBrl+ZB+sVaUNU@24)o( z&63hOV-igewl{3lLy|uOtEZ1HUZD+|`%MrZB zoEO{WrLR6Q_~iZMwIO8hU^5q?HYYLSa*CCD*O{c``bqgOI!gQRyG(a8O6$F~+o`nN z-wTf`YwBdDNTfdw%%|=pT~oBq4Ud_Bj7TO~szS%icMd-3C%Nxuc0i>?!r=#wlF$QM zCCY*CFPGDOmfSz2(yEKw4uDAkDy=YE$VEQt7zl`pBQ}CWKBCOqPwKf2I)t@jxu%LY z#EAbQaj{HY;?N`4+1{N2QRQbjzM1_D##&<(lCdjZ@_HXZZ#lJT^J>R?2d-~!WcfUu zu@=>7f0nZDkn-%g#@eEnn_ice$Pe5V(4BbooZZBL3{Lv)y5U~Tr*$S*MJHGsw3J>A zJOvr?Y<%Wr*pb)NZBf~dZqHiVinF;9F4ij@$FoQ)v+NYT(&;JhEv(QDZ&h{~D|yBe zY-eVA={gWJ0(-;E(5h)D3V%e`T5d?&9grUHYxQbt<(C|UtrUR$?7xSi@d&k z!7XdLyMy0Sr!i>_K0|9s2n(hrD%SpVixc+w_dcK1t6Q{QdO-Ao+PEwCsah9bvNS@r zg3F_=L7ykMg3yEdvxpdYb-)?oGdJy>|ARI2jk-zVdme*`Cmb8zHzu*4FK?54%4)v< zhkifsi3Hp#Vc=i1S?FOV;cutVzx9um6ThsXq5NpX2Sf)9JrDg$H$(&B6IQ2ZYz(MAZYr>f!%CfBj8x{db>GG~1I`pzePt zR}`%kkf8ql4OJGE9#t2Vd+)F7fX}Er52&(#q|5F@+2M|b9=O>b#*|-@tax6)Ek$oB z70Nx!6X3^`Jp_MTUd==*pUqe=`${p#LWcRP(;=`L8*=`oi_lL1;`Mr`k3@=+Gn zdeAT>MZpK)b+Q4L^RI_1B5;WvzSqewCN8EfIxO7u`FgX`)2tl>-4AyPjb_zl-sZ<= zPH6^oRWbCmo3NM9ZJ&Cq$({F;!6AL+w3f6+L>nw&P9LnZKpYTsjOS>r!@yyJCyGGiGP@8^>g9~j}qL0%=B3mW)1VPo+EQ=$F#ds60hPL1iei@YeE!_K#YuU^hHl$)(vp0idkViYqR0ASRvBq`vXYy( zCdomS*cvAi+25M;OJ=Y#GD0{TOvl;ksjTq|KlO!?m*9O2vT|Vi?D)Cplf}ycN*`T^ z3bw_$)qq*-EdsaeQ^X~eezgI$0RiE&*tal!={e4U`mYw=Y;SH&Od<89Bzt21#c2#1 zvpBI7ng?|ndsTXBbVI`6j)A2_5ob;~$y$)>;uE&Dkp@At+_dbk97U^{ZB}cm{%w>c z$YHPf8EhTQ%;%4Yded?n$C{p0>-VT2-bNcMrE*GOS{vin;?T;&SO=J3r&{Z!cw!XZ zJb@=_G-CMfu&vTIk(Ee;$78`g)X4j3-3fR+0k*T#r9RXj7CxCP!Wq9ic1dAHDKdZ5 zAQ6*;;&8?qG!J~jvlg3ju)BGt_RRZG+C_jT*J1%KoB+&u994LFBn5X0FlBMnq`=4?ne*3zHx{v5B zh~}Y%zgwj1>1S`yfw|YK0%@PKPin2*D3m3DLw}l&X23v@HW{9~ z&nPZQYkZ4)V43c!ru&h4#-=Rnvyzy+ufz?5$s!8R=!%R&OEH>Ux8jhA&#D7vEYzn)XpPb3xaC;{GB5@tib7%0 zY|9kWb*>5x%MAF)fbcXzO^kR&Esa;21l{5lvMwF+&Vm(wdddt9>w@0?l?pdZu9%)C z2afDhFu>`movT|HUcn$Y+^wH1bn3q~$5$LU)VPo~+jp~%AgMJ;SxL_6>I#WXQnAjq zpDWHn8|{@B`PEGkj2dL##DgR*_0pCGBnyq=UqV3ImqpwOA;l6&I+AuzzG_^(LX@S? ztUW8*hcz&D#$MIup(vqmjl$KyQo)g%k>o9N`3^Vf{kd}=C)-diY(bZpDk*iF$o;(S zpKg7=+NTjcQ;<2(sh)K;3txj<_`adCvI2~nobByfrEvI^(c^R`X6I`}?>i{`316$u zjWt+^#w4=E#TlP39+3_44XR^bo;pu2A~Wti1NK>!!?|r;Vv@lu+zAnmo!Z3UXlfZ5 z!r-l(IPDh3ePd31$Kn3SL<723zUtb89Qwerh5(W!Tch*{%CI{(BO2zT0D|tVX%9L% zabwfqWfVa-_DYcZu2PiDTpXD#M9scb`tFFj(aY}nd`d1#fS}6~(GVf(tmSThyCsqh zo89`(bIO_5mx#01IFo#D$!6^6#Vm7{61qaf?ZfbBd8qA@kg$#0Wa2SJXSXqH3^VjS z<@;7S@A=|fGwBw7l3DB_!qhK_B~jBihhIm8YuhkkHQ9h$!wEZ;>@CNm=`Im=Tk7@5 zO?T<+)gVRUyOzeLt2D^3*X`FT5~UNR6&~6_Y>78+>~hbE4Krlk7TV@qH_@uYA~j)q zMBxzb^*}JpPv4B|b+t8aPiv!rn>!xQ3%qYF};i z|FG*u^aZLR=5yv;A2|{l_#s)joknEtyn-wRW^tqK;R@{#3BiifF|QRy_%^=evwL(a z5Snph_KeqVerRgBC|id8s+{k;p`uRiM|_6yz|1xA$^^T5L&IFlJN_3tgy^Vq*Fh=; zSZ2;{cZ0kAdWCRS6fZA>EmPAdp)e8?b8V=8z$`xpS32Q+fxONaeax;Uu~H%LBg*|I z25wA~Z99y;(K{C}5=pVGq}0gRA`mJdL>E73f6ubTpYu(Pe&1(b6ov&*Xs$Y8Z4LnCfS+`I~ z%_Gxdduw!4>|7mdIu%caNF4!?F4&whoACZHV=z}^-BPUsY`x=S*AZzw+Ss8Q>=hEVN(aHCp}j4)X2BjlBB(F1Z0p>|~n1ILcuzK(lKNO?0{ zEv|Pkbvd4y^Tw^E%QmJhI>ZzK_RHfEl4Wp#Wh^`UfjwVGONg^fUz}&SY{i1Nh z7%lb;_3~)HzcJ_DbauLh@O9~G@3e;W82SNAwE5x3u3r+9^f~+F845Bewfo;$IATnG zVQdM0OEe+&z;6e(iAmoflw2>%B60H+=Tw1RO3`&Y*wTwuV})h8+Y#uTPDOOQZg3GmF*8+X2FN%(n(CS z4oF6}eUR;uWV$*MYFNVRz}7}Z-SFUk=##IU3z%bO?4fvuBTSH6hM>nBvBHw6!5$+` zb~Or!5pm(Dx!K~pQ7$d2bu+1#DNP1=oPWc_mF*_y^~Z9d zLU+$Y`YK`r?in%l+WCYF+32-CkeJ2~As%3vNR*s}1HAsQIRb|&*d;7Xm7wyFmhV#z z&l`$Ep0#U_O?a~8aMe#3cqKB2C&LG7TVcL!N-FWrSo4Zb0{2sQ&LX>WiN_#MyA4KS zTgyuXs1zXO8eh{=Kq2pZjrB6uh;==i7=*0V+ZRi)Jn7_&sIG>Y)iS&?bKMN(tS*J|235u^0r9dl zQj6)C9t-DODLn~xr+{;64`lUvAc6`wW&HBHFJ(E``NN#orp^$>kI`s#$&Jh1>~pEF zfrK|^ql;t?K3%#lK}Ls7u!Q@qB*Q=N?f^m5twJXv_lD<-<(o1?^TWQ>VOIwO^NZa2 z<{HSc&KLCyoqN+7IQnd!@eOv0tLN43t%dcT$x~}mEG3v6q7I%ysj5Pj?z>lokE zV(C_Hb2?j-G{_U*5(h^v#Mbo`T9b_QIa*$^PUjDKvqO>f66{adxlw2K?$SmN_Cs+W zb(n~$z37!%0Ul%0Q|G)%T`+r+y&g7Ou{{VfcBpEj&f+QI_;hxhGSKPC8RC2du^R;% zDBn27i)wVqX?jDeDq}T*JeV+E6`xzM*t2(9QU$jtRONxm;McYKBK9#)C0wP%S&`VV zvtKiaVu_iZLZy*WZ7;6(OOlAazCY-)=?x zU!>~puTKvzSYd|=qQ7@#juKe^16B8rP4mA?)rIa;VfRaXjH-K*u6uav@$YJjk{_q* z{;`_BcTWB*U3b5k)sNG4p+AZCzr(4){t#slhAQ*lZ;hh16@G0WKoCdBx<>lO`uh4t z_WJsUs&eg56`eM8#27eY>#D1pVq%gK90h$n1*3H_D4_4r@a6W%^01bB(KgRhm$II* zeoeLG_k-Y~sI0P&BU7{uT0PRwD|N6w93z;^dhX&bIp_wuc?ba}rUs1_2PPC#_2U&) zHC4J$-Gn%uU36*RJXZsO?E$Lnl$eM|_XJ|E-mAfBf-MfQ%X$!i3cY z?kxjxNJ}e#|y}EKY zR-Nd&E|CSbEE(M;19VX*Y9d=#TYpszNo+Ov9b9=a-b6V&B0Q4|%w#Hh%ACa4FC*}j z8!vBF3Mxh>#hN}A4wgyr!e3UWNqyX0)+$I-XFhK*!Jk2)VCYz-gR@KyWiqumnV!mN8r$P?)1lbjzpcn+i%Ow&z71loGCpx034 z?#s$r*58X>no@0VWb8L%M6~m^y5QQE_Te|aTBnCp9kBEbuQiO+8ln-3;dY=kFkd-C zKI|m$$kXeBJJn{SQcAJivh3Iya zS!hHBZzz{^xO<70QT5X$;_bR35kI5%i3TxIU(PMBYYlePU?Jp&H=qwQ^M~@%qs4vg zUy7J6`JWp*M_G)EdD~x8E06%Os9QR39NUSpF`MEr(9N#4W3S+ZIN@>_IWt{_Pc8P}yoXb8Hmx zS7Yv?M`T(~v6hd%spm;J?yWwcd9wr28H_KPEfb{N5FIX=zuT_rYH&~3gq*eMEF-Dt z{dmJq*^Udy%l1}(XvTvrXp}kN`}IHqIGg=9N&Yt~{H-~Vx+{9)2|es=x@pqvnt70c$9LgYM}FJis%8DjzuiQU9E4BUkq_MDNmnf7q9rBt<#xe zP5n4qx~d@LOLy5dj>6JsXCj9Cw^l5b%I{2_FQK1a*%hs!Y#zaU>Q}Czf=@q{!-D+i zkLX%_h_@XMH7x>x#{V$>4o$}(Ks?XCBB#I(PsjdxAP7gzOa9*K9j+g=1ImYd4MwPg z{pu(rdC+)VFlSHZy??{MAoO?E@RPlN(0@ONn1!jSiKB_FkqHoV0}SE?-jKubKj6P7 z6!@rLVLvT8kP5V4tHa$0{{vdX{|#Cz+17&yZ*8R1zMnS4dM7B6^CX#jEB%QGS`C|Y z5}IQZ(`#PFbj=wIxJj2}(NKG4Nw*#>VV! z5cg8Sg~UnG5{@$BaWk^}EwnnRklU*)XcsG?r?XLD5e z7N7u7D3Tvgd>-I|6A)zOXFlpCPIfMifU@BW3!`RofSm#m*iOsV0`;f}w68%&RO+zh zIv6?opz^cse|X$e8Y zo7bn9H7+i9K~64!B`UG_wBj=p9BJ77sUb;-CxT3EcAzpR^~>Jbp|%BHLZZRjtM0xJ zM+m6DUpyn6vYs&#^IXAElGftIkFv9hL}t14sE@$2&7Ui$Lzn#lq7eTAqEyQPh$5Za z48OqJfTwtkfU^w7v#grpg%;c(9*&;pFj_@2a+f(1t(A|2=)GOt3aQtrUF8pv2{oJg zc)cYt;tBTa{w}9;k(;8g2Dk+wdM#s>raHkROtYRN47YTk^Y-pV4z)O^(0)X5$C5yG zDs9KU!E8BqMgkZE^%eZ3FMrW<_UI*k$NN?J_`% z^l-5&oWczX_DbH?K?GLvrZokh;V_lI6QJgtQOnw{^*b4GRUf0{<20POz{BV>z)G-+!KLCbDWWW~) z&=yBzP<}pCiyx7}5O6S1{39|XaJ0ekeBnrb)STsLIw%+n;NuY)KLmn2o(EC@jM`c{ zk`9T4@dJo?M1}yG`FOriz#<>N9}EuM@z}L6IM7i?u zp3Fl4hVn}~dOx7LC-N15qt>Ix(jmYn$}E65F&2QadP4vB!F;F{;F0_BgJFM?A&=_@ zKNyZYUS>chaC|KA12})Yt@y#f1o}k2Kue#H@t@EG05?#Ju%l%LAooNb5LBqeU+J73 z4J@op9QUoLhJ}X-3QtkSLfy{J88~?1=e!2^jtUD2pzDFTadI|rblyi`eh7jefzQe+ Its;Z}KMO$ljsO4v From c3def926f1d41094d20cd28fd719e8db6334b770 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 28 Jan 2026 10:40:40 +1100 Subject: [PATCH 153/270] Fail setup script when nodenv is missing --- bin/setup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/setup b/bin/setup index 48d344fb83..68a3b32e2b 100755 --- a/bin/setup +++ b/bin/setup @@ -21,8 +21,8 @@ FileUtils.chdir APP_ROOT do system("bundle check 2> /dev/null") || system!(BUNDLE_ENV, "bundle install") # Install JavaScript dependencies - system("script/nodenv-install.sh") - system("bin/yarn") + system!("script/nodenv-install.sh") + system!("bin/yarn") # puts "\n== Copying sample files ==" # unless File.exist?("config/database.yml") From 6fb4048bfdbbaca183553721e357fcb7c9634363 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 28 Jan 2026 13:47:18 +1100 Subject: [PATCH 154/270] Add context: this script will be used to deploy production --- bin/setup | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/setup b/bin/setup index 68a3b32e2b..c9274099d6 100755 --- a/bin/setup +++ b/bin/setup @@ -1,4 +1,10 @@ #!/usr/bin/env ruby +# +# Install dependencies and migrate data during production deployments or +# when updating your development environment. +# +# Take care when changing it and consider the ofn-install repository for +# the context of deployments. require "fileutils" # path to your application root. From fb713d87212118316d8bcb94c4c5286d0e07dfa5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jan 2026 09:32:53 +0000 Subject: [PATCH 155/270] Bump @floating-ui/dom from 1.7.4 to 1.7.5 Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.7.4 to 1.7.5. - [Release notes](https://github.com/floating-ui/floating-ui/releases) - [Changelog](https://github.com/floating-ui/floating-ui/blob/master/packages/dom/CHANGELOG.md) - [Commits](https://github.com/floating-ui/floating-ui/commits/HEAD/packages/dom) --- updated-dependencies: - dependency-name: "@floating-ui/dom" dependency-version: 1.7.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 30864b60f9..a776c6aff8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1382,19 +1382,19 @@ dependencies: tslib "^2.4.0" -"@floating-ui/core@^1.7.3": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" - integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== +"@floating-ui/core@^1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.4.tgz#4a006a6e01565c0f87ba222c317b056a2cffd2f4" + integrity sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg== dependencies: "@floating-ui/utils" "^0.2.10" "@floating-ui/dom@*": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77" - integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA== + version "1.7.5" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.5.tgz#60bfc83a4d1275b2a90db76bf42ca2a5f2c231c2" + integrity sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg== dependencies: - "@floating-ui/core" "^1.7.3" + "@floating-ui/core" "^1.7.4" "@floating-ui/utils" "^0.2.10" "@floating-ui/utils@^0.2.10": From 2219513c9334efd9bafba20b960ddea9495b38d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Jan 2026 09:33:05 +0000 Subject: [PATCH 156/270] Bump css-loader from 7.1.2 to 7.1.3 Bumps [css-loader](https://github.com/webpack/css-loader) from 7.1.2 to 7.1.3. - [Release notes](https://github.com/webpack/css-loader/releases) - [Changelog](https://github.com/webpack/css-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/css-loader/compare/v7.1.2...v7.1.3) --- updated-dependencies: - dependency-name: css-loader dependency-version: 7.1.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index 30864b60f9..d6ccd478fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3136,18 +3136,18 @@ css-has-pseudo@^7.0.3: postcss-value-parser "^4.2.0" css-loader@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.2.tgz#64671541c6efe06b0e22e750503106bdd86880f8" - integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== + version "7.1.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.3.tgz#c0de715ceabe39b8531a85fcaf6734a430c4d99a" + integrity sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA== dependencies: icss-utils "^5.1.0" - postcss "^8.4.33" + postcss "^8.4.40" postcss-modules-extract-imports "^3.1.0" postcss-modules-local-by-default "^4.0.5" postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.5.4" + semver "^7.6.3" css-minimizer-webpack-plugin@^7.0.4: version "7.0.4" @@ -6012,7 +6012,7 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.33, postcss@^8.4.40, postcss@^8.5.6: +postcss@^8.4.40, postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -6508,7 +6508,7 @@ semver@^6.0.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.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.7.2: +semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.6.3, semver@^7.7.2: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== From a0011bd2e90f822f682edf268e57efe6c22c4135 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 12 Jan 2026 16:11:08 +1100 Subject: [PATCH 157/270] Remove orphaned translations of payment methods --- config/locales/en.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 3cec061b65..81a1c2bf5b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4664,9 +4664,7 @@ en: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: From b3a1d1269a92874321cb830aadffc434f02342f2 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 12 Jan 2026 17:12:11 +1100 Subject: [PATCH 158/270] Add Taler as payment method It doesn't take payments yet but can be selected during checkout. --- .../spree/admin/payment_methods_controller.rb | 1 + app/models/spree/payment_method/taler.rb | 39 +++++++++++++++++++ .../permitted_attributes/payment_method.rb | 2 +- config/locales/en.yml | 5 +++ .../admin/payment_methods_controller_spec.rb | 1 + 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 app/models/spree/payment_method/taler.rb diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 6584dd87ce..8073fb544a 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -14,6 +14,7 @@ module Spree Spree::Gateway::PayPalExpress Spree::Gateway::StripeSCA Spree::PaymentMethod::Check + Spree::PaymentMethod::Taler }.freeze def create diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb new file mode 100644 index 0000000000..2a4e496d7c --- /dev/null +++ b/app/models/spree/payment_method/taler.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Spree + class PaymentMethod + # GNU Taler is a distributed, open source payment system. + # You need a hosted Taler backend server to process payments. + # + # For testing, you can use the official demo backend: + # + # - Merchant UX: https://backend.demo.taler.net + # - Username: sandbox + # - Password: sandbox + # + # Configure this payment method for testing with: + # + # - backend_url: https://backend.demo.taler.net/instances/sandbox + # - api_key: sandbox + class Taler < PaymentMethod + preference :backend_url, :string + preference :api_key, :password + + # Name of the view to display during checkout + def method_type + "check" # empty view + end + + def external_gateway? + true + end + + # The backend provides this URL. It can look like this: + # https://backend.demo.taler.net/instances/blog/orders/2026..?token=S8Y..&session_id=b0b.. + def external_payment_url(options) + # order = options.fetch(:order) + # Taler.create_order(backend_url, api_key, order.total, "OFN Order", "https://ofn.example.net") + end + end + end +end diff --git a/app/services/permitted_attributes/payment_method.rb b/app/services/permitted_attributes/payment_method.rb index aac274a9f2..2ee863e3b7 100644 --- a/app/services/permitted_attributes/payment_method.rb +++ b/app/services/permitted_attributes/payment_method.rb @@ -11,7 +11,7 @@ module PermittedAttributes [:name, :description, :type, :active, :environment, :display_on, :tag_list, :preferred_enterprise_id, :preferred_server, :preferred_login, :preferred_password, - :calculator_type, :preferred_api_key, + :calculator_type, :preferred_api_key, :preferred_backend_url, :preferred_signature, :preferred_solution, :preferred_landing_page, :preferred_logourl, :preferred_test_mode, :calculator_type, { distributor_ids: [] }, { calculator_attributes: PermittedAttributes::Calculator.attributes }] diff --git a/config/locales/en.yml b/config/locales/en.yml index 81a1c2bf5b..254b8b811b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4344,6 +4344,10 @@ en: thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + # Attributes of the Taler payment gateway + backend_url: "Backend URL" + api_key: "API key" + # TODO: remove `email` key once we get to Spree 2.0 email: Email # TODO: remove 'account_updated' key once we get to Spree 2.0 @@ -4666,6 +4670,7 @@ en: check: "Cash/EFT/etc. (payments for which automatic validation is not required)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: diff --git a/spec/controllers/spree/admin/payment_methods_controller_spec.rb b/spec/controllers/spree/admin/payment_methods_controller_spec.rb index 311b83b7fa..8937bff352 100644 --- a/spec/controllers/spree/admin/payment_methods_controller_spec.rb +++ b/spec/controllers/spree/admin/payment_methods_controller_spec.rb @@ -19,6 +19,7 @@ RSpec.describe Spree::Admin::PaymentMethodsController do expect(providers).to eq %w[ Spree::Gateway::PayPalExpress Spree::PaymentMethod::Check + Spree::PaymentMethod::Taler ] end From 5971cdc6e2acd0dc48f1689ce4e76d592d97e519 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 15 Jan 2026 15:20:46 +1100 Subject: [PATCH 159/270] Add new taler gem --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 44c1d371f1..7f663812c2 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ gem 'stringex', '~> 2.8.5', require: false gem 'paypal-sdk-merchant', '1.117.2' gem 'stripe', '~> 15' +gem "taler" gem 'devise' gem 'devise-encryptable' diff --git a/Gemfile.lock b/Gemfile.lock index 500251293e..316a74c595 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -884,6 +884,7 @@ GEM faraday (~> 2.0) faraday-follow_redirects sysexits (1.2.0) + taler (0.1.0) temple (0.10.4) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) @@ -1100,6 +1101,7 @@ DEPENDENCIES stimulus_reflex_testing! stringex (~> 2.8.5) stripe (~> 15) + taler turbo-rails turbo_power undercover From 61e068839287897c7407d7536fe4c71d4d2e0b32 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 15 Jan 2026 15:56:23 +1100 Subject: [PATCH 160/270] Demonstrate retrieving the payment Taler URL --- app/models/spree/payment_method/taler.rb | 14 ++- .../retrieves_a_URL_to_pay_at.yml | 106 ++++++++++++++++++ .../models/spree/payment_method/taler_spec.rb | 19 ++++ 3 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml create mode 100644 spec/models/spree/payment_method/taler_spec.rb diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index 2a4e496d7c..fed3239d7f 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -31,8 +31,18 @@ module Spree # The backend provides this URL. It can look like this: # https://backend.demo.taler.net/instances/blog/orders/2026..?token=S8Y..&session_id=b0b.. def external_payment_url(options) - # order = options.fetch(:order) - # Taler.create_order(backend_url, api_key, order.total, "OFN Order", "https://ofn.example.net") + order = options.fetch(:order) + total_amount = order&.total || 5 + taler_amount = "KUDOS:#{total_amount}" + new_order = client.create_order(taler_amount, "OFN Order", "https://ofn.example.net") + order = client.fetch_order(new_order["order_id"]) + order["order_status_url"] + end + + private + + def client + @client ||= ::Taler::Client.new(preferred_backend_url, preferred_api_key) end end end diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml new file mode 100644 index 0000000000..89a829b59d --- /dev/null +++ b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml @@ -0,0 +1,106 @@ +--- +http_interactions: +- request: + method: post + uri: https://backend.demo.taler.net/instances/sandbox/private/orders + body: + encoding: UTF-8 + string: '{"order":{"amount":"KUDOS:5","summary":"OFN Order","fulfillment_url":"https://ofn.example.net"},"create_token":false}' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx/1.26.3 + Date: + - Thu, 15 Jan 2026 04:18:27 GMT + Content-Type: + - application/json + Content-Length: + - '42' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "order_id": "2026.015-02T676V4VARMT" + } + recorded_at: Thu, 15 Jan 2026 04:18:28 GMT +- request: + method: get + uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.015-02T676V4VARMT + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx/1.26.3 + Date: + - Thu, 15 Jan 2026 04:18:29 GMT + Content-Type: + - application/json + Content-Length: + - '336' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: |- + { + "taler_pay_uri": "taler://pay/backend.demo.taler.net/instances/sandbox/2026.015-02T676V4VARMT/", + "order_status_url": "https://backend.demo.taler.net/instances/sandbox/orders/2026.015-02T676V4VARMT", + "order_status": "unpaid", + "total_amount": "KUDOS:5", + "summary": "OFN Order", + "creation_time": { + "t_s": 1768450707 + } + } + recorded_at: Thu, 15 Jan 2026 04:18:29 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb new file mode 100644 index 0000000000..c30d7064f4 --- /dev/null +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Spree::PaymentMethod::Taler do + subject(:taler) { + Spree::PaymentMethod::Taler.new( + preferred_backend_url: "https://backend.demo.taler.net/instances/sandbox", + preferred_api_key: "sandbox", + ) + } + + describe "external_payment_url", vcr: true do + it "retrieves a URL to pay at" do + url = subject.external_payment_url(order: nil) + expect(url).to match %r{\Ahttps://backend.demo.taler.net/instances/sandb} + end + end +end From c11b93a4dcd22ffbc1c61223cd75023823e30f6f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 19 Jan 2026 14:28:00 +1100 Subject: [PATCH 161/270] Demo Taler flow without validating payment yet --- .../payment_gateways/taler_controller.rb | 16 +++++++ app/models/spree/payment_method/taler.rb | 43 ++++++++++++++++--- config/locales/en.yml | 2 + config/routes.rb | 2 + .../models/spree/payment_method/taler_spec.rb | 9 +++- spec/requests/payment_gateways/taler_spec.rb | 27 ++++++++++++ 6 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 app/controllers/payment_gateways/taler_controller.rb create mode 100644 spec/requests/payment_gateways/taler_spec.rb diff --git a/app/controllers/payment_gateways/taler_controller.rb b/app/controllers/payment_gateways/taler_controller.rb new file mode 100644 index 0000000000..aff2799242 --- /dev/null +++ b/app/controllers/payment_gateways/taler_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module PaymentGateways + class TalerController < BaseController + include OrderCompletion + + # The Taler merchant backend has taken the payment. + # Now we just need to confirm that and update our local database + # before finalising the order. + def confirm + payment = Spree::Payment.find(params[:payment_id]) + @order = payment.order + process_payment_completion! + end + end +end diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index fed3239d7f..41d0881a43 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require "taler" + module Spree class PaymentMethod # GNU Taler is a distributed, open source payment system. @@ -32,15 +34,46 @@ module Spree # https://backend.demo.taler.net/instances/blog/orders/2026..?token=S8Y..&session_id=b0b.. def external_payment_url(options) order = options.fetch(:order) - total_amount = order&.total || 5 - taler_amount = "KUDOS:#{total_amount}" - new_order = client.create_order(taler_amount, "OFN Order", "https://ofn.example.net") - order = client.fetch_order(new_order["order_id"]) - order["order_status_url"] + payment = load_payment(order) + + payment.source ||= self + payment.response_code ||= create_taler_order(payment) + payment.redirect_auth_url ||= fetch_order_url(payment) + payment.save! if payment.changed? + + payment.redirect_auth_url + end + + def purchase(_money, _creditcard, _gateway_options) + # TODO: implement + ActiveMerchant::Billing::Response.new(true, "test") end private + def load_payment(order) + order.payments.checkout.where(payment_method: self).last + end + + def create_taler_order(payment) + # We are ignoring currency for now so that we can test with the + # current demo backend only working with the KUDOS currency. + taler_amount = "KUDOS:#{payment.amount}" + urls = Rails.application.routes.url_helpers + new_order = client.create_order( + taler_amount, + I18n.t("payment_method_taler.order_summary"), + urls.payment_gateways_confirm_taler_url(payment_id: payment.id), + ) + + new_order["order_id"] + end + + def fetch_order_url(payment) + order = client.fetch_order(payment.response_code) + order["order_status_url"] + end + def client @client ||= ::Taler::Client.new(preferred_backend_url, preferred_api_key) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 254b8b811b..1d081df210 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3502,6 +3502,8 @@ en: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" diff --git a/config/routes.rb b/config/routes.rb index 0946d21ab7..abc399163b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -82,6 +82,8 @@ Openfoodnetwork::Application.routes.draw do get "/stripe/confirm", to: "stripe#confirm", as: :confirm_stripe get "/stripe/authorize/:order_number", to: "stripe#authorize", as: :authorize_stripe + + get "/taler/:payment_id", to: "taler#confirm", as: :confirm_taler end get '/checkout', to: 'checkout#edit' diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb index c30d7064f4..25c619b5fc 100644 --- a/spec/models/spree/payment_method/taler_spec.rb +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -11,9 +11,14 @@ RSpec.describe Spree::PaymentMethod::Taler do } describe "external_payment_url", vcr: true do - it "retrieves a URL to pay at" do - url = subject.external_payment_url(order: nil) + it "retrieves a URL to pay at and stores it on the payment record" do + order = create(:order_ready_for_confirmation, payment_method: taler) + url = subject.external_payment_url(order:) expect(url).to match %r{\Ahttps://backend.demo.taler.net/instances/sandb} + + payment = order.payments.last.reload + expect(payment.response_code).to match "2026.022-0284X4GE8WKMJ" + expect(payment.redirect_auth_url).to eq url end end end diff --git a/spec/requests/payment_gateways/taler_spec.rb b/spec/requests/payment_gateways/taler_spec.rb new file mode 100644 index 0000000000..ed9969e583 --- /dev/null +++ b/spec/requests/payment_gateways/taler_spec.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe "/payment_gateways/taler/:id" do + it "completes the order" do + shop = create(:distributor_enterprise) + taler = Spree::PaymentMethod::Taler.create!( + name: "Taler", + environment: "test", + distributors: [shop], + ) + order = create(:order_ready_for_confirmation, payment_method: taler) + payment = Spree::Payment.last + payment.update!( + payment_method: taler, + response_code: "taler-order-id:12345", + redirect_auth_url: "https://merchant.backend.where-we-paid.com", + ) + + get payment_gateways_confirm_taler_path(payment_id: payment.id) + expect(response).to redirect_to(order_path(order, order_token: order.token)) + + payment.reload + expect(payment.state).to eq "completed" + end +end From b9c7925008bca27bd82a13474c860b6a6ae43954 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 22 Jan 2026 16:01:57 +1100 Subject: [PATCH 162/270] Complete Taler payment success scenario --- app/models/spree/payment/processing.rb | 1 + app/models/spree/payment_method/taler.rb | 17 +- ...at_and_stores_it_on_the_payment_record.yml | 106 +++++++++ .../taler/_id/completes_the_order.yml | 209 ++++++++++++++++++ spec/requests/payment_gateways/taler_spec.rb | 10 +- spec/system/consumer/checkout/payment_spec.rb | 29 +++ 6 files changed, 367 insertions(+), 5 deletions(-) create mode 100644 spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml create mode 100644 spec/fixtures/vcr_cassettes/payment_gateways/taler/_id/completes_the_order.yml diff --git a/app/models/spree/payment/processing.rb b/app/models/spree/payment/processing.rb index 57b4f4335a..599a562097 100644 --- a/app/models/spree/payment/processing.rb +++ b/app/models/spree/payment/processing.rb @@ -183,6 +183,7 @@ module Spree options.merge!({ billing_address: order.bill_address.try(:active_merchant_hash), shipping_address: order.ship_address.try(:active_merchant_hash) }) + options.merge!(payment: self) options end diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index 41d0881a43..273b11ee9d 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -44,9 +44,20 @@ module Spree payment.redirect_auth_url end - def purchase(_money, _creditcard, _gateway_options) - # TODO: implement - ActiveMerchant::Billing::Response.new(true, "test") + # Main method called by Spree::Payment::Processing during checkout + # when the user is redirected back to the app. + # + # The payment has already been made and we need to verify the success. + def purchase(_money, _source, gateway_options) + payment = gateway_options[:payment] + + return unless payment.response_code + + taler_order = client.fetch_order(payment.response_code) + status = taler_order["order_status"] + success = (status == "paid") + + ActiveMerchant::Billing::Response.new(success, status) end private diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml new file mode 100644 index 0000000000..5c658e01f3 --- /dev/null +++ b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml @@ -0,0 +1,106 @@ +--- +http_interactions: +- request: + method: post + uri: https://backend.demo.taler.net/instances/sandbox/private/orders + body: + encoding: UTF-8 + string: '{"order":{"amount":"KUDOS:10.0","summary":"Open Food Network order","fulfillment_url":"http://test.host/payment_gateways/taler/61"},"create_token":false}' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx/1.26.3 + Date: + - Thu, 22 Jan 2026 04:43:32 GMT + Content-Type: + - application/json + Content-Length: + - '42' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: UTF-8 + string: |- + { + "order_id": "2026.022-0284X4GE8WKMJ" + } + recorded_at: Thu, 22 Jan 2026 04:43:33 GMT +- request: + method: get + uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.022-0284X4GE8WKMJ + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx/1.26.3 + Date: + - Thu, 22 Jan 2026 04:43:34 GMT + Content-Type: + - application/json + Content-Length: + - '351' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: |- + { + "taler_pay_uri": "taler://pay/backend.demo.taler.net/instances/sandbox/2026.022-0284X4GE8WKMJ/", + "order_status_url": "https://backend.demo.taler.net/instances/sandbox/orders/2026.022-0284X4GE8WKMJ", + "order_status": "unpaid", + "total_amount": "KUDOS:10", + "summary": "Open Food Network order", + "creation_time": { + "t_s": 1769057012 + } + } + recorded_at: Thu, 22 Jan 2026 04:43:34 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/vcr_cassettes/payment_gateways/taler/_id/completes_the_order.yml b/spec/fixtures/vcr_cassettes/payment_gateways/taler/_id/completes_the_order.yml new file mode 100644 index 0000000000..d84ef9f88a --- /dev/null +++ b/spec/fixtures/vcr_cassettes/payment_gateways/taler/_id/completes_the_order.yml @@ -0,0 +1,209 @@ +--- +http_interactions: +- request: + method: get + uri: https://backend.demo.taler.net/instances/sandbox/private/orders/taler-order-id:12345 + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 404 + message: Not Found + headers: + Server: + - nginx/1.26.3 + Date: + - Sat, 24 Jan 2026 00:51:32 GMT + Content-Type: + - application/json + Content-Length: + - '109' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + body: + encoding: ASCII-8BIT + string: |- + { + "code": 2005, + "hint": "The proposal is not known to the backend.", + "detail": "taler-order-id:12345" + } + recorded_at: Sat, 24 Jan 2026 00:51:31 GMT +- request: + method: get + uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.020-03R3ETNZZ0DVA + body: + encoding: US-ASCII + string: '' + headers: + Authorization: + - "" + Accept: + - application/json + User-Agent: + - Taler Ruby + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx/1.26.3 + Date: + - Sat, 24 Jan 2026 00:55:33 GMT + Content-Type: + - application/json + Content-Length: + - '19676' + Connection: + - keep-alive + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - "*" + Cache-Control: + - no-store + Via: + - 1.1 Caddy + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: |- + { + "wire_reports": [], + "exchange_code": 0, + "exchange_http_status": 0, + "exchange_ec": 0, + "exchange_hc": 0, + "deposit_total": "KUDOS:5.5", + "contract_terms": { + "nonce": "H8BTDASTRX0WMBQTEWN6JSVS3KK7MZ6WAZGTKDM28FQ0CE9W59EG", + "amount": "KUDOS:5.5", + "h_wire": "1HZYJW67Y7D9GDERGJ8R2B0MTYXRW425M0N11AWHY4VC3DAYCR14CG30X7B7NGM1G93YYC7V4FAS314NBF40GRF1EC8GB0FD5SSJET0", + "max_fee": "KUDOS:0", + "summary": "Open Food Network order", + "version": 0, + "merchant": { + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALEAAACxCAYAAACLKVzFAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAC+cSURBVHgB7V0HeBzVtf63qVerWM3SSpZs2ZYrpoNLQmJiCIaEZxICxgQIhAAuEIofxSaUEFNsg+FRbYcWYhNaSKNYFNMC7g3LktayZclqVtdK2tW+e2bnjmZX22Z3Ja2k+b9vNLur2X/u3vnn3HPPPfeOBip8hs1mS2A7I9umsY1e54h7o7hPEA81eqAxudg3su2I+FrYNBpNI1T4BA1UuAQTrJHt5rBtKnqFa8TAgUS8U9w+gV3YO6GiD1QRQ7KwJNLZsAuXW9pQAxc2ibqYiboYKkauiEXhLmbbAoSuaL2Bi3oT7KI2YQRiRIlYdBGugt3azsHwAxf02yNJ0MNexE4Wdw5GDooxQiz0sBUxE+8ctlsCu3CHoqsQTGxk26bh6kMPOxEz8S5Gr8ugwhEmtq1iYt6IYYRhIWLRZSCruxSq1fUFJgwjMQ9pEaviDRgmDAMxD1kRMwGTeFdCFW8wYMIQFvOQE7HYYduAgR09GykwYQiKeciIWIzxknjnQEV/YyPsYjZhCCDkRaz6vYOKlUzIqxDiCGkRq65DSMDEtrmhbJW1CFEwAT/BdluhCniwYWRbObse9yFEEXKWWPR934I9KUdFaMGEELTKIWWJxbDZDqgCDlUY2baDXaelCCGEhCUWO2/UXIVU5ajwiDXMIi9DCGDQRay6D0MaJoSAezGo7gQTMAmXOm+qgIcmjGzbKl7HQcOgiZj9cMo0I//XCBVDGUYMsp88KCIWwzUboWI44YnBCsMNuE8s/tCVUDFcMeCjfAMqYnEAQ41ADH8MaORiwETMBEzDx4uhYqRgIxPy1RgADIiIVQGPWAyIkPu9Yye6EIuhYiRisXj9+xX9KmKxE6f6wCMbS/s7atFv7oQahVDhhH6LWvSLiMVEnjVQocIRi5mQNyHICLqIxSHIHVChwjWmB3t1z6D6xLJkHhUq3OEtUSdBQ1AtMStcOdRcCBXeQZZ4brAWEg+aJRZDKUaoUOEd5HIGLWIRFBGLHTk1lKZCCZYGK/MtYHdC9G+oI6dOp1ehFOROTA80qT4YIlb9YBWBYCcT8XQEgIDcCXFAwwgVKvzHtECHpv22xKIbUQ4VKoKDuf4uAh6IiFU3QkUwYYLdP1YcdvPLnVDdCBX9ACP8jHAptsSqG6GiH+FXtMIfSxyya3KpGPKgMO0GKIQiEYsPdVkMFSr6D3PE1VB9hiJ3Qu3MqRgg0HOsc3092GdLLFphI1So6H8YlQxJ+2yJVSusYoBBnbxcX0JuPlnigbLCPT02WK1Wtu9BZ2cXLBYLAgHxWNnGyg+zuVPgDpjPaudT0e+gTp5P1tgnSxyIFaYLzu4m6X1zSxt2HTiKrXtb8eWeOhxqyUBjUys6urWw6uPZ8Rp0R2dj7YVluGVhke98exjf3lrGl4mTTS0wd+sYXxxs0KM7PA3vXV+HC2flBcjHysduBK1WC42tEwkRHchOCsO09Cb8eGYyTpmYAWNWisRFoqdjVfgNn6yxVxGLVlhx2EN+Ab/dewzr3jyEdw+koKmDfWA1A+Z68QTdgoiYRGCJzsM159rw/K2T+bklDtd8qYzPZufrZHy2Xj4tmNWMHY+75nfhoesmC1zu+Y5i7ZZDeO/gaJd8rqqJdC8ZZA3jMcQBuggYImMxNbUBv5mrweIFM2Ew6CXLLb9ZVPgMeorTSk8H+CJiRVaYi6OlrQP/+/xevPhVItqba6DpboKtx9LnlDp2/a1aDUalnIo9j4cjIzVecCP0en1fvucY39e+8EUgKzMbe9aMQUJcpBs+MyvfHq/lUwquUxuJOjwVZ2fXYP2NeZhamCWcm6BaZ0VoZCJO9HSAxyumxApzoTS1dGDxoyV4e3c4NC2ljKQH7jxIg87GmvpMLP9JPB67cazgswpNNVOCnO+qxw7jnV3Ed9g7X0QmbpsfgdU3TBT4dDqdm/JFeOULFFqqXWale8KTkZKYiA3Xh+GCc3IEMdNvVC2zz7ja0wMivYnYqxXmF6Szy4Ir/1SOLd92Qtt2RGAWDU/vyTR2FwEanb35jU5H8YoYzJ4xWhKZxNfZjSsfq8CWr9uhba9wyedAzJpyxIzFp/dE4dxpqa75HjmALdu1HstHiraRexCRLAgc+hhEhBkQaatFhLYTYcw96Ow0w6xlrlFXBGyWVvtxnQ2MskesN1e8zJ0xxCIlLRf/ujMMMwrTHVoIFR5RzK7hXHf/dCticdRkKzyAX4SX/mHCNc8z8bZ8Dwp49MguIhcGtAbYotKRFAXMHtuEy2fF4sdnT0RMlEHyVSW+vx/ENRvCoG3cS22va7ExodnCUxAbFY7Tx7Rg4VmRuGzeRMRGh/fle4/xbYyAtnm/ILg+5WMFtOmigcg0ZMRZ8LNprZh/ShRzAfKYOxKGyIhwl1azq6sbdSfbcKD0OD7e1YK3d2hw4EQkbJ0nBfeEyG1O59Iw378nMgvzijT418MzVKvsO9ymanoSsdtFAEkkVPnUVM+4eS92lNRCb22DRSY2+wVj1i4sAbGJo3Hj2fVY/ouJSB0V55nvFsZ3qIHxNbvgY8dpI6GNGYOfjq/C/VeNxZTCMR75pjO+nSWMz+LIR24pRUJsEanISonH3Re04JfzJiAuNgqBgM79+Y4K3P1KLT4tYzcGs/o6WFioz/HcrOmALWkqvl2pZVY5TbXK3vE2E/Elrv7hUsSeMtV4x6jsWBPG31KJnuYy++eixSGxaTUs3mtIQnayHs/fkIgfn1XAeftYHG98BJ3WJoS34hJS8eDFrbj+59Ng0Lvu9XvjEwTEXvfE5mP+uDo8u7wIWaMTXJbNX/AykDDXbD6Eu//GXJCmcuhYpEMuZp2GRVBYROa2eVasvnGqKmTPcBtucyfixXDRoeOV/EbxcfzisRrozUeZdeul0DNX12ILQ0KqEW/dGoU5M7L6hLZc8f2luAq/fLwa+o5jDnxCpAHhiBqVjU3X2XDpeYU+8b3xCSvfo47lE9xmtlkik/HjSeHYvGK8YHU9NefEpxXcmR50sMEXK3tPgx3h4WEIY35ymMHgUXjyMN6azYex7HX2vvl7oTDcRRJ+oy4W504fg08fzlOF7BnL2HXqszyaOxGTLzxH/hmv3JUvm7DqteMwWBvQLQ6A2a0vWZUc/N+v43H9RUaPYpPz3ftnE/7wugs+Mc770KU23PWrQp/57tlkwgN/ceQTXAdNGKKSMvDfB7MwIS/B54GIK/5YiVd3MFF1VNk7pCK0Oj2y2EDHkefHehWePEpywT378Y+dHdB1VMJqs5+fohg2rR45mWko3zBNFbJ7uOzg9RGxK1eCX4TfP3cYj75dDZ2lEXwEV7Akmgjk5eRj55o01lEL9yg2Od/yZ0vwxDsnHPgEwbE4b1pGNvatzUJiXJSDCDzxLfu/Q1jzbo0Dnz2Ml4XLzwReXTFdUUeKi2n7wRqcclcTdC0H2a3V21nTa3tgSJ6C9teNPgmPl/PbfZU49d5u6Jr2SHz2G5cFWNKL0PiyURWye+Q6J827UtrF8je8g7R6yzEm4Ko+ArFGZGD5JRkofd6IyHC9fbTMg4B7+SqZgNkN0S3j01JHMAmL5o7C8Q3jEMciDQRPAuZ8f9pcyQR8woFPr7WiO3YKPr4vRRAwdw98BRfRtHHJsL1VgPHjxrIohla4cQmWHi26anchYVG5cKy3XA8qJ93gMyakw/amEePGFQg3rL2TyUTOttaqXUi5usInvhGKxc4fuLqiV/EX3KK+83klbt94nPXwm2SCYxYuKh//XJGCx3470SfLwfne/rSR8ZXa+UTfULCYUdl4dWkWNt45Q+DzJF6H8n1ahjv+XCPxkVXTa1goK24Cal9IxpxTMgWxc2HQjbZt5zHhs+7ubngDnYOs6L6nJ+LSs/JZpzVBErLVpkNL1R7k/3q/wO+Nj9/kxLf/6UIsOC0WPU58Dcd2oPBa3/hGIGY7f+DQpjq7EnTBTccbUbC0HoaWEnSLgtMzAVti8rHv8XRMMMZ7dR/kfOXHWzDullIY2moYn51QryG+sfjm4WScOiHVZ39V4ltSDUMrlU9r78CxRlo3qggtr2bbBS3eXPxG+8nd+/Gv3Z04b3IsPngwX9H56Pu3P38Yq98SWxHxpqE4+ILZE/DW/2Yr5rt+zQE89596Bz6bxoCFc7PxxooJaiJRXyTKoxQOpm7lypXkSgjuBK/gpEUm6NpKpF4+WWBLdAHKn8lCfpY95qvkgiVfVcb4jkoxW7LAluh87H8iHVPykxTdEALfojLo20qFpl34QcwCI3EyOt4wgmJp8pyJ6vo2pC4uQcnhUmhZXLu02oxU9hNOK0z0KcTGw2bzTk1GR4cFnx/qhtZmFlwB6tgeONqGSZl6TMqN88nn5nwLzhqN2oYOfFPa48C3t1LD+Nhm9I1vBOHEqlWrvuJvnNUiuBK86Z25dD8TXBmzDvbDhCafCW7v46nISYsRPvOlciW+JYyvtZzxiTcEu4W6o/Kw408pKDTal3LzRcAOfG3l0g1GLYSVle/kRuZzisdIP5TxzvtDDyyN5Uwk1JwzgVtb8bsXW5mAWqXkHG/gLskj1+bhl2dGsMGXCCG6QF+nAZ+F69qE/Axfc5c53/qbx2P+jGghdVQYJCI+y0ksXNuGlrbAc6GHGRbI3zgrRnjQNAnzrU8r8N33dVJyDLmn3WHpbNw/GpPyRoEf5wvouDeLj+C7QzI+duZuQwreWBJn7zgpGGxwxadnfJaILOx+LBXRkeF9/HPyLfc+mYD4pCxopY4ZK0d7OSYsqRL8b6XCe+2emRiXRy6LTeSzCRGMSbfWCnxKb4z3H5yO9Iy03vJZ7XxFt5Qp4hsBoKWvpAUsJRGLuRIJ/EL+bJ1VGKrtEcM/NOiw7IJYzDsjWwpT+QJe8Zc+1ePIx+K2V54Twfy+MYp8PonvSUc+CxuOXnd1DCbnp7gsm0EcmKh6eTKz1rmC6AnUKtRXl2L1G2VeO5JycOF9/8w4IHZCLx/rmB2v2Ie1fz2qOBIi+PgvFLHyTRRaFeH3Mr6jx2vxyn9MqkvRCxLwNP5GXstz6A9dyHl37YS26YDkt1JHKXdMOh7/7XjFYSo69sd37nDk01gwevRk/Pmuqf7zNTuWb2JBDm7+WYFgTd1dbBKKnjUB21YlwhKeKlk8Jh/c/noHWtvNipptniW349FRsBiSe/nYZ0vfaIfZ3KWYj8r3wYpwqXwkZZ21GYuetQhcqlshYQ5/IVfPbLogFVX1+OCAzp5eCHuzb4mbiL1P5QsVqCQAL/Adr8eHB/W9fDQ0HTUWB9fHB4VPcCPiCvHdYzleB0UIJPCzpmZg/vQYIUYLHROMhsWj2ypx8QPKrDHnm8zcq/85m0VptOG9fC0mXPxghV98552WidmFBhaTtpePBpNsLPpy6QMnFPMNY0ihNrmCppGVu+yRCmjbWQzVZrdmVk0kHljQhqjICCiFwPcnJz6bHisWhCEhTnm2mCs+ciOeuUqHiHCDTxw84f6d+8bjwlsPIynaPqBAnbOKk2Vob89DVJTvv5XzvXbnODTXliApSsZXf5DxZfnF988HinDRbX8XoicCH7tZj9Z+h/aOJL+uxTCE5E7Ys2lttmnMyu04Vt2AnBuqoGk/IoV5ElLzUP9akU9WTg6ymseqTzK+SsZXIfIBEYnj0ba5wE8+Kt9xGV8PktLGouaVSYpjqe6O9zcmG+p8wxTCEDSvDSNVzI1PkZUzSbkBPWHJeHN5nDS0qwTEd/2TJsZ3pJePNYuvLgn3m+/G9RWOfKx8m5fF+nVh3R3vr0BCnW+YYg79EdwJ1nwJb97fz2Ke4iAeWbnkpHjMmZmtOLRD4bKOzk7860CkxEdpkNEpubj4HOV8dLyFDWW9v6+Xjy5lSrIBs09Rzqdi2EBwKQQRs87V1Of+tgvoqJeSx3v0CXjpujC/rBz5dS+9s4/xNUl8Vl0Ynl2s89tqbnhrN+Nr6C0fC5k9eUWKS76uri6EhYUh2KBYM4XqPIEv/nLy5EmptaHvREVF+ZWV5uq3BGtKU7Az5ZxdxGBONHADI/3hPvHJ3GsPJhwpL2EhHY19lm5MNqxvT/HbB8u99gCOlB+W+HpYBMH2t/wA+A5CXj5trBHdbxW55SssLERtbW1QZ2sQny9u0JlnnomvvvrK4TMeGvPnt48ZM4YNc3cIr9va2rBv3z7k5eUhGEhKSgpKHTU3N6OiogJpaWkOnxcXF+P8889HTEyMTzwkfLppc3JycNZZZ+Gmm24SfqubPpSJFh7U08hH/cnWBFNdh/3H2OyxycVndAlH+VPpjA+mOrPER/fKJZPq2D4/AD7H8l1xutlj+drb29HQ0IBgwZsFJpDQW1tbBQFrhEmivXOsXnvtNVxxxRXwB8H+Lc7cZrMZwYA7q97JXEvalODEiRP4+uuv8cQTT+C0007Dtm3bXLVARtIvKcC4ZeteoenndW6LTMedv8iCv2uObf7Ika8nPAl/WGQMGp9QvoUZfvP1F+iGeuyxx4TX8rLR57///e8x3BFM14TXH9Xdd999JxiR6upqV9fcKIh4w4dx0LBRIQKJnNZZGGdMg7/YuNWRT2+IwqQC//k2fezIR7kR4/MyPH5HaWfPW5Pq7Ybh/3/88cf7tA5CBh27AGVlZSF348kxEAMpSoVuX8TR7kpkZmYKfQSnUctpxGjcXkWuA694G35QYHcl/PWVth+X8wHnjG0NiO+7Kke+WcY2r3wXXXQRmpqaXB4TGxuLzZs3o76+XvosOjoaV155peDbuQI1u57OR+L88ssvBXeCl413bPh+2bJleOeddxCqIHH8/Oc/x6JFi6Tf4SvIV4+Li/N6HHUm7733XiQkJPQxNHTz03nJ53/vvfeEOueJWXx1qB/+8IeCayFDgn7PwfIJwoRK3lRro/CLc/zv2R+rroMjXzh+cWY4/EVfvggsPi/W43coivD00097PGbPnj0OlZGamur1O57yFqiCqRPCZ0fzvVzE7777ruAbUtMYqvHeGTNmCAagP3H99dcjIyPD63E33ngjnnnmGakuCV988YXQP0hMTORGxaj9fGd1BrpkU/kjR+PMomT4i13f18KBL3wUZs9Ih7/ow8fKd1ZRqsdm2ZdOGDVLcvgyn81dc0sVXFdXhx07dkjlIsF///33koD5RXjppZdCOhttIKZD+dKRpOtBRmXBggVSnfI6pFZUVofx2i+/N+cKS5mK0PR0InfMaPiLz/e1QM5HbkB+dir8hTMfLUCSkTYqpIRAluLBBx8UXvOZKcnJySgoKMDcuXMdjrv77rv7RC5U9AXPENy0aVOfunIKXxq1u8pb43hGGCEpITIgB397aQvkfKNidAH1WuV8pNvMlKiQaoq5dVi/fr3D2sd33XWXUPkUIpJbEmoKyZVR4R1Un/Hx8UJ/RQ6K18uQoK3rjB8lX/UuUVuPQFBaH+mwLGRiTGDTzuV8zMYhK6wUoYZ///vfQjMsH3j53e9+J4h3ypQpQieGf05WePny5WqCuwI4j1g6WeYEbattlE7qNbGKzU3uQiBotlIPlfNpkRNZg0DQIudDDybk+u/q9AdInBR1kIuSetDh4eGScFesWCFZbDruww8/FHreoZjzERHhX5pnf7hHfEkFGsKXw7lTqGcHOZQ6Icb/SAKhpU3eMbAhIc634Ua3fO0yPo0BmQmh40tSJVdVVeHAgQOSiOmzNWvWOITXqJd9++23O/Syn3zySdxxxx0INXz88cdCE04hM19AIclf/epXGDduHIIJ3qrdd999ff53ySUOi2Ma9c53kD7QgLeTxsIM/vuvwvprcmOlj0QU6hAqoEq+5557HMJpo0ePRlFRkcOKneTTzZo1C5999pn0vYcfflgQ8QAkyfgMKtd//vMfYVOC3NxcRSL2ZWCJykKdugceeECaf8gny86fP9+h3vTOy7GFGwIUsVP5IsL8F7GGL3IswYLOrtCY1cArccOGDZLbQJ9R9IHgvNzso48+KuQA8Pc0EPPNN99g5syZISNif92byMhIRceXlpaipaWljwtC9UCJTjRotHbtWphMJiFcSi4F/Y/CltRR5sdy6LVO9ddlCWwiotbpgpi7AvP7dDoZX1cbOiPHIxRAF+DNN98UXssHNSiQ75xZR/879dRThREtGpHixy9ZskS4YCMJ1Ff40Y9+5PU4nujDBUygG37p0qV9Mtr0ep2j6Do6AxOx3smQt5sDi06E67WQvDPWUTR3tCMUQCIld0A+IkcjXa7CifwiUNiNNg6Kd5JPScPgoWCN6TdRx45yn33tqJHvrKTsvmaz8Trlw87nnnsuPv30U5c50PrIyDDIswVONLQgEESEy/k0qG1oRiCg58DJUX2yA4MNsqTU1FFCj7xDd9lll+Gjjz5yeVHp/2eccYb0nl+kRx55RBooGWxQGVevXi10RP35bqDxe/kgEH9NN9Wzzz4rdB7dJfHr41hHqYZbE/ZBTbv3JA5PiNfWolbi68HxzjEIBDGolcpHN8XRqpMYbDhbYQLFMi+//HKv3+U+HoG+T74fiThUOnhOAwk+w1cBk2Ull8KVpafhaN5Jpv9Tgj1Ff+h9j9OyZA7nTgxvPWkTe0/0xRpzYCLOiu9ELx9wsj2wkFhBqlXio5viSJv/KZ3BAK/gLVu2OIjOORfDHeS5CcRFzfHWrVsxUkCuAWUPUpzceaPZOBxUt5S+Sh05EraHm8SkLcxO6pbHxZrbrSwC4H8SyOQCypOQ8ZmZn232fwBlcn5SbwYb29e0aDGYeQfC/MGXXhJeB2OwwtVgyXAHCdYZ5Cp8++230kx4usZkeWl0k/oNHjMIT8szN9ADBzloaLey2v9Y7PRM5rPq5amSGoHPX+FNHM1+sKF37Nxs0QmrRA4WSGwUgJdilGITR26Cr5v8e1Qvu3btEkalQnEEb6BA9UGhuueee05aiowvcTZt2jRPCyqatGdPz62BThbnM9dg6/Zq+Iszp+WwEsliueZafPRttd+W5oypOcIghwRLC3bsr8BggCpx//79qKyslG5KqmiK95I/56qJdLWRn8dXrOe+MCWKj/Q1JagurrvuOmGSqDz2Xl5eLojb7VochWPTy/VhsiWlerqw+fMm+IuczGRodDI+awfe/K//Ybv87NFwKF9XM/62bXBG7agSKbYrT+ah5B6KAdNrYUFAHzbqsEydOtWB+4UXXhD2vlhjCsn5C2/8o0aNQiAIxNXji45TXjaPBXO3guLvNEDiIu/bpI8IMzTmJHahrMXuc1LnaVtlulQgpRaUQmxZcToca6NHdtkD1l+Ux/jNxwLZMLLylTbz8lnw1nY91mJgQWWnThkl78itBAXfCUp+F32PRvB40J/ekyV///33hSFVT6DzUIKRL4n/cpAAHnroIVx66aUeuWk4/OWXX1a8+iZNCvjggw8CzqEgwdKsjfvvv19onQh8yJkGO2iigVM4r4kcM9PPZ3bjTxX0YY8glNaWVpgq65CTkQR/cP7EJrxQpZP42to7UH6sDsZM//jmT+rAk1Q+m53vaEs0mlvbERsdOWAdIjoP5QwT5CN0ZJmVxkjpe+edd54wqEDi5d+nG+KCCy7w+n1/85G9hc+oXOTq0OYPgjX1n24gyklZt26d0Feg91S2Q4cO4ZVXXhFixjIIa7E1XvnDDGHaT29pqvHk38r9Egid7IaLMmELH+XA9/Q7Jr/46ALf9LOxsEXIytdeic0flg14j54sGT8n7adPn+6QK+wr+PE0J483v7Q/fPgwampqPDb5gTbXQwG8E8fdCh47JitNk3npZpG5FSYtayJ3Fo0fg+jICGnZfnIpnv/c7ocqrTS6uNMmZCI8MhZcY/Rk+ec+i/SLj35AgTHNbnXFWJvW1oU//j2w4WznuK6nuWVUgbSQBzWZ8lkalE7pb0SBvkd5xnIRE/hkUzmCFVJ05SIEMyLiqpyu+H35PVQHWVlZuPnmmyUOLtzTTz9dELTIY9Iz38pEry6adBJ/+ZS7ABq0tLbgq50mnDYlW7HFEx7yUtiBd7/khdagmflk3+w2YWZRtl8WdMGkRrz6iX3xb0rPPFyjQU1dM5ISo/2aTkVLTZHvxTsP9NrT76H0xIULF0qhMcoBOPvss/0WAZ96Q4uqHD16VAroU/Pp3HcgXzBQsVHWHPX6nUGZdTSCFiio3K46nDTXkCc/8XL46s+TaMmloKQpSmclQ0M3IrVYe/fuFVJeQUtZ0V9WQeWHymuMhUuOC001Qcus8rSJ2fhu3VQoBV2E7fsrMfP3LBTW2SDxFY0bg11PT1PMJyw+UtuEzOuOMAf7mPCZhl3wheeMwl/uO0Mxn7uFAd197m7MXukay/6cz5dFDJVA7r8He0FB55vPXUdeSR/CUx0z/kbGk8iZdo7PG43UOA16k9o02F7OxFPX7NdzIk6ZlIWExBRBvMIJGd/uozZU1jQp5qMfnDE6EXnJWvDUUQ0zx2/sTBSei6HUSrkThbvP3V3oQFfM8eV8wRQwQS6eYAqY4CxYdy2uEt/cUx0z/p0Cn/jmCN0166+JhVUc+KAlVLUdx7DggSNSk+sreM995U8b0aPjvrX/fPbv27D2qkj0GGKl8mlaSnDzU/tH/CDBCMYu+iNZYhLJpT8Yi8iEHGaNucA0+Ka0G/sOn/BLdDcvnMlGtHPRqzENviuzYG9JlV98F84uQGxCJnRanq7HBgm2gYXbzIoe5k1c7qy3P4uHeGoJgs3na6LRCEEx/eHrExvZrlywxpt34uYXmR9rseft6jQ9iM+Ygvo/GxX7gMR3/6bDWPVqifCET4FP24PYtCk4+bLRr+d2vPe5CRc/VMbUIS7tyhyVqUU52L7W97WU6bwlFfWYsrQMcTpx7TTWoW3T5qN9Sx6Ugs67bVc1zrunBLFh3TK+PMaXD6VwxSd0aKPGoP7VCVAhYTq5FNydMLFdI4nupoXTEZ2cKfnGVpsWDdUl+MOmg4p9QOK7b3EBDIk5kvWkR+w2nijBqo37/PIpF8zKY5GEKcLNAHvhsaOkFf/5+rhPUQ8++nPa3WyQoe0E6pvMaGg2o67dgLWXdyluIXiSyqw/tKOns0XGF4ZnFpv953vAka++Mwxv3RY/opOEnNDo4BOL2MmDyu8tiYc1IkbqROlsnbj3nS5U1SpbK4H46CK+ej3ztfWx0pxPHTqx8l0Dizg0K+aj4/99txXW8AzBTSHf2NBdj3kPt6LbYvXoVvBx+F89vBctNfuZrbTfRFoWx45PzsV1PytUJDoegP/BioPQNu+XHg4p8CUZcdWFRf7x3ckMhgNfD/IyxmDWdO+L8I0g7OQv5CL+hP6QNZt7WjqKsieCZhcTrPSw7GYTxi0/LiVp+ArB1/5hNsbmZDBue1SCghN6dpHybjEr5hMmXU5Kx/nTI1kLaxdIdw+LqrQdQuEN+6Xp3e7w8fZqvPZ5K/vhFntnkx7RG5mFj1aESaNDvv4uOvavH5uwdRclTNm/J/BFZWHrPQHw7aEFxe3fo8bKGmVE8f0JQZkCNIzwCX8hr5Fi+sPzOL9dk4ie+CnSxE8Lq9T2qoOYvszkVShycJFufzQbPTHjwCemWmx6dNZ+hSm3HFTEx8v3/qoJ0CQUSeUjPZdXVGHh/dvlozkS6DsnalvxQ9ZMG7rrIDUAWh3OKzLglIkZivMfDpTX47J17dB310oPxKEa/UlRAqYXKuMjgTrzkXdED6+8eX40xmQkqQJ2RDF/4eBOsE1YQ5VEYGDq+OCuCFj0yZDX3c59h3H5A98qEh4dGxsdjk2/jYJFGy3j02LP/nJc+oc9ivkIn9wXDYuh96n0Bk03Nh/MQOUJx8W1iZdEkf7batYC7Lavdwx7J1MTOxYfPDxFyu/1BXRsFyOZuPwE9G2l4KscUCdYH5+Lfzw0VjFfN/MdJi5z5KMYe3rmWKy7Yayi1moEgPzhYv6mN/il0ZCAd8qPPG9mBn45O0mY7UGXQ4gd28x4fZsZS545pEh4ZLkWzcvBvNNzHPmYi/HmF00s3vu9Ij7COVNS8bt5EbDRs4+1BhZFyUfbi0lIT+kd/hT4NFpE/+oY9PSQdJv9BiALbo3Mwd7VCYqeMU3HdnX3IOrySuhbDzO/1S5Ug9Ds5+DQukzlfBaRr03GxzrC1tgJKHkm2+MkyREKB506t0/SWvzcDXjtjgKk5Uxj7+3tLzXDOmsj1r1Xg+ufsPugvsRCOd+/VuUiJWuy8LBHic/SiKf+UYtb1ivne+qWIuTkFeLWizNRu7EQ4WFaqUMpLEhnsSHqFyY2uL+bdbdEP5M5rhZ9DDbdlIrCvFSfmmlhSS22UUyabghd024muF6/tduQii23pSAnPcGnqIsD3+WMr7mXj26wbuZXb7s3HlERYaob0Reb5G8c2jt6nBLbOcyJ5+Pr4ZeVo6d+j+AbE3RaesBiDGZPz0bxw3k+j8MLISSats340LC3l48smTaC8RUxvjRFfPw4HnfmHaCSikaMu4lZ4I4ySSDCM/U0Olx74Uw8vyTFp84SP8e3B+tw6p01dgtsk/GxG2LphaPwxE1T/OLTMT6ryKdnO0tYCp65IRM3/DRL7cy5Rq4YFhbgUDuiS1Es/4wqm8TRuIk1k9SREi0oRSy01lZ8+t8DSLnyEDrElX68hcyEThc7pnFjBizxMj4r8ZkZ33dIW3xYcDX4egPe+Dj4ajF00V/8R4VdwOa+Al4wa5IgYB6T9QTuGtz+3DGcetth6NtLHQXM+BbOHSsI2F8+ZwHfeXGsKmD32CkXMMFVDX3i/AGJI4w5fW2vsIpNmMwqu9cVoCaxseoA4haZ8O7nNQ7Ll7oD8UWEG9C0iVncuEnQCULskfhOHNmD8IWH8Nq/qyTXwBv4ehBWpv4zl+/DtU+aYDCXs05Sb8tBFnPB7El4+55sr5ae++aNzV3IuaYMq7fsh66zjvGJs5x1xBeNy+ZNxht3jFHGd21pHz7yqS1hqbhzQSwevm6iTzfECMUm5w/6dJ/5ELSrb/OKjb+yEu01u0W/zv4/wYoYojEtPwP/vnc0UpO9xzXJKnV2W3DFfR+j3ZCDxqYWQYTJCTFID6+GTReGVb+eguz0BLcc3Lek87zyjyO48gVmiZv3Cp05fi8ZRJ/1xh/psX7pDI+Ckz+1csm6PVi3lcWgW0tZy6CTfqudLwV3XRKLh66dqIBvF+PTueCzoTsiG8/ekITfzM8KeorkMEOusyV2GQNiotjKdnNc/Y9X8MTfbMeBI9XQ9ditn0BGz1xm7oE1ugAXTe3EC7fkISUpzqOY/Zk8yr9nP6cG27aX4ZK1FtRWH4W+p0Ma6SJaCntZ2GDBG0sSsPAH7i0wL4eFxbce+csh3P9uBLobDgrRE6ucj8VWLJFj8OYdGfjZOam+871jQPfJkj58NBpnjZuIbStjcNaUNNWF8IxiVqdznT90J2KawvsE3IBfuJvWVmL9x7XQtVcIOREcfLi6JyYP5+Y04MXl41GQk4JAIRculWHLh4ew5M9m1DSzAWTzcSYHrWTduA7CRxlxYE2WEDXwJJCa+has/sv3WPNxPCxNJYL4rTKviL5G3DGpuShdb0RKYnRAfELHmIXRRqcV4fAzGYiODJNaFBVucTW79hudP3QnYmq/yaVw245zIe8+VIOZKxrZhSpnEup2vPDETs16WDJGJ0Vi8Wkt+PX8HDYEnc78YuUXq6m5DZ9sr8Djf+/AZ2VMRG3HWGewXUi4t/U+dkRIJbWwGPDPZ9iwZeVUh+FfLpRu5saUHKnBmx/XY+2nOiHRRmOuFpLte2QuuN1a2oQY8K9n6fHibRMd1kRw5vtbMeP7RIO6xi63fJTh1hNfgLvmReKh3yjP5hvB6ONKENy24+zivMV2F8MDeCyWLsANj36DZ78YBV3LQUFQzhdOmOOpZZGJCBaXZb6uMdmKc8bUCsOz+cntSB+djOjoCESGGdDe0YXW9jbsN7VhR0k9vjZFYX+VHs3WGKCDCcPSIhTd5kpshngkj0rC5w+mYrwxRRII3+85VI3zH2pATQuz5h2N0FhPgt95ffk0bEAkHuPS41D84Fg2iBLdh28345vP+E40Mz4zGym0NnjgY+WLzMRp+dH44P4xiIuNUgXsOzYyAV/t6h+eRDyH7bbCB3CrXNfQjJ+uPISvjhigbT/m0PFzOKlGdA00NPWGXfCI5D7P+hAOIrFau9j/rIIi7N/rexjNgu7RxyMuMRUvXKPB/5w3XoqQ8EERKt/jfy3Bra9b2I1W4uB69OVjlpKJLTPRjLdvz8fMotGSNeeuDPGtfr0at/+1kvFVeuSjH2eLykBhugHvrkgXXCtVvIoxVz7ULIfHHpWnDp4rcB+x7GgdFj96CJ8dYd5I+3FmndoFtyJIM88F2MWhFSx7dnoMnrpSh5/OKnBo4vlrahVm3FKNPaV7WMevG85PdOAthY21FIhKx+l5Omy4KRkTxqY5+OE80tDdbcW0247jwEE2wsjGAS1Wm2s+6vBF5+O8sQ146dZxGJOW4BCtUOEzTKy+ct3905uIF7PdBigEF3OH2YwN7+3HY/8chbJ6No5irmeCphkZNsWCloShY9bbkCisnrNwejPuWzQexqwkB/ESuLX815cV+MnqTiE/18ZiCzw7TGgI6MbSRQgtQVaiBsvm9eCaCwsQz5p5Z7Fxy7n5o8NYuN4m5A8Tn82Bj7UJtPgh48tPNOD3F2px+U+yERMVqUYdAoPLDh2HV3PAhEHD0AnwA3IhNDQ24++fleP5D5uxuyoWzZ0U3W+3X/2uelYSp6aVFpegJWdphU32v6jIKIxPasKCaRZc9qMCFOaN5uWz/xAny3b4SC0uergKB46ym6azlgk/nhlu+5Mp9RFxGGU4iVNygF+eE44FcyYw/zTSJRcPle0+WIGL/hiGI7WljK+xl48daohIRIruKGaOi8GiWdE4/+w8REdFui2bCkXwaIUJvoh4JdvdhyCjpbUNFdUt2MvEcbQ5GsdrGthnnTCzXv7oUTFIZAMeY1NsMGbEIS87Bamj4uRlshfejTgam824+enDmJDWhYgwHYsb65AW24bstDgUGNORnBiFcNmjVr3FqmkGym0vHMXkrE42MME6dWygIj22QyjbuNx0JMZF9Xm2iIqgwaMVJvgiYq/hNhUq+glerTDBq5MmJgUN9EqqKlQQVvlykE/OmmqNVQwCfLLCBJ+6y6I19umuUKEiSPBZb4q6zcwikzU2QoWK/oXPVpigNHB5NVSo6H8oavUViVgc9iuGChX9h43eQmrOUByFF5Pmd0Dt5KnoH7jMVPMExeOg4gnUkJuK/sAqpQIm+DUeKobcyBoboUJFcKCoMyeHXxkpYshN7eSpCCbmwk/4nVYldvJUt0JFMOCXG8ERcHoVcy3IrVD+NBkVKuzw243gCEaC6yUQFyJUoUIhSDd+uxEcAYtYbAbUIWkV/iAgN4IjaNnazK1Yw3ZLoEKFb1jLBLwUQUAwRUxhN5qTp/rHKrwhYD9YjqBN+hLDbuQfm6BChXuYEAQ/WI6gT/5iFpks8Q6oUOEawmO7EEQEffqtWEB1IESFKywLtoAJ/TKHXMxCUiMWKuSgSMQa9AP6dS55f82UVjHkQAJeiX5Cvy+IoIbeRjyCFkpzhwFZ1YMJeSPbXQUVIw2bmIAXo58xYEvTqEIecRgQARMGbHEw8QepWW8jA2sHSsCEAV3hTvSN1KjF8Maq/vaBnTEoK92pUYthi36NQrjDoC3X6O25ICqGHK5WOks5WBjUNUfFIWp6rIIRKoYqTGy7pD9G4nzFoC+cKy4BQNlvRqgYaiDhXhKMnOBAMOhLl1MFiGl5auRiaIGu19zBFjAhZNbfF3u0y6BOdQp10PWhRJ6lYvrtoCPk1uFX3YuQRki4D84IuSehyNwLNZ4cWqABjOmhJmBCyFliOVSrHBIwwR4+K0aIIqSfSaVa5UEFX1h9eigLmBDSllgO0SqvhJpENBAoht36mjAEMGREzCE+IJKGrI1QEWyYEOKugysMuUdc0tCm6GLQPD4TVAQDPGyWO9QETBhyltgZqmUOCPzxbmtCJebrD4a8iDlUMSvCsBAvx7ARMYcqZo8ohn3GxUYMIww7EXMwMc9hu8VQoxlkaYthH6woxjDEsBUxhxiamwO7mOdg5KCYbe/A/jSiYZ2PMuxFLIco6IthF/RwXPiwmG2fwC5cE0YIRpSI5XCy0CToofhIM7KwlJQzIiyuO4xYETtD9KFpm43QFTUXLVnbYno9UoUrhypiNxCnThlhF/ZUDLywTbAL9oi4Lx5JLoISqCJWAHEhcaPTFo/ecJ7z3hVM4r5R3Oh9k7jnltakWljf8f/1wahnyDNJwAAAAABJRU5ErkJggg==", + "name": "sandbox merchant", + "address": {}, + "jurisdiction": {} + }, + "order_id": "2026.020-03R3ETNZZ0DVA", + "products": [], + "exchanges": [ + { + "url": "https://exchange.demo.taler.net/", + "priority": 1024, + "master_pub": "F80MFRG8HVH6R9CQ47KRFQSJP3T6DBJ4K1D9B703RJY3Z39TBMJ0", + "max_contribution": "KUDOS:5.5" + } + ], + "timestamp": { + "t_s": 1768885088 + }, + "minimum_age": 0, + "wire_method": "x-taler-bank", + "merchant_pub": "74DV5N6T2ANY1DJFMD41BN7KJYXK70S18CM22TQABEYMA2GSDRD0", + "pay_deadline": { + "t_s": 1768885388 + }, + "fulfillment_url": "http://localhost:3000/payment_gateways/taler/17", + "refund_deadline": { + "t_s": 0 + }, + "merchant_base_url": "https://backend.demo.taler.net/instances/sandbox/", + "wire_transfer_deadline": { + "t_s": 1768885808 + } + }, + "order_status": "paid", + "last_payment": { + "t_s": 1768885096 + }, + "refunded": false, + "wired": true, + "refund_pending": false, + "refund_amount": "KUDOS:0", + "wire_details": [ + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:0.38", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + }, + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:1.28", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + }, + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:0.64", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + }, + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:1.28", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + }, + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:0.64", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + }, + { + "wtid": "4E2DRXCHTBPVY2F72CZMK31X3ZTZTJW2RG4NF5KQA5T3C2AE2KVG", + "exchange_url": "https://exchange.demo.taler.net/", + "amount": "KUDOS:1.28", + "execution_time": { + "t_s": 1768885096 + }, + "confirmed": false + } + ], + "refund_details": [], + "order_status_url": "https://backend.demo.taler.net/instances/sandbox/orders/2026.020-03R3ETNZZ0DVA" + } + recorded_at: Sat, 24 Jan 2026 00:55:32 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/requests/payment_gateways/taler_spec.rb b/spec/requests/payment_gateways/taler_spec.rb index ed9969e583..0ddc88b927 100644 --- a/spec/requests/payment_gateways/taler_spec.rb +++ b/spec/requests/payment_gateways/taler_spec.rb @@ -3,18 +3,24 @@ require 'spec_helper' RSpec.describe "/payment_gateways/taler/:id" do - it "completes the order" do + it "completes the order", :vcr do shop = create(:distributor_enterprise) taler = Spree::PaymentMethod::Taler.create!( name: "Taler", environment: "test", distributors: [shop], + preferred_backend_url: "https://backend.demo.taler.net/instances/sandbox", + preferred_api_key: "sandbox", ) order = create(:order_ready_for_confirmation, payment_method: taler) payment = Spree::Payment.last payment.update!( + source: taler, payment_method: taler, - response_code: "taler-order-id:12345", + # This is a Taler order id of a paid order on the test backend. + # It may be gone when you try to re-record this test. + # To create a new order, you need user interaction with a wallet. + response_code: "2026.020-03R3ETNZZ0DVA", redirect_auth_url: "https://merchant.backend.where-we-paid.com", ) diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index 81c26225bd..eac1eb1de0 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -340,6 +340,35 @@ RSpec.describe "As a consumer, I want to checkout my order" do it_behaves_like "different payment methods", "Stripe SCA" end + + context "Taler" do + let!(:taler) do + Spree::PaymentMethod::Taler.create!( + name: "Taler", + environment: "test", + distributors: [distributor] + ) + end + + before do + # Shortcut the user interaction and go straight to our + # confirmation action. + taler_order_id = { "order_id" => "taler-order:123" } + expect_any_instance_of(Taler::Client) + .to receive(:create_order).and_return(taler_order_id) + + # And fake the payment status to avoid user interaction. + allow_any_instance_of(Taler::Client) + .to receive(:fetch_order) do + payment = Spree::Payment.last + url = payment_gateways_confirm_taler_path(payment_id: payment.id) + + { "order_status_url" => url, "order_status" => "paid" } + end + end + + it_behaves_like "different payment methods", "Taler" + end end end From d748972fca6c918a936fc3a2cbc1d97d17643179 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 26 Jan 2026 10:30:11 +1100 Subject: [PATCH 163/270] Resolve flaky spec with defined order --- app/models/invoice/data_presenter.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/invoice/data_presenter.rb b/app/models/invoice/data_presenter.rb index 405afdaf1f..3b851bf1d9 100644 --- a/app/models/invoice/data_presenter.rb +++ b/app/models/invoice/data_presenter.rb @@ -95,8 +95,8 @@ class Invoice def display_line_item_tax_rate(item) all_tax_adjustments.select { |a| a.adjustable.type == 'Spree::LineItem' && a.adjustable.id == item.id - }.map(&:originator).map { |tr| - number_to_percentage(tr.amount * 100, precision: 1) + }.map(&:originator).map(&:amount).sort.map { |amount| + number_to_percentage(amount * 100, precision: 1) }.join(", ") end From f3428494fc8e2b4dc1d1445f9fbf0c6514fb42dd Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 28 Jan 2026 14:01:01 +1100 Subject: [PATCH 164/270] Better name method spec --- .../retrieves_a_URL_to_pay_at.yml | 0 ...eves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml | 0 spec/models/spree/payment_method/taler_spec.rb | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/{external_payment_url => _external_payment_url}/retrieves_a_URL_to_pay_at.yml (100%) rename spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/{external_payment_url => _external_payment_url}/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml (100%) diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml similarity index 100% rename from spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at.yml rename to spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml similarity index 100% rename from spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml rename to spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb index 25c619b5fc..1d9bf77ec8 100644 --- a/spec/models/spree/payment_method/taler_spec.rb +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -10,7 +10,7 @@ RSpec.describe Spree::PaymentMethod::Taler do ) } - describe "external_payment_url", vcr: true do + describe "#external_payment_url", vcr: true do it "retrieves a URL to pay at and stores it on the payment record" do order = create(:order_ready_for_confirmation, payment_method: taler) url = subject.external_payment_url(order:) From c115ab7a0d713bf44e8424de9e1b84c0e4ac2f73 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 28 Jan 2026 15:03:56 +1100 Subject: [PATCH 165/270] Translate Taler payment status to error message --- app/models/spree/payment_method/taler.rb | 3 +- config/locales/en.yml | 3 ++ .../models/spree/payment_method/taler_spec.rb | 32 +++++++++++++++++-- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index 273b11ee9d..d50625b309 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -56,8 +56,9 @@ module Spree taler_order = client.fetch_order(payment.response_code) status = taler_order["order_status"] success = (status == "paid") + message = I18n.t(status, default: status, scope: "taler.order_status") - ActiveMerchant::Billing::Response.new(success, status) + ActiveMerchant::Billing::Response.new(success, message) end private diff --git a/config/locales/en.yml b/config/locales/en.yml index 1d081df210..e34ed5c0d2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -288,6 +288,9 @@ en: success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb index 1d9bf77ec8..fb314043b1 100644 --- a/spec/models/spree/payment_method/taler_spec.rb +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -5,20 +5,48 @@ require 'spec_helper' RSpec.describe Spree::PaymentMethod::Taler do subject(:taler) { Spree::PaymentMethod::Taler.new( - preferred_backend_url: "https://backend.demo.taler.net/instances/sandbox", + preferred_backend_url: backend_url, preferred_api_key: "sandbox", ) } + let(:backend_url) { "https://backend.demo.taler.net/instances/sandbox" } describe "#external_payment_url", vcr: true do it "retrieves a URL to pay at and stores it on the payment record" do order = create(:order_ready_for_confirmation, payment_method: taler) url = subject.external_payment_url(order:) - expect(url).to match %r{\Ahttps://backend.demo.taler.net/instances/sandb} + expect(url).to start_with backend_url payment = order.payments.last.reload expect(payment.response_code).to match "2026.022-0284X4GE8WKMJ" expect(payment.redirect_auth_url).to eq url end end + + describe "#purchase" do + let(:money) { 100 } + let(:source) { taler } + let(:payment) { build(:payment, response_code: "taler-order-7") } + let(:order_url) { "#{backend_url}/private/orders/taler-order-7" } + + it "returns an ActiveMerchant response" do + order_status = "paid" + stub_request(:get, order_url).to_return(body: { order_status: }.to_json) + + response = taler.purchase(nil, nil, payment:) + + expect(response.success?).to eq true + expect(response.message).to eq "paid" + end + + it "translates error messages" do + order_status = "claimed" + stub_request(:get, order_url).to_return(body: { order_status: }.to_json) + + response = taler.purchase(nil, nil, payment:) + + expect(response.success?).to eq false + expect(response.message).to eq "The payment request expired. Please try again." + end + end end From 7b559e2f830da58069261d38e113ce247c68e3f6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 30 Jan 2026 14:08:36 +1100 Subject: [PATCH 166/270] Update all locales with the latest Transifex translations --- config/locales/ar.yml | 1 + config/locales/ca.yml | 1 + config/locales/cy.yml | 1 + config/locales/de_CH.yml | 1 + config/locales/de_DE.yml | 1 + config/locales/el.yml | 1 + config/locales/en_AU.yml | 1 + config/locales/en_BE.yml | 1 + config/locales/en_CA.yml | 1 + config/locales/en_DE.yml | 1 + config/locales/en_FR.yml | 68 +++++++++++++++++++++++++++++++++++++++ config/locales/en_GB.yml | 1 + config/locales/en_IE.yml | 1 + config/locales/en_IN.yml | 1 + config/locales/en_NZ.yml | 1 + config/locales/en_PH.yml | 1 + config/locales/en_US.yml | 1 + config/locales/en_ZA.yml | 1 + config/locales/es.yml | 1 + config/locales/es_CO.yml | 1 + config/locales/es_CR.yml | 1 + config/locales/es_US.yml | 1 + config/locales/eu.yml | 1 + config/locales/fi.yml | 1 + config/locales/fil_PH.yml | 1 + config/locales/fr.yml | 6 ++++ config/locales/fr_BE.yml | 3 ++ config/locales/fr_CA.yml | 1 + config/locales/fr_CH.yml | 1 + config/locales/fr_CM.yml | 1 + config/locales/hi.yml | 1 + config/locales/hu.yml | 1 + config/locales/it.yml | 1 + config/locales/it_CH.yml | 1 + config/locales/ko.yml | 1 + config/locales/ml.yml | 1 + config/locales/mr.yml | 2 ++ config/locales/nb.yml | 1 + config/locales/nl_BE.yml | 1 + config/locales/pa.yml | 1 + config/locales/pl.yml | 1 + config/locales/pt.yml | 1 + config/locales/pt_BR.yml | 1 + config/locales/ru.yml | 1 + config/locales/sv.yml | 1 + config/locales/tr.yml | 1 + config/locales/uk.yml | 1 + 47 files changed, 122 insertions(+) diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 1c93a6fe6e..a7332cb2c0 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -716,6 +716,7 @@ ar: label: التصنيفات tags: label: الاوسمة + none: لا شيء search: بحث sort: pagination: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index f5f05fb580..4eb21d94b4 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -762,6 +762,7 @@ ca: label: Categories tags: label: Etiquetes + none: Cap search: Cerca sort: pagination: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index b36af81a4c..342e0a2c8e 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -881,6 +881,7 @@ cy: label: Categorïau tags: label: Tagiau + none: Dim search: Chwilio sort: pagination: diff --git a/config/locales/de_CH.yml b/config/locales/de_CH.yml index 50abf96221..55ebdc8822 100644 --- a/config/locales/de_CH.yml +++ b/config/locales/de_CH.yml @@ -731,6 +731,7 @@ de_CH: label: Lieferkategorien tags: label: Stichwörter + none: Keine search: Suche sort: pagination: diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index 3c7d4bb16f..b903c73abc 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -784,6 +784,7 @@ de_DE: label: Produktkategorie tags: label: Stichwörter + none: Nichts search: Suche sort: pagination: diff --git a/config/locales/el.yml b/config/locales/el.yml index b6cee813eb..c05264850f 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -796,6 +796,7 @@ el: label: Κατηγορίες tags: label: Ετικέτες + none: Κανένας search: Αναζήτηση sort: pagination: diff --git a/config/locales/en_AU.yml b/config/locales/en_AU.yml index fa671c65c1..fe0d60b509 100644 --- a/config/locales/en_AU.yml +++ b/config/locales/en_AU.yml @@ -561,6 +561,7 @@ en_AU: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_BE.yml b/config/locales/en_BE.yml index 94c19acc9b..79ad74aef4 100644 --- a/config/locales/en_BE.yml +++ b/config/locales/en_BE.yml @@ -526,6 +526,7 @@ en_BE: label: Categories tags: label: Tags + none: None search: Search product_variant_row: new_variant: New variant diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index 846ac96620..caedb59ee6 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -947,6 +947,7 @@ en_CA: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_DE.yml b/config/locales/en_DE.yml index d13c7b16dc..6c1536533e 100644 --- a/config/locales/en_DE.yml +++ b/config/locales/en_DE.yml @@ -531,6 +531,7 @@ en_DE: label: Categories tags: label: Tags + none: None search: Search product_variant_row: new_variant: New variant diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index bb30b94323..b9c12c93ff 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -115,6 +115,67 @@ en_FR: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: + messages: + content_type_invalid: + one: "has an invalid content type (authorized content type is %{authorized_human_content_types})" + other: "has an invalid content type (authorized content types are %{authorized_human_content_types})" + content_type_spoofed: + one: "has a content type that is not equivalent to the one that is detected through its content (authorized content type is %{authorized_human_content_types})" + other: "has a content type that is not equivalent to the one that is detected through its content (authorized content types are %{authorized_human_content_types})" + file_size_not_less_than: "file size must be less than %{max} (current size is %{file_size})" + file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max} (current size is %{file_size})" + file_size_not_greater_than: "file size must be greater than %{min} (current size is %{file_size})" + file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min} (current size is %{file_size})" + file_size_not_between: "file size must be between %{min} and %{max} (current size is %{file_size})" + file_size_not_equal_to: "file size must be equal to %{exact} (current size is %{file_size})" + total_file_size_not_less_than: "total file size must be less than %{max} (current size is %{total_file_size})" + total_file_size_not_less_than_or_equal_to: "total file size must be less than or equal to %{max} (current size is %{total_file_size})" + total_file_size_not_greater_than: "total file size must be greater than %{min} (current size is %{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "total file size must be greater than or equal to %{min} (current size is %{total_file_size})" + total_file_size_not_between: "total file size must be between %{min} and %{max} (current size is %{total_file_size})" + total_file_size_not_equal_to: "total file size must be equal to %{exact} (current size is %{total_file_size})" + duration_not_less_than: "duration must be less than %{max} (current duration is %{duration})" + duration_not_less_than_or_equal_to: "duration must be less than or equal to %{max} (current duration is %{duration})" + duration_not_greater_than: "duration must be greater than %{min} (current duration is %{duration})" + duration_not_greater_than_or_equal_to: "duration must be greater than or equal to %{min} (current duration is %{duration})" + duration_not_between: "duration must be between %{min} and %{max} (current duration is %{duration})" + duration_not_equal_to: "duration must be equal to %{exact} (current duration is %{duration})" + limit_out_of_range: + zero: "no files attached (must have between %{min} and %{max} files)" + one: "only 1 file attached (must have between %{min} and %{max} files)" + other: "total number of files must be between %{min} and %{max} files (there are %{count} files attached)" + limit_min_not_reached: + zero: "no files attached (must have at least %{min} files)" + one: "only 1 file attached (must have at least %{min} files)" + other: "%{count} files attached (must have at least %{min} files)" + limit_max_exceeded: + zero: "no files attached (maximum is %{max} files)" + one: "too many files attached (maximum is %{max} files, got %{count})" + other: "too many files attached (maximum is %{max} files, got %{count})" + attachment_missing: "is missing its attachment" + media_metadata_missing: "is not a valid media file" + dimension_min_not_included_in: "must be greater than or equal to %{width} x %{height} pixels" + dimension_max_not_included_in: "must be less than or equal to %{width} x %{height} pixels" + dimension_width_not_included_in: "width is not included between %{min} and %{max} pixels" + dimension_height_not_included_in: "height is not included between %{min} and %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels" + dimension_width_not_less_than_or_equal_to: "width must be less than or equal to %{length} pixels" + dimension_height_not_less_than_or_equal_to: "height must be less than or equal to %{length} pixels" + dimension_width_not_equal_to: "width must be equal to %{length} pixels" + dimension_height_not_equal_to: "height must be equal to %{length} pixels" + aspect_ratio_not_square: "must be square (current file is %{width}x%{height}px)" + aspect_ratio_not_portrait: "must be portrait (current file is %{width}x%{height}px)" + aspect_ratio_not_landscape: "must be landscape (current file is %{width}x%{height}px)" + aspect_ratio_not_x_y: "must be %{authorized_aspect_ratios} (current file is %{width}x%{height}px)" + aspect_ratio_invalid: "has an invalid aspect ratio (valid aspect ratios are %{authorized_aspect_ratios})" + file_not_processable: "is not identified as a valid media file" + pages_not_less_than: "page count must be less than %{max} (current page count is %{pages})" + pages_not_less_than_or_equal_to: "page count must be less than or equal to %{max} (current page count is %{pages})" + pages_not_greater_than: "page count must be greater than %{min} (current page count is %{pages})" + pages_not_greater_than_or_equal_to: "page count must be greater than or equal to %{min} (current page count is %{pages})" + pages_not_between: "page count must be between %{min} and %{max} (current page count is %{pages})" + pages_not_equal_to: "page count must be equal to %{exact} (current page count is %{pages})" not_found: title: "The page you were looking for doesn't exist (404)" message_html: " Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

f the problem persists or is urgent, please tell us about it.

" @@ -520,6 +581,7 @@ en_FR: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "The voucher has expired" not_found_voucher: "Sorry, we couldn't find that voucher, please check the code." vine_voucher_redeemer_service: errors: @@ -885,6 +947,7 @@ en_FR: label: Categories tags: label: Tags + none: None search: Search sort: pagination: @@ -3909,6 +3972,8 @@ en_FR: destroy: success: Webhook endpoint successfully deleted error: Webhook endpoint failed to delete + test: + success: Some test data will be sent to the webhook url spree: order_updated: "Order Updated" cannot_perform_operation: "Can not perform this operation" @@ -4015,6 +4080,7 @@ en_FR: logourl: "Logourl" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + tag_rule: "Tag Rule" voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" @@ -4898,6 +4964,8 @@ en_FR: create_placeholder: Enter the URL of the remote webhook endpoint event_types: order_cycle_opened: Order Cycle Opened + payment_status_changed: Post webhook on Payment status change + test_endpoint: Test webhook endpoint invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 7098767675..f46b654461 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -885,6 +885,7 @@ en_GB: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_IE.yml b/config/locales/en_IE.yml index dfdbc10801..89d1d650ca 100644 --- a/config/locales/en_IE.yml +++ b/config/locales/en_IE.yml @@ -845,6 +845,7 @@ en_IE: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_IN.yml b/config/locales/en_IN.yml index ca37036928..8fd0618c22 100644 --- a/config/locales/en_IN.yml +++ b/config/locales/en_IN.yml @@ -545,6 +545,7 @@ en_IN: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index 155f83be54..01ea3c3d15 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -679,6 +679,7 @@ en_NZ: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_PH.yml b/config/locales/en_PH.yml index c607fcf6ac..f937526545 100644 --- a/config/locales/en_PH.yml +++ b/config/locales/en_PH.yml @@ -541,6 +541,7 @@ en_PH: label: Categories tags: label: Tags + none: None search: Search product_variant_row: new_variant: New variant diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index dee7e09dd9..73c30522fe 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -680,6 +680,7 @@ en_US: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/en_ZA.yml b/config/locales/en_ZA.yml index cf3402148e..bc2e8804b7 100644 --- a/config/locales/en_ZA.yml +++ b/config/locales/en_ZA.yml @@ -541,6 +541,7 @@ en_ZA: label: Categories tags: label: Tags + none: None search: Search sort: pagination: diff --git a/config/locales/es.yml b/config/locales/es.yml index 54115f7441..e12fb6c7f3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -880,6 +880,7 @@ es: label: Categorías tags: label: Etiquetas + none: Ninguno search: Buscar sort: pagination: diff --git a/config/locales/es_CO.yml b/config/locales/es_CO.yml index 0cb2735c88..f1fe6cdccf 100644 --- a/config/locales/es_CO.yml +++ b/config/locales/es_CO.yml @@ -568,6 +568,7 @@ es_CO: label: Categorías tags: label: Etiquetas + none: Ninguno search: Buscar product_variant_row: new_variant: Nueva variante diff --git a/config/locales/es_CR.yml b/config/locales/es_CR.yml index ec984f0bd9..84c7b7d878 100644 --- a/config/locales/es_CR.yml +++ b/config/locales/es_CR.yml @@ -682,6 +682,7 @@ es_CR: label: Categorías tags: label: Etiquetas + none: Ninguno search: Buscar sort: pagination: diff --git a/config/locales/es_US.yml b/config/locales/es_US.yml index d858ff0cf1..e780a82f86 100644 --- a/config/locales/es_US.yml +++ b/config/locales/es_US.yml @@ -675,6 +675,7 @@ es_US: label: Categorías tags: label: Etiquetas + none: Ninguno search: Buscar sort: pagination: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index c51593ad68..a28adc1ed1 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -830,6 +830,7 @@ eu: label: Kategoriak tags: label: Tags + none: Bat ere ez search: Bilatu sort: pagination: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 72505b6c46..132a49cfca 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -883,6 +883,7 @@ fi: label: Kategoriat tags: label: Tägit + none: Ei mitään search: Haku sort: pagination: diff --git a/config/locales/fil_PH.yml b/config/locales/fil_PH.yml index b549499d6c..54933f8096 100644 --- a/config/locales/fil_PH.yml +++ b/config/locales/fil_PH.yml @@ -541,6 +541,7 @@ fil_PH: label: mga kategorya tags: label: tags + none: wala search: hanapin product_variant_row: new_variant: bagong uri diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 1f70a5397c..736abf3d88 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -115,6 +115,11 @@ fr: blank: "Champ obligatoire" too_short: "est trop court (minimum %{count} caractère)" errors: + messages: + content_type_invalid: + one: "a un contenu invalide (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: " Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez.

Contacter notre support

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -884,6 +889,7 @@ fr: label: Catégories tags: label: Tags + none: Aucun search: Rechercher sort: pagination: diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index 320e2bfd12..40b8643e4a 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -823,6 +823,7 @@ fr_BE: label: Les catégories tags: label: Tags + none: Aucun search: Rechercher sort: pagination: @@ -4442,6 +4443,7 @@ fr_BE: users: api_keys: regenerate_key: "Regénération de clé" + title: clé API webhook_endpoints: event_type: header: Type d'évènement @@ -4463,6 +4465,7 @@ fr_BE: transactions: transaction_history: Historique des Transactions authorisation_required: Autorisation requise + authorise: Autoriser open_orders: order: Commander shop: Faire mes courses diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index 2d748df53f..fc2a795dcc 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -885,6 +885,7 @@ fr_CA: label: Conditions de transport tags: label: Tags + none: Aucun search: Chercher sort: pagination: diff --git a/config/locales/fr_CH.yml b/config/locales/fr_CH.yml index 31e955e50b..21e478c859 100644 --- a/config/locales/fr_CH.yml +++ b/config/locales/fr_CH.yml @@ -681,6 +681,7 @@ fr_CH: label: Conditions de transport tags: label: Tags + none: Aucun search: Rechercher sort: pagination: diff --git a/config/locales/fr_CM.yml b/config/locales/fr_CM.yml index d86ce7aa6e..a1fa179693 100644 --- a/config/locales/fr_CM.yml +++ b/config/locales/fr_CM.yml @@ -634,6 +634,7 @@ fr_CM: label: Conditions de transport tags: label: Tags + none: Aucun search: Rechercher sort: pagination: diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 092365b018..e7ea0b062f 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -758,6 +758,7 @@ hi: label: श्रेणियां tags: label: टैग्स + none: कोई नहीं search: सर्च sort: pagination: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index b6a77a9971..c590d72600 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -841,6 +841,7 @@ hu: label: Kategóriák tags: label: Címkék + none: Egyik sem search: Keresés sort: pagination: diff --git a/config/locales/it.yml b/config/locales/it.yml index 7ae2dab7ce..e3959bbaac 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -716,6 +716,7 @@ it: label: categorie tags: label: Etichette + none: Nessuno search: Cerca sort: pagination: diff --git a/config/locales/it_CH.yml b/config/locales/it_CH.yml index f9d135f325..9fe5172add 100644 --- a/config/locales/it_CH.yml +++ b/config/locales/it_CH.yml @@ -675,6 +675,7 @@ it_CH: label: categorie tags: label: Etichette + none: Nessuno search: Cerca sort: pagination: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 4f32b2f92e..871223d3cf 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -676,6 +676,7 @@ ko: label: 카테고리 tags: label: 태그 + none: None search: 탐색 sort: pagination: diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 3c12ba0c88..607f823932 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -761,6 +761,7 @@ ml: label: വിഭാഗങ്ങൾ tags: label: ടാഗുകൾ + none: ഒന്നുമില്ല search: തിരയുക sort: pagination: diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 20ebb4eac0..19e1ab534c 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -743,6 +743,8 @@ mr: label: उत्पादक categories: label: श्रेण्या + tags: + none: कोणतेही नाही search: शोधा sort: pagination: diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 7470b69d2b..50c793000d 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -884,6 +884,7 @@ nb: label: Kategorier tags: label: Merkelapper + none: Ingen search: Søk sort: pagination: diff --git a/config/locales/nl_BE.yml b/config/locales/nl_BE.yml index 0a257514e6..80d233cf74 100644 --- a/config/locales/nl_BE.yml +++ b/config/locales/nl_BE.yml @@ -554,6 +554,7 @@ nl_BE: label: Categorieën tags: label: Tags + none: Geen enkele search: Zoeken sort: pagination: diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 17cd2ede1e..3e7ccf7b2c 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -750,6 +750,7 @@ pa: label: ਸ਼੍ਰੇਣੀਆਂ tags: label: ਟੈਗ + none: ਕੋਈ ਨਹੀਂ search: ਖੋਜੋ sort: pagination: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index 909d27218f..398f9f78c4 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -532,6 +532,7 @@ pl: label: Producenci tags: label: Tagi + none: Nic search: Szukaj variant_row: none_tax_category: Nic diff --git a/config/locales/pt.yml b/config/locales/pt.yml index a82519b572..d3054a2dac 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -593,6 +593,7 @@ pt: label: Categorias tags: label: Etiquetas + none: Nenhum search: Procurar product_variant_row: new_variant: Nova variante diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index 662e986663..5cdc345a63 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -612,6 +612,7 @@ pt_BR: label: Produtores tags: label: Tags + none: Nenhum search: Buscar sort: pagination: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 54600c0431..8636d8d1dd 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -782,6 +782,7 @@ ru: label: Категории tags: label: Метки + none: Нет search: Поиск sort: pagination: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index 76263c3487..224d2c8cce 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -337,6 +337,7 @@ sv: label: 'Producenter ' tags: label: Taggar + none: Ingen search: Sök variant_row: none_tax_category: Ingen diff --git a/config/locales/tr.yml b/config/locales/tr.yml index c9fba34f71..d7880cba3e 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -616,6 +616,7 @@ tr: label: Kategoriler tags: label: ETİKETLER + none: SATIŞ YAPMIYOR search: Ara sort: pagination: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index edb5b63482..f268121c48 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -681,6 +681,7 @@ uk: label: Категорії tags: label: Мітки + none: Жодного search: Пошук sort: pagination: From 5f31baa022703fa5052438094ee012e319a1f28f Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 1 Feb 2026 19:32:18 +0500 Subject: [PATCH 167/270] Refactor TomSelectController to enhance remote data loading and update SearchableDropdownComponent options --- .../searchable_dropdown_component.rb | 5 +- .../controllers/tom_select_controller.js | 164 ++----- .../stimulus/tom_select_controller_test.js | 438 ++++++++---------- 3 files changed, 226 insertions(+), 381 deletions(-) diff --git a/app/components/searchable_dropdown_component.rb b/app/components/searchable_dropdown_component.rb index 821bf89979..c6a6852edf 100644 --- a/app/components/searchable_dropdown_component.rb +++ b/app/components/searchable_dropdown_component.rb @@ -46,8 +46,9 @@ class SearchableDropdownComponent < ViewComponent::Base end def tom_select_options_value - plugins = remove_search_plugin? ? [] : ['dropdown_input'] - multiple ? plugins << 'remove_button' : plugins + plugins = ['virtual_scroll'] + plugins << 'dropdown_input' unless remove_search_plugin? + plugins << 'remove_button' if multiple { plugins:, diff --git a/app/webpacker/controllers/tom_select_controller.js b/app/webpacker/controllers/tom_select_controller.js index 81651f038b..e64bb60939 100644 --- a/app/webpacker/controllers/tom_select_controller.js +++ b/app/webpacker/controllers/tom_select_controller.js @@ -40,143 +40,53 @@ export default class extends Controller { return optionsArray.find((option) => [null, ""].includes(option.value))?.text; } + #buildUrl(query, page = 1) { + const url = new URL(this.remoteUrlValue, window.location.origin); + url.searchParams.set("q", query); + url.searchParams.set("page", page); + return url.toString(); + } + + #fetchOptions(query, callback) { + const url = this.control.getUrl(query); + + fetch(url) + .then((response) => response.json()) + .then((json) => { + /** + * Expected API shape: + * { + * results: [{ value, label }], + * pagination: { more: boolean } + * } + */ + if (json.pagination?.more) { + const currentUrl = new URL(url); + const currentPage = parseInt(currentUrl.searchParams.get("page") || "1"); + const nextUrl = this.#buildUrl(query, currentPage + 1); + this.control.setNextUrl(query, nextUrl); + } + + callback(json.results || []); + }) + .catch(() => { + callback(); + }); + } + #addRemoteOptions(options) { - // --- Pagination & request state --- - this.page = 1; - this.hasMore = true; - this.loading = false; - this.lastQuery = ""; - this.scrollAttached = false; - - const buildUrl = (query) => { - const url = new URL(this.remoteUrlValue, window.location.origin); - url.searchParams.set("q", query); - url.searchParams.set("page", this.page); - return url; + options.firstUrl = (query) => { + return this.#buildUrl(query, 1); }; - /** - * Shared remote fetch handler. - * Owns: - * - request lifecycle - * - pagination state - * - loading UI when appending - */ - const fetchOptions = ({ query, append = false, callback }) => { - if (this.loading || !this.hasMore) { - callback?.(); - return; - } - - this.loading = true; - - const dropdown = this.control?.dropdown_content; - const previousScrollTop = dropdown?.scrollTop; - let loader; - - /** - * When appending (infinite scroll), TomSelect does NOT - * manage loading UI automatically — we must do it manually. - */ - if (append && dropdown) { - loader = this.control.render("loading"); - dropdown.appendChild(loader); - this.control.wrapper.classList.add(this.control.settings.loadingClass); - } - - fetch(buildUrl(query)) - .then((response) => response.json()) - .then((json) => { - /** - * Expected API shape: - * { - * results: [{ value, label }], - * pagination: { more: boolean } - * } - */ - this.hasMore = Boolean(json.pagination?.more); - this.page += 1; - - const results = json.results || []; - - if (append && dropdown) { - this.control.addOptions(results); - this.control.refreshOptions(false); - /** - * Preserve scroll position so newly appended - * options don’t cause visual jumping. - */ - requestAnimationFrame(() => { - dropdown.scrollTop = previousScrollTop; - }); - } else { - callback?.(results); - } - }) - .catch(() => { - callback?.(); - }) - .finally(() => { - this.loading = false; - - if (append && loader) { - this.control.wrapper.classList.remove(this.control.settings.loadingClass); - loader.remove(); - } - }); - }; - - options.load = function (query, callback) { - fetchOptions({ query, callback }); - }.bind(this); - - options.onType = function (query) { - if (query === this.lastQuery) return; - - this.lastQuery = query; - this.page = 1; - this.hasMore = true; - }.bind(this); - - options.onDropdownOpen = function () { - if (this.scrollAttached) return; - this.scrollAttached = true; - - const dropdown = this.control.dropdown_content; - - dropdown.addEventListener( - "scroll", - function () { - const nearBottom = - dropdown.scrollTop + dropdown.clientHeight >= dropdown.scrollHeight - 20; - - if (nearBottom) { - this.#fetchNextPage(); - } - }.bind(this), - ); - }.bind(this); + options.load = this.#fetchOptions.bind(this); options.onFocus = function () { - if (this.loading) return; - - this.lastQuery = ""; this.control.load("", () => {}); }.bind(this); options.valueField = "value"; options.labelField = "label"; options.searchField = "label"; - - this._fetchOptions = fetchOptions; - } - - #fetchNextPage() { - if (this.loading || !this.hasMore) return; - - this._fetchOptions({ - query: this.lastQuery, - append: true, - }); } } diff --git a/spec/javascripts/stimulus/tom_select_controller_test.js b/spec/javascripts/stimulus/tom_select_controller_test.js index f53bae3ff7..cba45dfede 100644 --- a/spec/javascripts/stimulus/tom_select_controller_test.js +++ b/spec/javascripts/stimulus/tom_select_controller_test.js @@ -3,7 +3,78 @@ */ import { Application } from "stimulus"; -import tom_select_controller from "../../../app/webpacker/controllers/tom_select_controller.js"; +import { fireEvent, waitFor } from "@testing-library/dom"; +import tom_select_controller from "controllers/tom_select_controller"; + +/* ------------------------------------------------------------------ + * Helpers + * ------------------------------------------------------------------ */ + +const buildResults = (count, start = 1) => + Array.from({ length: count }, (_, i) => ({ + value: String(start + i), + label: `Option ${start + i}`, + })); + +const setupDOM = (html) => { + document.body.innerHTML = html; +}; + +const getSelect = () => document.getElementById("select"); +const getTomSelect = () => getSelect().tomselect; + +const openDropdown = () => fireEvent.click(document.getElementById("select-ts-control")); + +const mockRemoteFetch = (...responses) => { + responses.forEach((response) => { + fetch.mockResolvedValueOnce({ + json: async () => response, + }); + }); +}; + +const mockDropdownScroll = ( + dropdown, + { scrollHeight = 1000, clientHeight = 300, scrollTop = 700 } = {}, +) => { + Object.defineProperty(dropdown, "scrollHeight", { + configurable: true, + value: scrollHeight, + }); + + Object.defineProperty(dropdown, "clientHeight", { + configurable: true, + value: clientHeight, + }); + + Object.defineProperty(dropdown, "scrollTop", { + configurable: true, + writable: true, + value: scrollTop, + }); + + fireEvent.scroll(dropdown); +}; + +/* ------------------------------------------------------------------ + * Expectation helpers + * ------------------------------------------------------------------ */ + +const expectOptionsCount = (count) => { + expect(document.querySelectorAll('.ts-dropdown-content [role="option"]').length).toBe(count); +}; + +const expectDropdownToContain = (text) => { + expect(document.querySelector(".ts-dropdown-content")?.textContent).toContain(text); +}; + +const expectEmptyDropdown = () => { + expect(document.querySelector(".ts-dropdown-content")?.textContent).toBe(""); +}; + +/* ------------------------------------------------------------------ + * Specs + * ------------------------------------------------------------------ */ describe("TomSelectController", () => { let application; @@ -14,12 +85,6 @@ describe("TomSelectController", () => { }); beforeEach(() => { - global.requestAnimationFrame = jest.fn((cb) => { - cb(); - return 1; - }); - - // Mock fetch for remote data tests global.fetch = jest.fn(); }); @@ -28,291 +93,160 @@ describe("TomSelectController", () => { jest.clearAllMocks(); }); - describe("basic initialization", () => { - it("initializes TomSelect with default options and settings", async () => { - document.body.innerHTML = ` - + - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.getElementById("test-select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller.control).toBeDefined(); - expect(controller.control.settings.maxItems).toBe(1); - expect(controller.control.settings.maxOptions).toBeNull(); - expect(controller.control.settings.allowEmptyOption).toBe(true); - expect(controller.control.settings.placeholder).toBe("Choose an option"); - expect(controller.control.settings.plugins).toContain("dropdown_input"); - expect(controller.control.settings.onItemAdd).toBeDefined(); + `); }); - it("uses empty option text as placeholder when no placeholder value provided", async () => { - document.body.innerHTML = ` - - `; + it("initializes TomSelect with default options", () => { + const settings = getTomSelect().settings; - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller.control.settings.placeholder).toBe("-- Default Placeholder --"); - }); - - it("accepts custom options via data attribute", async () => { - document.body.innerHTML = ` - - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller.control.settings.maxItems).toBe(3); - expect(controller.control.settings.create).toBe(true); - }); - - it("cleans up on disconnect", async () => { - document.body.innerHTML = ` - - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - const destroySpy = jest.spyOn(controller.control, "destroy"); - controller.disconnect(); - - expect(destroySpy).toHaveBeenCalled(); + expect(settings.placeholder).toBe("Default Option"); + expect(settings.maxItems).toBe(1); + expect(settings.plugins).toEqual(["dropdown_input"]); + expect(settings.allowEmptyOption).toBe(true); }); }); - describe("remote data loading (#addRemoteOptions)", () => { - it("configures remote loading with proper field and pagination setup", async () => { - document.body.innerHTML = ` - - + data-tom-select-placeholder-value="Choose an option" + data-tom-select-options-value='{"maxItems": 3, "plugins": ["remove_button"]}' + > + + - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller.page).toBe(1); - expect(controller.hasMore).toBe(true); - expect(controller.loading).toBe(false); - expect(controller.scrollAttached).toBe(false); - expect(controller.control.settings.valueField).toBe("value"); - expect(controller.control.settings.labelField).toBe("label"); - expect(controller.control.settings.searchField).toBe("label"); + `); }); - it("resets pagination on new query but preserves on same query", async () => { - document.body.innerHTML = ` - - - - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - - controller.page = 5; - controller.hasMore = false; - controller.lastQuery = "old"; - - // Same query preserves state - controller.control.settings.onType("old"); - expect(controller.page).toBe(5); - - // New query resets state - controller.control.settings.onType("new"); - expect(controller.page).toBe(1); - expect(controller.hasMore).toBe(true); - expect(controller.lastQuery).toBe("new"); + data-tom-select-options-value='{"plugins":["virtual_scroll"]}' + data-tom-select-remote-url-value="https://ofn-tests.com/api/search" + > + `); }); - it("loads initial data on focus when not loading", async () => { - global.fetch.mockResolvedValue({ - json: jest.fn().mockResolvedValue({ - results: [], - pagination: { more: false }, - }), + it("configures remote loading callbacks", () => { + const settings = getTomSelect().settings; + + expect(settings.valueField).toBe("value"); + expect(settings.labelField).toBe("label"); + expect(settings.searchField).toBe("label"); + expect(settings.load).toEqual(expect.any(Function)); + expect(settings.firstUrl).toEqual(expect.any(Function)); + expect(settings.onFocus).toEqual(expect.any(Function)); + }); + + it("fetches page 1 on focus", async () => { + mockRemoteFetch({ + results: buildResults(1), + pagination: { more: false }, }); - document.body.innerHTML = ` - - `; + openDropdown(); - await new Promise((resolve) => setTimeout(resolve, 0)); + await waitFor(() => expect(fetch).toHaveBeenCalledTimes(1)); - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + expect(fetch).toHaveBeenCalledWith(expect.stringContaining("q=&page=1")); - expect(controller).not.toBeNull(); - - const loadSpy = jest.spyOn(controller.control, "load"); - controller.control.settings.onFocus(); - - expect(loadSpy).toHaveBeenCalledWith("", expect.any(Function)); - expect(controller.lastQuery).toBe(""); - - // Does not load when already loading - controller.loading = true; - loadSpy.mockClear(); - controller.control.settings.onFocus(); - expect(loadSpy).not.toHaveBeenCalled(); + await waitFor(() => { + expectOptionsCount(1); + expectDropdownToContain("Option 1"); + }); }); - it("attaches scroll listener once on dropdown open", async () => { - document.body.innerHTML = ` - - `; + it("fetches remote options using search query", async () => { + const appleOption = { value: "apple", label: "Apple" }; + mockRemoteFetch({ + results: [...buildResults(1), appleOption], + pagination: { more: false }, + }); - await new Promise((resolve) => setTimeout(resolve, 0)); + openDropdown(); - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + await waitFor(() => { + expectOptionsCount(2); + }); - expect(controller).not.toBeNull(); - expect(controller.scrollAttached).toBe(false); + mockRemoteFetch({ + results: [appleOption], + pagination: { more: false }, + }); - const addEventListenerSpy = jest.spyOn( - controller.control.dropdown_content, - "addEventListener", + fireEvent.input(document.getElementById("select-ts-control"), { + target: { value: "apple" }, + }); + + await waitFor(() => + expect(fetch).toHaveBeenCalledWith(expect.stringContaining("q=apple&page=1")), ); - controller.control.settings.onDropdownOpen(); - expect(controller.scrollAttached).toBe(true); - expect(addEventListenerSpy).toHaveBeenCalledWith("scroll", expect.any(Function)); - - // Does not attach multiple times - controller.control.settings.onDropdownOpen(); - expect(addEventListenerSpy).toHaveBeenCalledTimes(1); - }); - }); - - describe("infinite scroll (#fetchNextPage)", () => { - it("initializes pagination infrastructure", async () => { - document.body.innerHTML = ` - - `; - - await new Promise((resolve) => setTimeout(resolve, 0)); - - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller._fetchOptions).toBeDefined(); - expect(typeof controller._fetchOptions).toBe("function"); - expect(controller.lastQuery).toBe(""); - expect(controller.control.settings.onDropdownOpen).toBeDefined(); + await waitFor(() => { + expectOptionsCount(1); + expectDropdownToContain("Apple"); + }); }); - it("manages pagination state correctly", async () => { - document.body.innerHTML = ` - - `; + it("loads next page on scroll (infinite scroll)", async () => { + mockRemoteFetch( + { + results: buildResults(30), + pagination: { more: true }, + }, + { + results: buildResults(1, 31), + pagination: { more: false }, + }, + ); - await new Promise((resolve) => setTimeout(resolve, 0)); + openDropdown(); - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); + await waitFor(() => { + expectOptionsCount(30); + }); - expect(controller).not.toBeNull(); + const dropdown = document.querySelector(".ts-dropdown-content"); + mockDropdownScroll(dropdown); - // Initial state - expect(controller.page).toBe(1); - expect(controller.hasMore).toBe(true); - expect(controller.loading).toBe(false); + await waitFor(() => { + expectOptionsCount(31); + }); - // Can increment page - controller.page += 1; - expect(controller.page).toBe(2); - - // Can update hasMore flag - controller.hasMore = false; - expect(controller.hasMore).toBe(false); - - // Can track loading - controller.loading = true; - expect(controller.loading).toBe(true); + expect(fetch).toHaveBeenCalledTimes(2); }); - it("provides dropdown element access for scroll detection", async () => { - document.body.innerHTML = ` - - `; + it("handles fetch errors gracefully", async () => { + fetch.mockRejectedValueOnce(new Error("Network error")); - await new Promise((resolve) => setTimeout(resolve, 0)); + openDropdown(); - const select = document.querySelector("select"); - const controller = application.getControllerForElementAndIdentifier(select, "tom-select"); - - expect(controller).not.toBeNull(); - expect(controller.control.dropdown_content).toBeDefined(); - - const dropdown = controller.control.dropdown_content; - expect(typeof dropdown.scrollTop).toBe("number"); - expect(typeof dropdown.clientHeight).toBe("number"); - expect(typeof dropdown.scrollHeight).toBe("number"); + await waitFor(() => { + expectEmptyDropdown(); + }); }); }); }); From 8eb9709a04866448d1bde820d6ede71428709149 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 1 Feb 2026 19:45:39 +0500 Subject: [PATCH 168/270] Fix specs: Fix tom_select_options_value to conditionally include 'virtual_scroll' plugin based on remote URL presence --- app/components/searchable_dropdown_component.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/searchable_dropdown_component.rb b/app/components/searchable_dropdown_component.rb index c6a6852edf..67a785edaf 100644 --- a/app/components/searchable_dropdown_component.rb +++ b/app/components/searchable_dropdown_component.rb @@ -46,7 +46,8 @@ class SearchableDropdownComponent < ViewComponent::Base end def tom_select_options_value - plugins = ['virtual_scroll'] + plugins = [] + plugins << 'virtual_scroll' if @remote_url.present? plugins << 'dropdown_input' unless remove_search_plugin? plugins << 'remove_button' if multiple From f25d51e772d9c1f1fa4f3caa8a7bd9fff7872a88 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 2 Feb 2026 14:41:30 +1100 Subject: [PATCH 169/270] Add 7 day cooldown to Dependabot updates This should make us less vulnerable to supply chain attacks: - https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f43dca1226..1b2572a9cc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,6 +31,8 @@ updates: directory: "/" schedule: interval: "daily" + cooldown: + default-days: 7 # Only specific requirements are specified in Gemfile, so don't touch it. versioning-strategy: lockfile-only @@ -39,6 +41,8 @@ updates: directory: "/" schedule: interval: "daily" + cooldown: + default-days: 7 # Only specific requirements are specified in package.json, so don't touch it. versioning-strategy: lockfile-only From 36d617bceb057d8083fcf93524c8df1f9514ce62 Mon Sep 17 00:00:00 2001 From: Arun Guleria Date: Mon, 2 Feb 2026 10:47:02 +0530 Subject: [PATCH 170/270] 13893-hiding too many columns in Admin product list, the table layout breaks --- app/views/admin/products_v3/_variant_row.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/products_v3/_variant_row.html.haml b/app/views/admin/products_v3/_variant_row.html.haml index 02424a501f..54bf2ca861 100644 --- a/app/views/admin/products_v3/_variant_row.html.haml +++ b/app/views/admin/products_v3/_variant_row.html.haml @@ -9,7 +9,7 @@ %td.col-sku.field.naked_inputs = f.text_field :sku, 'aria-label': t('admin.products_page.columns.sku') = error_message_on variant, :sku -%td.col-unir_scale.field.naked_inputs{ 'data-controller': 'toggle-control', 'data-toggle-control-match-value': 'items' } +%td.col-unit_scale.field.naked_inputs{ 'data-controller': 'toggle-control', 'data-toggle-control-match-value': 'items' } = f.hidden_field :variant_unit = f.hidden_field :variant_unit_scale = f.select :variant_unit_with_scale, From 876d37d19ae75fe4b05271825333964ffc217603 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 2 Feb 2026 17:08:24 +1100 Subject: [PATCH 171/270] Fix function call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This function got renamed in 01d58304800a, but this call got missed. I would like to add a spec to cover this, but am not sure exactly how to set it up right now. I also notice that usage occurs after the preventDefault, and one before. I'm not sure if that matters. I have myself to blame for that inconsistency 🤦 --- app/webpacker/js/turbo.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/webpacker/js/turbo.js b/app/webpacker/js/turbo.js index 55d1fb2fa1..4414ddcd32 100644 --- a/app/webpacker/js/turbo.js +++ b/app/webpacker/js/turbo.js @@ -9,7 +9,7 @@ document.addEventListener("turbo:frame-missing", (event) => { event.preventDefault(); // show error message instead - showError(event.detail.response?.status); + showHttpError(event.detail.response?.status); }); document.addEventListener("turbo:submit-end", (event) => { From 0040e4d45409112a24114296a5d44a7ed581c335 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 3 Feb 2026 11:33:02 +1100 Subject: [PATCH 172/270] Fix script rm: tmp/product_import-20250505-81606-9pucu5: is a directory --- bin/setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/setup b/bin/setup index c9274099d6..a55bfa66b9 100755 --- a/bin/setup +++ b/bin/setup @@ -41,7 +41,7 @@ FileUtils.chdir APP_ROOT do system! "rm -f tmp/invoices/*.pdf" system! "rm -f tmp/javascripts/*.js" system! "rm -f tmp/karma_unit.js*" - system! "rm -f tmp/product_import-*" + system! "rm -rf tmp/product_import-*" puts "\n== Removing any precompiled assets that would be out of date now ==" system! "rm -rf public/assets/" From da90cdd9f6284486cf9aca61e3eef226da2d8a4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 11:31:06 +0000 Subject: [PATCH 173/270] Bump qs from 6.14.0 to 6.14.1 Bumps [qs](https://github.com/ljharb/qs) from 6.14.0 to 6.14.1. - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1) --- updated-dependencies: - dependency-name: qs dependency-version: 6.14.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ac73478b2b..c7a032ba53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6078,9 +6078,9 @@ qjobs@^1.2.0: integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== qs@~6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== dependencies: side-channel "^1.1.0" From 99e238d92dbdebab890d86a5e1bdaf805435761d Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Wed, 4 Feb 2026 02:25:41 +0500 Subject: [PATCH 174/270] Improve reports AJAX search safety, permissions, and TomSelect UX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sanitize AJAX search queries to safely support wildcard searches (ILIKE) - Centralize reports search actions in Spree::Ability and reuse across roles - Fix TomSelect remote loading to fetch on dropdown open and typing - Surface HTTP errors in TomSelect via showHttpError and improve error handling - Update dropdown behavior to show proper “no results” feedback - Move reports AJAX specs to request specs and expand pagination coverage - Simplify searchable dropdown component attribute passing --- .../searchable_dropdown_component.html.haml | 2 +- .../concerns/reports/ajax_search.rb | 9 +- app/models/spree/ability.rb | 10 +- .../controllers/tom_select_controller.js | 27 +- .../admin/reports_controller_spec.rb | 113 -------- .../stimulus/tom_select_controller_test.js | 53 +++- spec/requests/admin/reports_ajax_api_spec.rb | 271 ++++++++++++++++++ 7 files changed, 359 insertions(+), 126 deletions(-) create mode 100644 spec/requests/admin/reports_ajax_api_spec.rb diff --git a/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml b/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml index 85529d4c89..50d574d360 100644 --- a/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml +++ b/app/components/searchable_dropdown_component/searchable_dropdown_component.html.haml @@ -1,4 +1,4 @@ - if uses_form_builder? = f.select name, options, { selected: selected_option, include_blank:, multiple: }, class: classes, data:, 'aria-label': aria_label, **other_attrs - else - = select_tag name, options_for_select(options, selected_option), include_blank: include_blank, multiple: multiple, class: classes, data: data, 'aria-label': aria_label, **other_attrs + = select_tag name, options_for_select(options, selected_option), include_blank:, multiple:, class: classes, data:, 'aria-label': aria_label, **other_attrs diff --git a/app/controllers/concerns/reports/ajax_search.rb b/app/controllers/concerns/reports/ajax_search.rb index 7194dc77a7..03df572a48 100644 --- a/app/controllers/concerns/reports/ajax_search.rb +++ b/app/controllers/concerns/reports/ajax_search.rb @@ -62,13 +62,16 @@ module Reports search_term = params[:q] return query if search_term.blank? + escaped_search_term = ActiveRecord::Base.sanitize_sql_like(search_term) + pattern = "%#{escaped_search_term}%" + # Handle different model types if query.model == OrderCycle - query.where("order_cycles.name ILIKE ?", "%#{search_term}%") + query.where("order_cycles.name ILIKE ?", pattern) elsif query.model == Customer - query.where("customers.email ILIKE ?", "%#{search_term}%") + query.where("customers.email ILIKE ?", pattern) else - query.where("name ILIKE ?", "%#{search_term}%") + query.where("name ILIKE ?", pattern) end end diff --git a/app/models/spree/ability.rb b/app/models/spree/ability.rb index 654b76a781..4695559945 100644 --- a/app/models/spree/ability.rb +++ b/app/models/spree/ability.rb @@ -6,6 +6,11 @@ module Spree class Ability include CanCan::Ability + REPORTS_SEARCH_ACTIONS = [ + :search_enterprise_fees, :search_enterprise_fee_owners, :search_distributors, + :search_suppliers, :search_order_cycles, :search_order_customers + ].freeze + def initialize(user) clear_aliased_actions @@ -260,8 +265,7 @@ module Spree can [:admin, :index, :import], ::Admin::DfcProductImportsController # Reports page - can [:admin, :index, :show, :create, :search_enterprise_fees, :search_enterprise_fee_owners, - :search_distributors, :search_suppliers, :search_order_cycles, :search_order_customers], + can [:admin, :index, :show, :create, *REPORTS_SEARCH_ACTIONS], ::Admin::ReportsController can [:admin, :show, :create, :customers, :orders_and_distributors, :group_buys, :payments, :orders_and_fulfillment, :products_and_inventory, :order_cycle_management, @@ -394,7 +398,7 @@ module Spree end # Reports page - can [:admin, :index, :show, :create], ::Admin::ReportsController + can [:admin, :index, :show, :create, *REPORTS_SEARCH_ACTIONS], ::Admin::ReportsController can [:admin, :customers, :group_buys, :sales_tax, :payments, :orders_and_distributors, :orders_and_fulfillment, :products_and_inventory, :order_cycle_management, :xero_invoices, :enterprise_fee_summary, :bulk_coop], :report diff --git a/app/webpacker/controllers/tom_select_controller.js b/app/webpacker/controllers/tom_select_controller.js index e64bb60939..fcc6b72e02 100644 --- a/app/webpacker/controllers/tom_select_controller.js +++ b/app/webpacker/controllers/tom_select_controller.js @@ -1,5 +1,6 @@ import { Controller } from "stimulus"; import TomSelect from "tom-select/dist/esm/tom-select.complete"; +import showHttpError from "../../webpacker/js/services/show_http_error"; export default class extends Controller { static values = { @@ -51,7 +52,13 @@ export default class extends Controller { const url = this.control.getUrl(query); fetch(url) - .then((response) => response.json()) + .then((response) => { + if (!response.ok) { + showHttpError(response.status); + throw response; + } + return response.json(); + }) .then((json) => { /** * Expected API shape: @@ -69,12 +76,15 @@ export default class extends Controller { callback(json.results || []); }) - .catch(() => { + .catch((error) => { callback(); + console.error(error); }); } #addRemoteOptions(options) { + this.openedByClick = false; + options.firstUrl = (query) => { return this.#buildUrl(query, 1); }; @@ -85,6 +95,19 @@ export default class extends Controller { this.control.load("", () => {}); }.bind(this); + options.onDropdownOpen = function () { + this.openedByClick = true; + }.bind(this); + + options.onType = function () { + this.openedByClick = false; + }.bind(this); + + // As per TomSelect source code, no result feedback after API call is shown when this callback returns true. + options.shouldLoad = function (query) { + return this.openedByClick || query.length > 0; + }.bind(this); + options.valueField = "value"; options.labelField = "label"; options.searchField = "label"; diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb index f38f6b837e..6fbf75f98e 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/controllers/admin/reports_controller_spec.rb @@ -368,117 +368,4 @@ RSpec.describe Admin::ReportsController do end end end - - context "AJAX Search" do - let(:enterprise_fee1) { - create(:enterprise_fee, name: "Delivery Fee", enterprise: distributor1) - } - let(:enterprise_fee2) { create(:enterprise_fee, name: "Admin Fee", enterprise: distributor2) } - - before do - controller_login_as_admin - orderA1.adjustments.create!( - originator: enterprise_fee1, - label: "Delivery Fee", - amount: 5.0, - state: "finalized", - order: orderA1 - ) - orderB1.adjustments.create!( - originator: enterprise_fee2, - label: "Admin Fee", - amount: 3.0, - state: "finalized", - order: orderB1 - ) - end - - describe "#search_enterprise_fees" do - it "returns paginated JSON with enterprise fees ordered by name" do - spree_get( - :search_enterprise_fees, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - - expect(response).to have_http_status(:ok) - json_response = response.parsed_body - - names = json_response["results"].pluck("label") - expect(names).to eq(['Admin Fee', 'Delivery Fee']) - end - end - - describe "#search_enterprise_fee_owners" do - it "returns paginated JSON with unique enterprise owners ordered by name" do - distributor1.update!(name: "Zebra Farm") - distributor2.update!(name: "Alpha Market") - - spree_get( - :search_enterprise_fee_owners, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - ) - - expect(response).to have_http_status(:ok) - json_response = response.parsed_body - - names = json_response["results"].pluck("label") - expect(names).to eq(['Alpha Market', 'Zebra Farm']) - end - end - - describe "#search_order_customers" do - it "filters customers by email and returns paginated results" do - customer1 = create(:customer, email: "alice@example.com", enterprise: distributor1) - customer2 = create(:customer, email: "bob@example.com", enterprise: distributor1) - orderA1.update!(customer: customer1) - orderA2.update!(customer: customer2) - - spree_get( - :search_order_customers, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "alice" - ) - - json_response = response.parsed_body - expect(json_response["results"].pluck("label")).to eq(["alice@example.com"]) - end - end - - describe "#search_order_cycles" do - it "filters order cycles by name and orders by close date" do - ocA.update!(name: "Winter Market") - ocB.update!(name: "Summer Market") - - spree_get( - :search_order_cycles, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "Winter" - ) - - json_response = response.parsed_body - expect(json_response["results"].pluck("label")).to eq(["Winter Market"]) - end - end - - describe "#search_distributors" do - it "filters distributors by name" do - distributor1.update!(name: "Alpha Farm") - distributor2.update!(name: "Beta Market") - - spree_get( - :search_distributors, - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "Alpha" - ) - - json_response = response.parsed_body - expect(json_response["results"].pluck("label")).to eq(["Alpha Farm"]) - end - end - end end diff --git a/spec/javascripts/stimulus/tom_select_controller_test.js b/spec/javascripts/stimulus/tom_select_controller_test.js index cba45dfede..f853e6dc94 100644 --- a/spec/javascripts/stimulus/tom_select_controller_test.js +++ b/spec/javascripts/stimulus/tom_select_controller_test.js @@ -5,6 +5,12 @@ import { Application } from "stimulus"; import { fireEvent, waitFor } from "@testing-library/dom"; import tom_select_controller from "controllers/tom_select_controller"; +import showHttpError from "js/services/show_http_error"; + +jest.mock("js/services/show_http_error", () => ({ + __esModule: true, + default: jest.fn(), +})); /* ------------------------------------------------------------------ * Helpers @@ -28,6 +34,7 @@ const openDropdown = () => fireEvent.click(document.getElementById("select-ts-co const mockRemoteFetch = (...responses) => { responses.forEach((response) => { fetch.mockResolvedValueOnce({ + ok: true, json: async () => response, }); }); @@ -68,10 +75,11 @@ const expectDropdownToContain = (text) => { expect(document.querySelector(".ts-dropdown-content")?.textContent).toContain(text); }; -const expectEmptyDropdown = () => { - expect(document.querySelector(".ts-dropdown-content")?.textContent).toBe(""); +const expectDropdownWithNoResults = () => { + expect(document.querySelector(".ts-dropdown-content")?.textContent).toBe("No results found"); }; + /* ------------------------------------------------------------------ * Specs * ------------------------------------------------------------------ */ @@ -86,6 +94,7 @@ describe("TomSelectController", () => { beforeEach(() => { global.fetch = jest.fn(); + global.I18n = { t: (key) => key }; }); afterEach(() => { @@ -240,13 +249,49 @@ describe("TomSelectController", () => { }); it("handles fetch errors gracefully", async () => { - fetch.mockRejectedValueOnce(new Error("Network error")); + fetch.mockRejectedValueOnce(new Error("Fetch error")); openDropdown(); await waitFor(() => { - expectEmptyDropdown(); + expectDropdownWithNoResults(); }); + + expect(showHttpError).not.toHaveBeenCalled(); + }); + + it("displays HTTP error on failure", async () => { + fetch.mockResolvedValueOnce({ + ok: false, + status: 500, + json: async () => ({}), + }); + + openDropdown(); + + await waitFor(() => { + expect(showHttpError).toHaveBeenCalledWith(500); + }); + + expectDropdownWithNoResults(); + }); + + it("controls loading behavior based on user interaction", () => { + const settings = getTomSelect().settings; + + // Initial state: openedByClick is false, query is empty + expect(settings.shouldLoad("")).toBe(false); + + // Simulating opening the dropdown + settings.onDropdownOpen(); + expect(settings.shouldLoad("")).toBe(true); + + // Simulating typing + settings.onType(); + expect(settings.shouldLoad("")).toBe(false); + + // Query present + expect(settings.shouldLoad("a")).toBe(true); }); }); }); diff --git a/spec/requests/admin/reports_ajax_api_spec.rb b/spec/requests/admin/reports_ajax_api_spec.rb new file mode 100644 index 0000000000..37654fb18e --- /dev/null +++ b/spec/requests/admin/reports_ajax_api_spec.rb @@ -0,0 +1,271 @@ +# frozen_string_literal: true + +RSpec.describe "Admin Reports AJAX Search API" do + let(:bill_address) { create(:address) } + let(:ship_address) { create(:address) } + let(:instructions) { "pick up on thursday please" } + let(:coordinator1) { create(:distributor_enterprise) } + let(:supplier1) { create(:supplier_enterprise) } + let(:supplier2) { create(:supplier_enterprise) } + let(:supplier3) { create(:supplier_enterprise) } + let(:distributor1) { create(:distributor_enterprise) } + let(:distributor2) { create(:distributor_enterprise) } + let(:product1) { create(:product, price: 12.34, supplier_id: supplier1.id) } + let(:product2) { create(:product, price: 23.45, supplier_id: supplier2.id) } + let(:product3) { create(:product, price: 34.56, supplier_id: supplier3.id) } + + let(:ocA) { + create(:simple_order_cycle, coordinator: coordinator1, + distributors: [distributor1, distributor2], + suppliers: [supplier1, supplier2, supplier3], + variants: [product1.variants.first, product3.variants.first]) + } + let(:ocB) { + create(:simple_order_cycle, coordinator: coordinator1, + distributors: [distributor1, distributor2], + suppliers: [supplier1, supplier2, supplier3], + variants: [product2.variants.first]) + } + + let(:orderA1) do + order = create(:order, distributor: distributor1, bill_address:, + ship_address:, special_instructions: instructions, + order_cycle: ocA) + order.line_items << create(:line_item, variant: product1.variants.first) + order.line_items << create(:line_item, variant: product3.variants.first) + order.finalize! + order.save + order + end + + let(:orderA2) do + order = create(:order, distributor: distributor2, bill_address:, + ship_address:, special_instructions: instructions, + order_cycle: ocA) + order.line_items << create(:line_item, variant: product2.variants.first) + order.finalize! + order.save + order + end + + let(:orderB1) do + order = create(:order, distributor: distributor1, bill_address:, + ship_address:, special_instructions: instructions, + order_cycle: ocB) + order.line_items << create(:line_item, variant: product1.variants.first) + order.line_items << create(:line_item, variant: product3.variants.first) + order.finalize! + order.save + order + end + + context "AJAX Search" do + let(:enterprise_fee1) { + create(:enterprise_fee, name: "Delivery Fee", enterprise: distributor1) + } + let(:enterprise_fee2) { create(:enterprise_fee, name: "Admin Fee", enterprise: distributor2) } + + before do + login_as create(:admin_user) + orderA1.adjustments.create!( + originator: enterprise_fee1, + label: "Delivery Fee", + amount: 5.0, + state: "finalized", + order: orderA1 + ) + orderB1.adjustments.create!( + originator: enterprise_fee2, + label: "Admin Fee", + amount: 3.0, + state: "finalized", + order: orderB1 + ) + end + + describe "GET /admin/reports/search_enterprise_fees" do + it "returns paginated JSON with enterprise fees ordered by name" do + get "/admin/reports/search_enterprise_fees", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + } + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + names = json_response["results"].pluck("label") + expect(names).to eq(['Admin Fee', 'Delivery Fee']) + expect(json_response["pagination"]["more"]).to be false + end + + it "paginates results and sets more flag correctly with more than 30 records" do + create_list(:enterprise_fee, 35, enterprise: distributor1) do |fee, i| + index = (i + 1).to_s.rjust(2, "0") + fee.update!(name: "Fee #{index}") + orderA1.adjustments.create!( + originator: fee, + label: "Fee #{index}", + amount: 1.0, + state: "finalized", + order: orderA1 + ) + end + + get "/admin/reports/search_enterprise_fees", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 1 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + + get "/admin/reports/search_enterprise_fees", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 2 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(7) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_enterprise_fee_owners" do + it "returns paginated JSON with unique enterprise owners ordered by name" do + distributor1.update!(name: "Zebra Farm") + distributor2.update!(name: "Alpha Market") + + get "/admin/reports/search_enterprise_fee_owners", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order + } + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + names = json_response["results"].pluck("label") + expect(names).to eq(['Alpha Market', 'Zebra Farm']) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_order_customers" do + it "filters customers by email and returns paginated results" do + customer1 = create(:customer, email: "alice@example.com", enterprise: distributor1) + customer2 = create(:customer, email: "bob@example.com", enterprise: distributor1) + orderA1.update!(customer: customer1) + orderA2.update!(customer: customer2) + + get "/admin/reports/search_order_customers", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "alice" + } + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq(["alice@example.com"]) + expect(json_response["pagination"]["more"]).to be false + end + + it "paginates customers and sets more flag correctly with more than 30 records" do + create_list(:customer, 35, enterprise: distributor1) do |customer, i| + customer.update!( + email: "customer#{(i + 1).to_s.rjust(2, '0')}@example.com" + ) + order = create( + :order, + distributor: distributor1, + order_cycle: ocA, + customer: customer + ) + order.line_items << create( + :line_item, + variant: product1.variants.first + ) + order.finalize! + end + + get "/admin/reports/search_order_customers", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 1 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + + get "/admin/reports/search_order_customers", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 2 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(5) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_order_cycles" do + it "filters order cycles by name and orders by close date" do + ocA.update!(name: "Winter Market") + ocB.update!(name: "Summer Market") + + get "/admin/reports/search_order_cycles", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "Winter" + } + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq(["Winter Market"]) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_distributors" do + it "filters distributors by name" do + distributor1.update!(name: "Alpha Farm") + distributor2.update!(name: "Beta Market") + + get "/admin/reports/search_distributors", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + q: "Alpha" + } + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq(["Alpha Farm"]) + expect(json_response["pagination"]["more"]).to be false + end + + it "paginates distributors and sets more flag correctly with more than 30 records" do + create_list(:distributor_enterprise, 35) + + get "/admin/reports/search_distributors", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 1 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + + get "/admin/reports/search_distributors", params: { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order, + page: 2 + } + + json_response = response.parsed_body + expect(json_response["results"].length).to be > 0 + expect(json_response["pagination"]["more"]).to be false + end + end + end +end From 90c23d0245a3ea5085289f576c4145920d9a282a Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Wed, 4 Feb 2026 02:26:44 +0500 Subject: [PATCH 175/270] fix lint issue --- spec/javascripts/stimulus/tom_select_controller_test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/javascripts/stimulus/tom_select_controller_test.js b/spec/javascripts/stimulus/tom_select_controller_test.js index f853e6dc94..4f4705e222 100644 --- a/spec/javascripts/stimulus/tom_select_controller_test.js +++ b/spec/javascripts/stimulus/tom_select_controller_test.js @@ -79,7 +79,6 @@ const expectDropdownWithNoResults = () => { expect(document.querySelector(".ts-dropdown-content")?.textContent).toBe("No results found"); }; - /* ------------------------------------------------------------------ * Specs * ------------------------------------------------------------------ */ From 9dcb3ec7488bb04147849c54b3d3495c020051da Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Wed, 4 Feb 2026 03:55:07 +0500 Subject: [PATCH 176/270] Refactor report routes to use scoped routes for better organization and readability --- ...prise_fees_with_tax_report_by_order.html.haml | 10 +++++----- ...se_fees_with_tax_report_by_producer.html.haml | 12 ++++++------ config/routes/admin.rb | 16 +++++++++------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml index 1001886995..c3aa10070e 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_order.html.haml @@ -7,7 +7,7 @@ options: [], selected_option: params.dig(:q, :distributor_id_in), multiple: true, - remote_url: admin_search_distributors_reports_url)) + remote_url: admin_reports_search_distributors_url)) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) @@ -17,7 +17,7 @@ options: [], selected_option: params.dig(:q, :order_cycle_id_in), multiple: true, - remote_url: admin_search_order_cycles_reports_url)) + remote_url: admin_reports_search_order_cycles_url)) .row .alpha.two.columns= label_tag nil, t(:fee_name) @@ -27,7 +27,7 @@ options: [], selected_option: params.dig(:q, :enterprise_fee_id_in), multiple: true, - remote_url: admin_search_enterprise_fees_reports_url(search_url_query))) + remote_url: admin_reports_search_enterprise_fees_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:fee_owner) @@ -37,7 +37,7 @@ options: [], selected_option: params.dig(:q, :enterprise_fee_owner_id_in), multiple: true, - remote_url: admin_search_enterprise_fee_owners_reports_url(search_url_query))) + remote_url: admin_reports_search_enterprise_fee_owners_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:report_customers) @@ -47,4 +47,4 @@ options: [], selected_option: params.dig(:q, :customer_id_in), multiple: true, - remote_url: admin_search_order_customers_reports_url)) + remote_url: admin_reports_search_order_customers_url)) diff --git a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml index c71e92ae58..3eb41c1733 100644 --- a/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml +++ b/app/views/admin/reports/filters/_enterprise_fees_with_tax_report_by_producer.html.haml @@ -7,7 +7,7 @@ options: [], selected_option: params.dig(:q, :distributor_id_in), multiple: true, - remote_url: admin_search_distributors_reports_url)) + remote_url: admin_reports_search_distributors_url)) .row .alpha.two.columns= label_tag nil, t(:report_producers) .omega.fourteen.columns @@ -15,7 +15,7 @@ options: [], selected_option: params.dig(:supplier_id_in), multiple: true, - remote_url: admin_search_suppliers_reports_url)) + remote_url: admin_reports_search_suppliers_url)) .row .alpha.two.columns= label_tag nil, t(:report_customers_cycle) @@ -25,7 +25,7 @@ options: [], selected_option: params.dig(:q, :order_cycle_id_in), multiple: true, - remote_url: admin_search_order_cycles_reports_url)) + remote_url: admin_reports_search_order_cycles_url)) .row .alpha.two.columns= label_tag nil, t(:fee_name) .omega.fourteen.columns @@ -34,7 +34,7 @@ options: [], selected_option: params.dig(:q, :enterprise_fee_id_in), multiple: true, - remote_url: admin_search_enterprise_fees_reports_url(search_url_query))) + remote_url: admin_reports_search_enterprise_fees_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:fee_owner) @@ -44,7 +44,7 @@ options: [], selected_option: params.dig(:q, :enterprise_fee_owner_id_in), multiple: true, - remote_url: admin_search_enterprise_fee_owners_reports_url(search_url_query))) + remote_url: admin_reports_search_enterprise_fee_owners_url(search_url_query))) .row .alpha.two.columns= label_tag nil, t(:report_customers) @@ -54,4 +54,4 @@ options: [], selected_option: params.dig(:q, :customer_id_in), multiple: true, - remote_url: admin_search_order_customers_reports_url)) + remote_url: admin_reports_search_order_customers_url)) diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 68c60b29f9..305ef999f6 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -136,13 +136,15 @@ Openfoodnetwork::Application.routes.draw do put :resume, on: :member, format: :json end - get '/reports', to: 'reports#index', as: :reports - get '/reports/search_enterprise_fees', to: 'reports#search_enterprise_fees', as: :search_enterprise_fees_reports - get '/reports/search_enterprise_fee_owners', to: 'reports#search_enterprise_fee_owners', as: :search_enterprise_fee_owners_reports - get '/reports/search_distributors', to: 'reports#search_distributors', as: :search_distributors_reports - get '/reports/search_suppliers', to: 'reports#search_suppliers', as: :search_suppliers_reports - get '/reports/search_order_cycles', to: 'reports#search_order_cycles', as: :search_order_cycles_reports - get '/reports/search_order_customers', to: 'reports#search_order_customers', as: :search_order_customers_reports + scope :reports, as: :reports do + get '/', to: 'reports#index' + get '/search_enterprise_fees', to: 'reports#search_enterprise_fees', as: :search_enterprise_fees + get '/search_enterprise_fee_owners', to: 'reports#search_enterprise_fee_owners', as: :search_enterprise_fee_owners + get '/search_distributors', to: 'reports#search_distributors', as: :search_distributors + get '/search_suppliers', to: 'reports#search_suppliers', as: :search_suppliers + get '/search_order_cycles', to: 'reports#search_order_cycles', as: :search_order_cycles + get '/search_order_customers', to: 'reports#search_order_customers', as: :search_order_customers + end match '/reports/:report_type(/:report_subtype)', to: 'reports#show', via: :get, as: :report match '/reports/:report_type(/:report_subtype)', to: 'reports#create', via: :post end From e87965bda02434d2976b2308ba1b4d91f5701813 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 11:23:38 +1100 Subject: [PATCH 177/270] Simplify storing of payment profiles StripeSCA is the only payment method storing profiles following this logic. This is the first step to remove indirection and let the payment method handle this instead of the payment decided for the payment method. --- app/models/spree/payment.rb | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index da38a29665..5df898136b 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -34,7 +34,7 @@ module Spree # invalidate previously entered payments after_create :invalidate_old_payments - after_save :create_payment_profile, if: :profiles_supported? + after_save :create_payment_profile # update the order totals, etc. after_save :ensure_correct_adjustment, :update_order @@ -217,18 +217,13 @@ module Spree errors.blank? end - def profiles_supported? - payment_method.respond_to?(:payment_profiles_supported?) && - payment_method.payment_profiles_supported? - end - def create_payment_profile return unless source.is_a?(CreditCard) return unless source.try(:save_requested_by_customer?) return unless source.number || source.gateway_payment_profile_id return unless source.gateway_customer_profile_id.nil? - payment_method.create_profile(self) + payment_method.try(:create_profile, self) rescue ActiveMerchant::ConnectionError => e gateway_error e end From 2749965e73ac5b2fded95dc5541394996636fef6 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 11:28:15 +1100 Subject: [PATCH 178/270] Remove useless branch calling #void StripeSCA is the only method with a different method signature for `#void` but the additional parameter wasn't used. So this special case can just be removed. --- app/models/spree/gateway/stripe_sca.rb | 2 +- app/models/spree/payment/processing.rb | 11 +---------- spec/models/spree/gateway/stripe_sca_spec.rb | 4 ++-- spec/models/spree/payment_spec.rb | 5 ++--- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/app/models/spree/gateway/stripe_sca.rb b/app/models/spree/gateway/stripe_sca.rb index 78e658ab9c..feea5eda54 100644 --- a/app/models/spree/gateway/stripe_sca.rb +++ b/app/models/spree/gateway/stripe_sca.rb @@ -84,7 +84,7 @@ module Spree end # NOTE: this method is required by Spree::Payment::Processing - def void(payment_intent_id, _creditcard, gateway_options) + def void(payment_intent_id, gateway_options) payment_intent_response = Stripe::PaymentIntent.retrieve( payment_intent_id, stripe_account: stripe_account_id ) diff --git a/app/models/spree/payment/processing.rb b/app/models/spree/payment/processing.rb index 599a562097..dccc339cac 100644 --- a/app/models/spree/payment/processing.rb +++ b/app/models/spree/payment/processing.rb @@ -58,16 +58,7 @@ module Spree protect_from_connection_error do check_environment - response = if payment_method.payment_profiles_supported? - # Gateways supporting payment profiles will need access to credit - # card object because this stores the payment profile information - # so supply the authorization itself as well as the credit card, - # rather than just the authorization code - payment_method.void(response_code, source, gateway_options) - else - # Standard ActiveMerchant void usage - payment_method.void(response_code, gateway_options) - end + response = payment_method.void(response_code, gateway_options) record_response(response) diff --git a/spec/models/spree/gateway/stripe_sca_spec.rb b/spec/models/spree/gateway/stripe_sca_spec.rb index 495c33aa6b..5379434c2e 100644 --- a/spec/models/spree/gateway/stripe_sca_spec.rb +++ b/spec/models/spree/gateway/stripe_sca_spec.rb @@ -109,7 +109,7 @@ RSpec.describe Spree::Gateway::StripeSCA, :vcr, :stripe_version do end it "refunds the payment" do - response = subject.void(payment_intent.id, nil, {}) + response = subject.void(payment_intent.id, {}) expect(response.success?).to eq true end @@ -131,7 +131,7 @@ RSpec.describe Spree::Gateway::StripeSCA, :vcr, :stripe_version do end it "void the payment" do - response = subject.void(payment_intent.id, nil, {}) + response = subject.void(payment_intent.id, {}) expect(response.success?).to eq true end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 360ad11318..a1209ed022 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -347,8 +347,7 @@ RSpec.describe Spree::Payment do context "when profiles are supported" do it "should call payment_enterprise.void with the payment's response_code" do - allow(payment_method).to receive(:payment_profiles_supported) { true } - expect(payment_method).to receive(:void).with('123', card, + expect(payment_method).to receive(:void).with('123', anything).and_return(success_response) payment.void_transaction! end @@ -357,7 +356,7 @@ RSpec.describe Spree::Payment do context "when profiles are not supported" do it "should call payment_gateway.void with the payment's response_code" do allow(payment_method).to receive(:payment_profiles_supported) { false } - expect(payment_method).to receive(:void).with('123', card, + expect(payment_method).to receive(:void).with('123', anything).and_return(success_response) payment.void_transaction! end From 4650e30c09e82622e8ac045ed9d56de420f83681 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 11:39:15 +1100 Subject: [PATCH 179/270] Remove useless branch on credit method --- app/models/spree/gateway/stripe_sca.rb | 2 +- app/models/spree/payment/processing.rb | 19 +++++-------------- spec/models/spree/gateway/stripe_sca_spec.rb | 2 +- spec/models/spree/payment_spec.rb | 6 +++--- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/app/models/spree/gateway/stripe_sca.rb b/app/models/spree/gateway/stripe_sca.rb index feea5eda54..10253377bd 100644 --- a/app/models/spree/gateway/stripe_sca.rb +++ b/app/models/spree/gateway/stripe_sca.rb @@ -101,7 +101,7 @@ module Spree end # NOTE: this method is required by Spree::Payment::Processing - def credit(money, _creditcard, payment_intent_id, gateway_options) + def credit(money, payment_intent_id, gateway_options) gateway_options[:stripe_account] = stripe_account_id provider.refund(money, payment_intent_id, gateway_options) end diff --git a/app/models/spree/payment/processing.rb b/app/models/spree/payment/processing.rb index dccc339cac..4a78e9f727 100644 --- a/app/models/spree/payment/processing.rb +++ b/app/models/spree/payment/processing.rb @@ -77,20 +77,11 @@ module Spree credit_amount = calculate_refund_amount(credit_amount) - response = if payment_method.payment_profiles_supported? - payment_method.credit( - (credit_amount * 100).round, - source, - response_code, - gateway_options - ) - else - payment_method.credit( - (credit_amount * 100).round, - response_code, - gateway_options - ) - end + response = payment_method.credit( + (credit_amount * 100).round, + response_code, + gateway_options + ) record_response(response) diff --git a/spec/models/spree/gateway/stripe_sca_spec.rb b/spec/models/spree/gateway/stripe_sca_spec.rb index 5379434c2e..76761b001e 100644 --- a/spec/models/spree/gateway/stripe_sca_spec.rb +++ b/spec/models/spree/gateway/stripe_sca_spec.rb @@ -162,7 +162,7 @@ RSpec.describe Spree::Gateway::StripeSCA, :vcr, :stripe_version do stripe_account: stripe_test_account ) - response = subject.credit(1000, nil, payment_intent.id, {}) + response = subject.credit(1000, payment_intent.id, {}) expect(response.success?).to eq true end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index a1209ed022..742b9d95ee 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -436,7 +436,7 @@ RSpec.describe Spree::Payment do end it "should call credit on the gateway with the credit amount and response_code" do - expect(payment_method).to receive(:credit).with(1000, card, '123', + expect(payment_method).to receive(:credit).with(1000, '123', anything).and_return(success_response) payment.credit! end @@ -462,7 +462,7 @@ RSpec.describe Spree::Payment do it "should call credit on the gateway with the credit amount and response_code" do expect(payment_method).to receive(:credit).with( - amount_in_cents, card, '123', anything + amount_in_cents, '123', anything ).and_return(success_response) payment.credit! end @@ -475,7 +475,7 @@ RSpec.describe Spree::Payment do it "should call credit on the gateway with original payment amount and response_code" do expect(payment_method).to receive(:credit).with( - amount_in_cents.to_f, card, '123', anything + amount_in_cents.to_f, '123', anything ).and_return(success_response) payment.credit! end From f9617b81561ed1ca28d306d6415f24da1ff5ae87 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 12:51:02 +1100 Subject: [PATCH 180/270] Remove broken dead code branch The StripeSCA method is forwarding all missing methods to the provider gateway. The ActiveMerchant gateway used to be decorated by our code and that's how this code may have worked one day. But we removed the decorator years ago: - 549610bc355c2ad7b757e9f1013e125e0a4a9e90 A bit later we found that refunds are broken with Stripe: - https://github.com/openfoodfoundation/openfoodnetwork/issues/12843 This commit could potentiall fix that, I guess? I haven't tested that. It's a rare use case and not the aim of this work. --- app/models/spree/gateway/stripe_sca.rb | 6 ++++++ app/models/spree/payment/processing.rb | 19 +++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/app/models/spree/gateway/stripe_sca.rb b/app/models/spree/gateway/stripe_sca.rb index 10253377bd..fc9768e670 100644 --- a/app/models/spree/gateway/stripe_sca.rb +++ b/app/models/spree/gateway/stripe_sca.rb @@ -106,6 +106,12 @@ module Spree provider.refund(money, payment_intent_id, gateway_options) end + # NOTE: this method is required by Spree::Payment::Processing + def refund(money, payment_intent_id, gateway_options) + gateway_options[:stripe_account] = stripe_account_id + provider.refund(money, payment_intent_id, gateway_options) + end + def create_profile(payment) return unless payment.source.gateway_customer_profile_id.nil? diff --git a/app/models/spree/payment/processing.rb b/app/models/spree/payment/processing.rb index 4a78e9f727..46a1e784fd 100644 --- a/app/models/spree/payment/processing.rb +++ b/app/models/spree/payment/processing.rb @@ -107,20 +107,11 @@ module Spree refund_amount = calculate_refund_amount(refund_amount) - response = if payment_method.payment_profiles_supported? - payment_method.refund( - (refund_amount * 100).round, - source, - response_code, - gateway_options - ) - else - payment_method.refund( - (refund_amount * 100).round, - response_code, - gateway_options - ) - end + response = payment_method.refund( + (refund_amount * 100).round, + response_code, + gateway_options + ) record_response(response) From e86bf441abcf61873208af5ad4f10bd8430a268a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 13:02:53 +1100 Subject: [PATCH 181/270] Remove last use of #payment_profiles_supported? --- app/controllers/spree/admin/payments_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/spree/admin/payments_controller.rb b/app/controllers/spree/admin/payments_controller.rb index e362dcc8f6..7fbc23f352 100644 --- a/app/controllers/spree/admin/payments_controller.rb +++ b/app/controllers/spree/admin/payments_controller.rb @@ -95,8 +95,7 @@ module Spree private def load_payment_source - if @payment.payment_method.is_a?(Spree::Gateway) && - @payment.payment_method.payment_profiles_supported? && + if @payment.payment_method.is_a?(Gateway::StripeSCA) && params[:card].present? && (params[:card] != 'new') @payment.source = CreditCard.find_by(id: params[:card]) From 02d47d0a0dd2f559e92676845422a4ec0829852d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 13:07:21 +1100 Subject: [PATCH 182/270] Remove unused method #payment_profiles_supported? And useless specs. --- app/models/spree/gateway.rb | 4 --- app/models/spree/gateway/stripe_sca.rb | 4 --- app/models/spree/payment_method.rb | 4 --- spec/models/spree/payment_spec.rb | 39 -------------------------- 4 files changed, 51 deletions(-) diff --git a/app/models/spree/gateway.rb b/app/models/spree/gateway.rb index 3cdcbc7b05..2cbfc76a15 100644 --- a/app/models/spree/gateway.rb +++ b/app/models/spree/gateway.rb @@ -42,10 +42,6 @@ module Spree end end - def payment_profiles_supported? - false - end - def method_type 'gateway' end diff --git a/app/models/spree/gateway/stripe_sca.rb b/app/models/spree/gateway/stripe_sca.rb index fc9768e670..685aaeeb90 100644 --- a/app/models/spree/gateway/stripe_sca.rb +++ b/app/models/spree/gateway/stripe_sca.rb @@ -35,10 +35,6 @@ module Spree ActiveMerchant::Billing::StripePaymentIntentsGateway end - def payment_profiles_supported? - true - end - def stripe_account_id StripeAccount.find_by(enterprise_id: preferred_enterprise_id)&.stripe_user_id end diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index 77474fb277..5e31e78152 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -93,10 +93,6 @@ module Spree unscoped { find(*) } end - def payment_profiles_supported? - false - end - def source_required? true end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 742b9d95ee..0d7c4ea8b8 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -345,23 +345,6 @@ RSpec.describe Spree::Payment do allow(payment_method).to receive(:void).and_return(success_response) end - context "when profiles are supported" do - it "should call payment_enterprise.void with the payment's response_code" do - expect(payment_method).to receive(:void).with('123', - anything).and_return(success_response) - payment.void_transaction! - end - end - - context "when profiles are not supported" do - it "should call payment_gateway.void with the payment's response_code" do - allow(payment_method).to receive(:payment_profiles_supported) { false } - expect(payment_method).to receive(:void).with('123', - anything).and_return(success_response) - payment.void_transaction! - end - end - it "should log the response" do payment.void_transaction! expect(payment).to have_received(:record_response) @@ -657,7 +640,6 @@ RSpec.describe Spree::Payment do context "when profiles are supported" do before do - allow(payment_method).to receive(:payment_profiles_supported?) { true } allow(payment.source).to receive(:has_payment_profile?) { false } end @@ -700,10 +682,6 @@ RSpec.describe Spree::Payment do end context "when profiles are not supported" do - before do - allow(payment_method).to receive(:payment_profiles_supported?) { false } - end - it "should not create a payment profile" do payment_method.name = 'Gateway' payment_method.distributors << create(:distributor_enterprise) @@ -876,23 +854,6 @@ RSpec.describe Spree::Payment do end end - describe "performing refunds" do - before do - allow(payment).to receive(:calculate_refund_amount) { 123 } - expect(payment.payment_method).to receive(:refund).and_return(success) - end - - it "performs the refund without payment profiles" do - allow(payment.payment_method).to receive(:payment_profiles_supported?) { false } - payment.refund! - end - - it "performs the refund with payment profiles" do - allow(payment.payment_method).to receive(:payment_profiles_supported?) { true } - payment.refund! - end - end - it "records the response" do allow(payment).to receive(:calculate_refund_amount) { 123 } allow(payment.payment_method).to receive(:refund).and_return(success) From 162c58ac39e20d07c515be431a909fdcd4776822 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 3 Feb 2026 15:08:31 +1100 Subject: [PATCH 183/270] Check which methods we need to delegate This implicit delegation makes it impossible to know which code is used and which code is dead. The refund method is very rarely used though. So we'll need to wait for a while. --- app/models/spree/gateway.rb | 6 +++++- spec/models/spree/gateway_spec.rb | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/models/spree/gateway.rb b/app/models/spree/gateway.rb index 2cbfc76a15..c480d9c251 100644 --- a/app/models/spree/gateway.rb +++ b/app/models/spree/gateway.rb @@ -5,7 +5,7 @@ module Spree acts_as_taggable include PaymentMethodDistributors - delegate :authorize, :purchase, :capture, :void, :credit, to: :provider + delegate :authorize, :purchase, :capture, :void, :credit, :refund, to: :provider validates :name, :type, presence: true @@ -35,6 +35,10 @@ module Spree end def method_missing(method, *) + message = "Deprecated delegation of Gateway##{method}" + Alert.raise(message) + raise message if Rails.env.local? + if @provider.nil? || !@provider.respond_to?(method) super else diff --git a/spec/models/spree/gateway_spec.rb b/spec/models/spree/gateway_spec.rb index 0b46238436..f6e975ba38 100644 --- a/spec/models/spree/gateway_spec.rb +++ b/spec/models/spree/gateway_spec.rb @@ -14,8 +14,14 @@ RSpec.describe Spree::Gateway do end it "passes through all arguments on a method_missing call" do + expect(Rails.env).to receive(:local?).and_return(false) gateway = test_gateway.new expect(gateway.provider).to receive(:imaginary_method).with('foo') gateway.imaginary_method('foo') end + + it "raises an error in test env" do + gateway = test_gateway.new + expect { gateway.imaginary_method('foo') }.to raise_error StandardError + end end From cd3a80c502a4768b2d9695a24bf0625047b1bdc9 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 6 Feb 2026 10:44:00 +1100 Subject: [PATCH 184/270] Move to using our fork of wicked_pdf The lastest release wicked pdf does not include a fix to make it workwith Shakapacker V8 : https://github.com/openfoodfoundation/wicked_pdf/commit/bce498de547cdf00d037fdbec29fae844d69ee8e To we are using our fork for now, which includes said fix --- Gemfile | 2 +- Gemfile.lock | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 2183f26bf2..9f712c07b6 100644 --- a/Gemfile +++ b/Gemfile @@ -112,7 +112,7 @@ gem "turbo_power" gem "turbo-rails" gem 'combine_pdf' -gem 'wicked_pdf' +gem 'wicked_pdf', github: "openfoodfoundation/wicked_pdf", branch: "master" gem 'wkhtmltopdf-binary' gem 'immigrant' diff --git a/Gemfile.lock b/Gemfile.lock index a3211704c4..a15a7aff21 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -16,6 +16,15 @@ GIT select2-rails (3.4.9) thor (>= 0.14) +GIT + remote: https://github.com/openfoodfoundation/wicked_pdf.git + revision: bce498de547cdf00d037fdbec29fae844d69ee8e + branch: master + specs: + wicked_pdf (2.8.1) + activesupport + ostruct + GIT remote: https://github.com/podia/stimulus_reflex_testing.git revision: abac2ee34de347c589795b4d1a8e83e0baafb201 @@ -949,9 +958,6 @@ GEM websocket-extensions (0.1.5) whenever (1.1.0) chronic (>= 0.6.3) - wicked_pdf (2.8.2) - activesupport - ostruct wkhtmltopdf-binary (0.12.6.10) xml-simple (1.1.8) xpath (3.2.0) @@ -1106,7 +1112,7 @@ DEPENDENCIES web-console webmock whenever - wicked_pdf + wicked_pdf! wkhtmltopdf-binary RUBY VERSION From 6fd78d46479ab14d9c42bac06e3bcf4a63b5d19c Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 6 Feb 2026 10:46:10 +1100 Subject: [PATCH 185/270] Fix typo --- Procfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Procfile b/Procfile index ef7489e2af..6f9a4e720f 100644 --- a/Procfile +++ b/Procfile @@ -1,5 +1,5 @@ # Foreman Procfile. Start all dev server processes with: `foreman start` rails: DEV_CACHING=true bundle exec rails s -p 3000 -webpack: ./bin/shakacker-dev-server +webpack: ./bin/shakapacker-dev-server sidekiq: DEV_CACHING=true bundle exec sidekiq -q mailers -q default From f872201fefdb4d56a2a14303d3cf656543c99571 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 6 Feb 2026 11:35:24 +1100 Subject: [PATCH 186/270] Delete defunct spec From a comment on Github: > In this particular case, the spec is broken, actually. I just looked into it and you are right that StripeSCA supports payment profiles but the spec finds that the profile is not stored. And that is because `source.try(:save_requested_by_customer?)` returns false. We only store the profile when the customer is storing their credit card info. --- spec/models/spree/payment_spec.rb | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 0d7c4ea8b8..83ba78d711 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -681,22 +681,6 @@ RSpec.describe Spree::Payment do end end - context "when profiles are not supported" do - it "should not create a payment profile" do - payment_method.name = 'Gateway' - payment_method.distributors << create(:distributor_enterprise) - payment_method.save! - - expect(payment_method).not_to receive :create_profile - payment = Spree::Payment.create( - amount: 100, - order: create(:order), - source: card, - payment_method: - ) - end - end - context 'when the payment was completed but now void' do let(:payment) { create(:payment, :completed, amount: 100, order:) } From 38f17547387521103c34e8ffe34cd204a6b1cba5 Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 21 Jan 2026 16:57:29 +1100 Subject: [PATCH 187/270] Add spec This duplicates the 'returns data' spec above, but will be revelant in the following commits. --- .../spec/services/affiliate_sales_query_spec.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb index 7b30126378..e9598c1332 100644 --- a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb +++ b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb @@ -91,6 +91,15 @@ RSpec.describe AffiliateSalesQuery do ) end + it "returns data from variant if line item doesn't have it" do + labelled_row = query.label_row(query.data(order1.distributor).first) + + expect(labelled_row).to include( + product_name: "Tomatoes", + unit_name: "Tomatoes - Roma", + ) + end + context "with multiple orders" do let!(:order2) { create(:order_with_totals_and_distribution, :completed, variant: product.variants.first, From b98552003cbde2112c3e96708c03d9c739a2c082 Mon Sep 17 00:00:00 2001 From: Ashish Gaur Date: Wed, 16 Apr 2025 16:23:31 +0530 Subject: [PATCH 188/270] 13220 Add Product name in Order LineItem and update it during order creation 13220 Fixes affiliate sales spec 13220 Use before_create to update product name 13220 Fixes rubocop warnings 13220 Update product_name in line_item in specs 13220 Fix before_create lint 13220 Add spec for checking product_name is not set in reports 13220 Fixes rubocop issue 13220 Add migrations for updating the existing line items 13220 Fixing lint issues 13220 Set product_name in line_item before doing validation 13220 Fix linter issues 13220 Fixes spec 13220 Fixes linter issues 13220 Review comments 13220 Review comments 13220 Add default product name 13220 Use product_name instead of variant product name when using line item 13220 Fix specs 13220 Revert change in affiliate_sales_data_spec CL-13220 Store variant name in line_item 13220 Default variant name to original variant's full name for line_items 13220 Add missing frozen string literal 13220 Add spec for full_variant_name 13220 Remove UpdateProductNameInLineItems and AddNotNullToProductNameInLineItems migrations 13220 Remove presence validation for product_name 13220 Use full_product_name which defaults to variant product name if empty --- app/models/spree/line_item.rb | 26 +++++++++++++++++++ app/services/line_item_syncer.rb | 2 +- ...16074033_add_product_name_to_line_items.rb | 7 +++++ ...13110052_add_variant_name_to_line_items.rb | 7 +++++ db/schema.rb | 2 ++ lib/reporting/reports/bulk_coop/base.rb | 4 +-- .../reports/orders_and_fulfillment/base.rb | 4 +-- ...er_cycle_supplier_totals_by_distributor.rb | 2 +- spec/factories/line_item_factory.rb | 1 + ...order_cycle_customer_totals_report_spec.rb | 2 +- ...plier_totals_by_distributor_report_spec.rb | 13 +++++----- ...rders_cycle_supplier_totals_report_spec.rb | 23 +++++++++++++--- spec/models/spree/line_item_spec.rb | 11 ++++++++ spec/services/orders/sync_service_spec.rb | 6 ++--- 14 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 db/migrate/20250416074033_add_product_name_to_line_items.rb create mode 100644 db/migrate/20250713110052_add_variant_name_to_line_items.rb diff --git a/app/models/spree/line_item.rb b/app/models/spree/line_item.rb index fed86cd802..c1312df1dd 100644 --- a/app/models/spree/line_item.rb +++ b/app/models/spree/line_item.rb @@ -24,6 +24,8 @@ module Spree before_validation :copy_price before_validation :copy_tax_category before_validation :copy_dimensions + before_validation :copy_product_name, on: :create + before_validation :copy_variant_name, on: :create validates :quantity, numericality: { only_integer: true, @@ -250,6 +252,18 @@ module Spree adjustments.enterprise_fee end + def full_variant_name + return variant_name if variant_name.present? + + variant.full_name + end + + def full_product_name + return product_name if product_name.present? + + variant.product.name + end + private def computed_weight_from_variant @@ -274,6 +288,18 @@ module Spree order.create_tax_charge! end + def copy_product_name + return if variant.nil? || variant.product.nil? + + self.product_name = variant.product.name + end + + def copy_variant_name + return if variant.nil? + + self.variant_name = variant.full_name + end + def update_inventory_before_destroy # This is necessary before destroying the line item # so that update_inventory will restore stock to the variant diff --git a/app/services/line_item_syncer.rb b/app/services/line_item_syncer.rb index 010312fef4..fb2af07b13 100644 --- a/app/services/line_item_syncer.rb +++ b/app/services/line_item_syncer.rb @@ -77,7 +77,7 @@ class LineItemSyncer end def add_order_update_issue(order, line_item) - issue_description = "#{line_item.product.name} - #{line_item.variant.full_name}" + issue_description = "#{line_item.product.name} - #{line_item.full_variant_name}" issue_description << " - #{stock_issue_description(line_item)}" if line_item.insufficient_stock? order_update_issues.add(order, issue_description) end diff --git a/db/migrate/20250416074033_add_product_name_to_line_items.rb b/db/migrate/20250416074033_add_product_name_to_line_items.rb new file mode 100644 index 0000000000..92c256fdae --- /dev/null +++ b/db/migrate/20250416074033_add_product_name_to_line_items.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddProductNameToLineItems < ActiveRecord::Migration[7.0] + def change + add_column :spree_line_items, :product_name, :string + end +end diff --git a/db/migrate/20250713110052_add_variant_name_to_line_items.rb b/db/migrate/20250713110052_add_variant_name_to_line_items.rb new file mode 100644 index 0000000000..dffc7735d6 --- /dev/null +++ b/db/migrate/20250713110052_add_variant_name_to_line_items.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddVariantNameToLineItems < ActiveRecord::Migration[7.0] + def change + add_column :spree_line_items, :variant_name, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 9ebfe7a970..ccbcc56233 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -579,6 +579,8 @@ ActiveRecord::Schema[7.1].define(version: 2025_11_26_005628) do t.decimal "width", precision: 8, scale: 2 t.decimal "depth", precision: 8, scale: 2 t.string "unit_presentation" + t.string "product_name" + t.string "variant_name" t.index ["order_id"], name: "index_line_items_on_order_id" t.index ["variant_id"], name: "index_line_items_on_variant_id" end diff --git a/lib/reporting/reports/bulk_coop/base.rb b/lib/reporting/reports/bulk_coop/base.rb index 371713d676..bc7503d2f7 100644 --- a/lib/reporting/reports/bulk_coop/base.rb +++ b/lib/reporting/reports/bulk_coop/base.rb @@ -85,7 +85,7 @@ module Reporting end def product_name(line_items) - line_items.first.product.name + line_items.first.full_product_name end def remainder(line_items) @@ -118,7 +118,7 @@ module Reporting end def variant_product_name(line_items) - line_items.first.variant.product.name + line_items.first.full_product_name end def weight_from_unit_value(line_items) diff --git a/lib/reporting/reports/orders_and_fulfillment/base.rb b/lib/reporting/reports/orders_and_fulfillment/base.rb index fef26eb194..8c083efe25 100644 --- a/lib/reporting/reports/orders_and_fulfillment/base.rb +++ b/lib/reporting/reports/orders_and_fulfillment/base.rb @@ -41,7 +41,7 @@ module Reporting end def variant_name - proc { |line_items| line_items.first.variant.full_name } + proc { |line_items| line_items.first.full_variant_name } end def variant_sku @@ -57,7 +57,7 @@ module Reporting end def product_name - proc { |line_items| line_items.first.variant.product.name } + proc { |line_items| line_items.first.full_product_name } end def product_tax_category diff --git a/lib/reporting/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor.rb b/lib/reporting/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor.rb index 039ed25e6d..83f5d31704 100644 --- a/lib/reporting/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor.rb +++ b/lib/reporting/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor.rb @@ -25,7 +25,7 @@ module Reporting }, { group_by: proc { |line_items, _row| line_items.first.variant }, - sort_by: proc { |variant| variant.product.name } + sort_by: proc { |variant| variant.line_items.first.full_product_name } }, { group_by: :hub, diff --git a/spec/factories/line_item_factory.rb b/spec/factories/line_item_factory.rb index f575fb0d3b..284c7440d8 100644 --- a/spec/factories/line_item_factory.rb +++ b/spec/factories/line_item_factory.rb @@ -6,6 +6,7 @@ FactoryBot.define do price { BigDecimal('10.00') } order variant + product_name { variant.product.name } end factory :line_item_with_shipment, parent: :line_item do diff --git a/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb index f7e4231fc1..892a592afe 100644 --- a/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb @@ -28,7 +28,7 @@ RSpec.describe Reporting::Reports::OrdersAndFulfillment::OrderCycleCustomerTotal completed_at: order_date, ).tap do |order| order.line_items[0].variant.supplier.update(name: "Apple Farmer") - order.line_items[0].product.update(name: "Apples") + order.line_items[0].update(product_name: "Apples") order.line_items[0].variant.update(sku: "APP") end end diff --git a/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb index eb4f5661f3..cc1fe3c826 100644 --- a/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/order_cycle_supplier_totals_by_distributor_report_spec.rb @@ -32,9 +32,10 @@ module Reporting end it "lists products sorted by name" do - order.line_items[0].variant.product.update(name: "Cucumber") - order.line_items[1].variant.product.update(name: "Apple") - order.line_items[2].variant.product.update(name: "Banane") + order.line_items[0].update(product_name: "Cucumber") + order.line_items[1].update(product_name: "Apple") + order.line_items[2].update(product_name: "Banane") + product_names = report.rows.map(&:product).compact_blank expect(product_names).to eq(["Apple", "Banane", "Cucumber"]) end @@ -79,9 +80,9 @@ module Reporting end it "lists products sorted by name" do - order.line_items[0].variant.product.update(name: "Cucumber") - order.line_items[1].variant.product.update(name: "Apple") - order.line_items[2].variant.product.update(name: "Banane") + order.line_items[0].update(product_name: "Cucumber") + order.line_items[1].update(product_name: "Apple") + order.line_items[2].update(product_name: "Banane") product_names = report.rows.map(&:product).compact_blank # only the supplier's variant is displayed expect(product_names).to include("Cucumber") diff --git a/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb b/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb index 1fd1ae3841..a76c4448fc 100644 --- a/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb +++ b/spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb @@ -23,14 +23,14 @@ RSpec.describe Reporting::Reports::OrdersAndFulfillment::OrderCycleSupplierTotal report.table_rows end + let(:item) { order.line_items.first } + let(:variant) { item.variant } + it "generates the report" do expect(report_table.length).to eq(1) end describe "total_units column" do - let(:item) { order.line_items.first } - let(:variant) { item.variant } - it "contains a sum of total items" do variant.update!(variant_unit: "items", variant_unit_name: "bottle", unit_value: 6) # six-pack item.update!(final_weight_volume: nil) # reset unit information @@ -178,4 +178,21 @@ RSpec.describe Reporting::Reports::OrdersAndFulfillment::OrderCycleSupplierTotal expect(last_column_title).to eq "SKU" expect(first_row_last_column_value).to eq variant_sku end + + it "doesn't update product name in report" do + variant_sku = order.line_items.first.variant.sku + last_column_title = table_headers[-3] + first_row_last_column_value = report_table.first[-3] + + expect(last_column_title).to eq "SKU" + expect(first_row_last_column_value).to eq variant_sku + + expect(report_table.first[1]).to eq(variant.product.name) + product_name = variant.product.name + variant.product.update(name: "#{product_name} Updated") + + new_report = described_class.new(current_user, params) + + expect(new_report.table_rows.first[1]).to eq(product_name) + end end diff --git a/spec/models/spree/line_item_spec.rb b/spec/models/spree/line_item_spec.rb index 5ece7b8034..616c95a134 100644 --- a/spec/models/spree/line_item_spec.rb +++ b/spec/models/spree/line_item_spec.rb @@ -62,6 +62,17 @@ RSpec.describe Spree::LineItem do end end + context '#full_variant_name' do + it "returns variant's full name" do + expect(line_item.full_variant_name).to eq(line_item.variant.full_name) + end + + it "uses variant.full_name when variant_name is nil" do + line_item.variant_name = nil + expect(line_item.full_variant_name).to eq(line_item.variant.full_name) + end + end + describe '.currency' do it 'returns the globally configured currency' do line_item.currency == 'USD' diff --git a/spec/services/orders/sync_service_spec.rb b/spec/services/orders/sync_service_spec.rb index 31fe0d4136..594e76ae11 100644 --- a/spec/services/orders/sync_service_spec.rb +++ b/spec/services/orders/sync_service_spec.rb @@ -438,7 +438,7 @@ RSpec.describe Orders::SyncService do expect(order.reload.total.to_f).to eq 59.97 line_item = order.line_items.find_by(variant_id: sli.variant_id) expect(syncer.order_update_issues[order.id]) - .to include "#{line_item.product.name} - #{line_item.variant.full_name} - " \ + .to include "#{line_item.product.name} - #{line_item.full_variant_name} - " \ "Insufficient stock available" end @@ -453,7 +453,7 @@ RSpec.describe Orders::SyncService do line_item = order.line_items.find_by(variant_id: sli.variant_id) expect(syncer.order_update_issues[order.id]) - .to include "#{line_item.product.name} - #{line_item.variant.full_name} - Out of Stock" + .to include "#{line_item.product.name} - #{line_item.full_variant_name} - Out of Stock" end end end @@ -498,7 +498,7 @@ RSpec.describe Orders::SyncService do expect(changed_line_item.reload.quantity).to eq 2 expect(order.reload.total.to_f).to eq 79.96 expect(syncer.order_update_issues[order.id]) - .to include "#{changed_line_item.product.name} - #{changed_line_item.variant.full_name}" + .to include "#{changed_line_item.product.name} - #{changed_line_item.full_variant_name}" end end end From afdb04438646fa88a35c7ad27abbe4ee47d10615 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 5 Jan 2026 15:38:06 +1100 Subject: [PATCH 189/270] Load names from line item where available. I'm not sure why Arel complained about SQL in the SELECT clause (fields), but not the GROUP BY clause (key_fields). Maybe because it's not susceptible to user injection. I'm also not sure why I couldn't use the aliases defined in SELECT in the GROUP BY clause, but hey this seems to work. --- .../app/services/affiliate_sales_query.rb | 10 +++++----- .../spec/services/affiliate_sales_query_spec.rb | 16 +++++++++------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/engines/dfc_provider/app/services/affiliate_sales_query.rb b/engines/dfc_provider/app/services/affiliate_sales_query.rb index 155243745a..e3dd760979 100644 --- a/engines/dfc_provider/app/services/affiliate_sales_query.rb +++ b/engines/dfc_provider/app/services/affiliate_sales_query.rb @@ -14,7 +14,7 @@ class AffiliateSalesQuery }, ) .group(key_fields) - .pluck(fields) + .pluck(Arel.sql(fields)) end # Create a hash with labels for an array of data points: @@ -48,8 +48,8 @@ class AffiliateSalesQuery def fields <<~SQL.squish - spree_products.name AS product_name, - spree_variants.display_name AS unit_name, + COALESCE(spree_line_items.product_name, spree_products.name) AS product_name, + COALESCE(spree_line_items.variant_name, spree_variants.display_name) AS unit_name, spree_variants.variant_unit AS unit_type, spree_variants.unit_value AS units, spree_variants.unit_presentation, @@ -65,8 +65,8 @@ class AffiliateSalesQuery def key_fields <<~SQL.squish - product_name, - unit_name, + COALESCE(spree_line_items.product_name, spree_products.name), + COALESCE(spree_line_items.variant_name, spree_variants.display_name), unit_type, units, spree_variants.unit_presentation, diff --git a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb index e9598c1332..047cbcab9c 100644 --- a/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb +++ b/engines/dfc_provider/spec/services/affiliate_sales_query_spec.rb @@ -63,7 +63,7 @@ RSpec.describe AffiliateSalesQuery do expect(labelled_row).to include( product_name: "Tomatoes", - unit_name: "Tomatoes - Roma", + unit_name: "Tomatoes - Roma (1kg)", unit_type: "weight", units: 1000.to_f, unit_presentation: "1kg", @@ -78,20 +78,22 @@ RSpec.describe AffiliateSalesQuery do it "returns data stored in line item at time of order" do # Records are updated after the orders are created - product.update! name: "Tomatoes Updated" - variant1.update! display_name: "Tomatoes - Updated Roma", price: 11 + product.update! name: "Tommy toes" + variant1.update! display_name: "Tommy toes - Roma", price: 11 labelled_row = query.label_row(query.data(order1.distributor).first) - pending "#13220 store product and variant names" expect(labelled_row).to include( product_name: "Tomatoes", - unit_name: "Tomatoes - Roma", + unit_name: "Tomatoes - Roma (1kg)", price: 10.to_d, # this price is hardcoded in the line item factory. ) end it "returns data from variant if line item doesn't have it" do + # Old line item records (before migration 20250713110052) don't have these values stored + order1.line_items.first.update! product_name: nil, variant_name: nil + labelled_row = query.label_row(query.data(order1.distributor).first) expect(labelled_row).to include( @@ -131,12 +133,12 @@ RSpec.describe AffiliateSalesQuery do expect(labelled_data).to include a_hash_including( product_name: "Tomatoes", - unit_name: "Tomatoes - Roma", + unit_name: "Tomatoes - Roma (1kg)", quantity_sold: 1, ) expect(labelled_data).to include a_hash_including( product_name: "Tomatoes", - unit_name: "Tomatoes - Cherry", + unit_name: "Tomatoes - Cherry (500g)", quantity_sold: 1, units: 500, unit_presentation: "500g", From c00e7eeecfeea3a43e9e0cf9293a8d9f1c678866 Mon Sep 17 00:00:00 2001 From: David Cook Date: Wed, 21 Jan 2026 17:33:30 +1100 Subject: [PATCH 190/270] Add missing spec --- spec/models/spree/line_item_spec.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/spec/models/spree/line_item_spec.rb b/spec/models/spree/line_item_spec.rb index 616c95a134..ce400a0462 100644 --- a/spec/models/spree/line_item_spec.rb +++ b/spec/models/spree/line_item_spec.rb @@ -14,7 +14,7 @@ RSpec.describe Spree::LineItem do it { is_expected.to have_many(:adjustments) } end - context '#save' do + describe '#save' do it 'should update inventory, totals, and tax' do # Regression check for Spree #1481 expect(line_item.order).to receive(:create_tax_charge!) @@ -23,7 +23,7 @@ RSpec.describe Spree::LineItem do end end - context '#destroy' do + describe '#destroy' do # Regression test for Spree #1481 it "applies tax adjustments" do expect(line_item.order).to receive(:create_tax_charge!) @@ -42,7 +42,7 @@ RSpec.describe Spree::LineItem do end # Test for Spree #3391 - context '#copy_price' do + describe '#copy_price' do it "copies over a variant's prices" do line_item.price = nil line_item.currency = nil @@ -54,7 +54,7 @@ RSpec.describe Spree::LineItem do end # Test for Spree #3481 - context '#copy_tax_category' do + describe '#copy_tax_category' do it "copies over a variant's tax category" do line_item.tax_category = nil line_item.copy_tax_category @@ -62,7 +62,7 @@ RSpec.describe Spree::LineItem do end end - context '#full_variant_name' do + describe '#full_variant_name' do it "returns variant's full name" do expect(line_item.full_variant_name).to eq(line_item.variant.full_name) end @@ -73,6 +73,17 @@ RSpec.describe Spree::LineItem do end end + describe '#full_product_name' do + it "returns product's full name" do + expect(line_item.full_product_name).to eq(line_item.product.name) + end + + it "uses product.name when product_name is nil" do + line_item.product_name = nil + expect(line_item.full_product_name).to eq(line_item.product.name) + end + end + describe '.currency' do it 'returns the globally configured currency' do line_item.currency == 'USD' From d33cabd6b2949f445f5a1f60be9fce044ac2e6ae Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 6 Feb 2026 12:32:23 +1100 Subject: [PATCH 191/270] Update all locales with the latest Transifex translations --- config/locales/ar.yml | 3 +- config/locales/ca.yml | 3 +- config/locales/cy.yml | 3 +- config/locales/de_CH.yml | 2 - config/locales/de_DE.yml | 3 +- config/locales/el.yml | 3 +- config/locales/en_CA.yml | 3 +- config/locales/en_FR.yml | 10 +- config/locales/en_GB.yml | 3 +- config/locales/en_IE.yml | 3 +- config/locales/en_NZ.yml | 2 - config/locales/en_US.yml | 2 - config/locales/es.yml | 46 ++-- config/locales/es_US.yml | 2 - config/locales/eu.yml | 19 +- config/locales/fi.yml | 2 - config/locales/fr.yml | 75 ++++++- config/locales/fr_BE.yml | 438 ++++++++++++++++++++++++++++++++++++++- config/locales/fr_CA.yml | 3 +- config/locales/fr_CH.yml | 2 - config/locales/fr_CM.yml | 2 - config/locales/hi.yml | 3 +- config/locales/hu.yml | 3 +- config/locales/it.yml | 3 +- config/locales/it_CH.yml | 2 - config/locales/ko.yml | 2 - config/locales/ml.yml | 3 +- config/locales/mr.yml | 3 +- config/locales/nb.yml | 3 +- config/locales/pa.yml | 3 +- config/locales/pt_BR.yml | 2 - config/locales/ru.yml | 3 +- config/locales/sr.yml | 2 - config/locales/tr.yml | 2 - config/locales/uk.yml | 2 - 35 files changed, 582 insertions(+), 83 deletions(-) diff --git a/config/locales/ar.yml b/config/locales/ar.yml index a7332cb2c0..88e5d7a755 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -3765,6 +3765,7 @@ ar: alt_text: "نص بديل" thumbnail: "الباقة" back_to_images_list: "العودة إلى قائمة الصور" + api_key: "مفتاح API" email: البريد الإلكتروني account_updated: "تم تحديث الحساب!" email_updated: "سيتم تحديث الحساب بمجرد تأكيد البريد الإلكتروني الجديد." @@ -4065,9 +4066,7 @@ ar: providers: provider: "مزود" check: "النقد / التحويل الإلكتروني / إلخ. (المدفوعات التي لا تتطلب المصادقة التلقائية)" - pin: "المدفوعات دبوس" paypalexpress: "باي بال اكسبريس" - stripeconnect: "Stripe SCA" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 4eb21d94b4..8e2e8a868e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -3645,6 +3645,7 @@ ca: alt_text: "Text alternatiu" thumbnail: "Miniatura" back_to_images_list: "Torna a la llista d’imatges" + api_key: "Clau API" email: Correu electrònic account_updated: "Compte actualitzat!" email_updated: "El compte s’actualitzarà un cop es confirmi el nou correu electrònic." @@ -3943,9 +3944,7 @@ ca: providers: provider: "Proveïdor" check: "Efectiu / transferència / etc. (pagaments per als quals no és necessària la validació automàtica)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (obsolet)" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 342e0a2c8e..185dc55bf7 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -4105,6 +4105,7 @@ cy: alt_text: "Testun Amgen" thumbnail: "Cryno-lun" back_to_images_list: "Yn ôl i'r Rhestr Delweddau" + api_key: "Allwedd API" email: E-bost account_updated: "Diweddarwyd y cyfrif!" email_updated: "Bydd y cyfrif yn cael ei ddiweddaru ar ôl cadarnhau'r cyfeiriad e-bost newydd." @@ -4420,9 +4421,7 @@ cy: providers: provider: "Darparwr" check: "Arian/TRhE/ac ati (taliadau lle nad oes angen dilysu awtomatig)." - pin: "Taliadau Pin" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/de_CH.yml b/config/locales/de_CH.yml index 55ebdc8822..ce893135b4 100644 --- a/config/locales/de_CH.yml +++ b/config/locales/de_CH.yml @@ -3976,9 +3976,7 @@ de_CH: providers: provider: "Anbieter" check: "Bargeld, EC etc. (Zahlungen, für die keine automatische Validierung erforderlich ist)" - pin: "Pin Zahlungen" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index b903c73abc..f1b24c519a 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -3873,6 +3873,7 @@ de_DE: alt_text: "Alternativtext" thumbnail: "Miniaturansicht" back_to_images_list: "Zurück zur Bilderliste" + api_key: "API-Schlüssel" email: E-Mail-Adresse account_updated: "Konto aktualisiert!" email_updated: "Das Konto wird aktualisiert, sobald die neue E-Mail-Adresse bestätigt wurde." @@ -4183,9 +4184,7 @@ de_DE: providers: provider: "Anbieter" check: "Bargeld, EC etc. (Zahlungen, für die keine automatische Validierung erforderlich ist)" - pin: "Pin Zahlungen" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/el.yml b/config/locales/el.yml index c05264850f..0324d2d00c 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -3867,6 +3867,7 @@ el: alt_text: "Εναλλακτικό Κείμενο" thumbnail: "Μικρογραφία (Thumnail) " back_to_images_list: "Επιστροφή στη λίστα εικόνων" + api_key: "Κλειδί API" email: ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ account_updated: "Ο λογαριασμός ενημερώθηκε!" email_updated: "Ο λογαριασμός θα ενημερωθεί μόλις επιβεβαιωθεί το νέο μήνυμα ηλεκτρονικού ταχυδρομείου." @@ -4181,9 +4182,7 @@ el: providers: provider: "Προμηθευτής" check: "Μετρητά/EFT/κλπ. (πληρωμές για τις οποίες δεν απαιτείται αυτόματη επικύρωση)" - pin: "Καρφίτσωμα πληρωμών" paypalexpress: "PayPal Express" - stripeconnect: "Ταινία" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index caedb59ee6..a38b021535 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -4171,6 +4171,7 @@ en_CA: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back to Images List" + api_key: "API key" email: Email account_updated: "Account updated!" email_updated: "The account will be updated once the new email is confirmed." @@ -4487,9 +4488,7 @@ en_CA: providers: provider: "Provider" check: "Cash/EFT/Bank Transfer etc. (payments for which automatic validation is not required)" - pin: "Pin Payments (Only applicable to users in Australia)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe For Deletion" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index b9c12c93ff..a8594a2a66 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -246,6 +246,9 @@ en_FR: disconnect_failure: "Failed to disconnect Stripe." success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: @@ -3358,6 +3361,8 @@ en_FR: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" @@ -4172,6 +4177,8 @@ en_FR: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + backend_url: "Backend URL" + api_key: "API key" email: Email account_updated: "Account updated!" email_updated: "The account will be updated once the new email is confirmed." @@ -4488,10 +4495,9 @@ en_FR: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (old version)" stripesca: "Stripe" + taler: "Taler" payments: source_forms: stripe: diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index f46b654461..851c5f2961 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -4108,6 +4108,7 @@ en_GB: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + api_key: "API key" email: Email account_updated: "Account updated!" email_updated: "The account will be updated once the new email is confirmed." @@ -4424,9 +4425,7 @@ en_GB: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "depreciated card payment method (no longer in use in UK)" stripesca: "Stripe SCA " payments: source_forms: diff --git a/config/locales/en_IE.yml b/config/locales/en_IE.yml index 89d1d650ca..3002b24281 100644 --- a/config/locales/en_IE.yml +++ b/config/locales/en_IE.yml @@ -3971,6 +3971,7 @@ en_IE: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + api_key: "API key" email: Email account_updated: "Account updated!" email_updated: "The account will be updated once the new email is confirmed." @@ -4286,9 +4287,7 @@ en_IE: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (Obsolete version)" stripesca: "Stripe" payments: source_forms: diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index 01ea3c3d15..7ec5f2e79f 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -3752,9 +3752,7 @@ en_NZ: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index 73c30522fe..9e2a612d4d 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -3789,9 +3789,7 @@ en_US: providers: provider: "Provider" check: "Cash/EFT/etc. (payments for which automatic validation is not required)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "retired, please use Stripe SCA" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/es.yml b/config/locales/es.yml index e12fb6c7f3..6dfd4aca80 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -489,7 +489,7 @@ es: none: Ninguno notes: Notas error: Error - voucher: Bono + voucher: Cupón processing_payment: "Procesando el pago..." no_pending_payments: "No tiene pagos pendientes" invalid_payment_state: "Estado de pago inválido: %{state}" @@ -519,12 +519,13 @@ es: vine_voucher_validator_service: errors: vine_api: "Se ha producido un error en la comunicación con la API, inténtelo de nuevo más tarde." - invalid_voucher: "El bono no es válido" - not_found_voucher: "Lo sentimos, no hemos podido encontrar ese vale, por favor, compruebe el código." + invalid_voucher: "El cupón no es válido" + expired: "El cupón se ha caducado" + not_found_voucher: "Lo sentimos, no hemos podido encontrar ese cupón, por favor, compruebe el código." vine_voucher_redeemer_service: errors: vine_api: "Ha habido un error en la comunicación con el API" - redeeming_failed: "Error al canjear el bono" + redeeming_failed: "Error al canjear el cupón" actions: create_and_add_another: "Crear y agregar otro" create: "Crear" @@ -718,6 +719,7 @@ es: enabled_legend: "Aplicaciones conectadas habilitadas" connected_apps_enabled: discover_regen: Descubrir el Portal Regenerativo + vine: Voucher Integration Engine (VINE) update: resource: Ajustes de la aplicación conectada customers: @@ -1078,6 +1080,7 @@ es: orders: edit: order_sure_want_to: ¿Está seguro de que desea %{event} este pedido? + voucher_tax_included_in_price: "%{label} (impuestos incluidos en el cupón)" tax_on_fees: "Impuesto sobre las tasas" invoice_email_sent: 'Se ha enviado correo electrónico con la factura.' order_email_resent: 'El correo electrónico del pedido se ha reenviado' @@ -1347,8 +1350,8 @@ es: email_confirmed: "Correo electrónico confirmado" email_not_confirmed: "Correo electrónico no confirmado" vouchers: - legend: Bonos - voucher_code: Código promocional + legend: cupón + voucher_code: Código del cupón rate: Impuesto label: Etiqueta purpose: Propósito @@ -1358,7 +1361,7 @@ es: net_value: Valor neto active: ¿Activo? add_new: Añadir nuevo - no_voucher_yet: Todavía no hay bonos + no_voucher_yet: Todavía no hay cupones white_label: legend: "Etiqueta blanca" hide_ofn_navigation: "Ocultar la navegación de OFN" @@ -1380,6 +1383,8 @@ es: loading: "Cargando" need_to_be_manager: "Sólo los administradores pueden conectar aplicaciones." vine: + title: "Voucher Integration Engine (VINE)" + tagline: "Permitir el canje de cupones de VINE en tu tienda ." enable: "Conectar" disable: "Desconectar" need_to_be_manager: "Sólo los administradores pueden conectar aplicaciones." @@ -1648,7 +1653,7 @@ es: tag_rules: "Reglas de las Etiquetas" shop_preferences: "Configuración de la tienda" users: "Usuarias" - vouchers: Bonos + vouchers: Cupones white_label: "Etiqueta blanca" connected_apps: "Aplicaciones connectadas" enterprise_group: @@ -1859,11 +1864,12 @@ es: associated_subscriptions_error: Este horario no se puede eliminar porque tiene suscripciones asociadas vouchers: new: - legend: Nuevo bono + legend: Nuevo cupón back: Atrás save: Guardar - voucher_code: Código promocional + voucher_code: Código del cupón voucher_amount: Cantidad + voucher_type: Tipo de cupón percentage_rate: Porcentaje (%) controllers: enterprises: @@ -1953,6 +1959,12 @@ es: explaination: Puede revisar y confirmar su pedido en el siguiente paso cual incluye costos finales. submit: Siguiente - Resumen del pedido cancel: Regresar a Su información + voucher: + voucher: "%{voucher_amount} Cupón" + apply_voucher: Utilizar cupón + placeholder: Introducir el código del cupón + confirm_delete: ¿Está seguro de que desea eliminar este cupón? + warning_forfeit_remaining_amount: "Nota: si el total de su pedido es menor que su cupón, es posible que no pueda gastar el valor restante." step3: delivery_details: title: Detalles de entrega @@ -1984,6 +1996,10 @@ es: invalid_email: "Introduce un email válido" select_a_shipping_method: Seleccionar método de envío select_a_payment_method: Seleccionar método de pago + voucher_code_blank: Por favor introduzca un código de cupón válido + add_voucher_error: Ha habido un error al agregar el cupón + create_voucher_error: "Se ha producido un error al crear el cupón: %{error}" + voucher_redeeming_error: Se ha producido un error al intentar canjear su cupón shops: hubs: show_closed_shops: "Mostrar tiendas cerradas" @@ -2308,6 +2324,7 @@ es: email_order_summary_subtotal: "Subtotal:" email_order_summary_total: "Total:" email_order_summary_includes_tax: "(incluye impuestos):" + email_order_summary_voucher_label: "Cupón ( %{code} ):" email_payment_paid: PAGADO email_payment_not_paid: NO PAGADO email_payment_description: Descripción de pago de la compra @@ -3120,8 +3137,8 @@ es: report_header_transaction_fee: Comisión por transacción (sin impuestos) report_header_total_untaxable_admin: Total de ajustes administrativos no tributables (sin impuestos) report_header_total_taxable_admin: Total de ajustes tributarios de administración (impuestos incluidos) - report_header_voucher_label: Etiqueta del bono - report_header_voucher_amount: "Cantidad del bono (%{currency_symbol})" + report_header_voucher_label: Etiqueta del cupón + report_header_voucher_amount: "Cantidad del cupón (%{currency_symbol})" report_line_cost_of_produce: Coste de los productos agrícolas report_header_last_completed_order_date: Fecha del último pedido completado initial_invoice_number: "Número de factura inicial" @@ -3872,7 +3889,7 @@ es: logourl: "URL del logo" are_you_sure_delete: "¿Está seguro de que desea eliminar este registro?" confirm_delete: "Confirmar la eliminación" - voucher: "Bono" + voucher: "Cupón" configurations: "Configuraciones" general_settings: "Configuración general" site_name: "Nombre del sitio" @@ -3962,6 +3979,7 @@ es: alt_text: "Texto Alternativo" thumbnail: "Miniatura" back_to_images_list: "Volver a lista de imágenes " + api_key: "API key" email: Email account_updated: "Cuenta actualizada!" email_updated: "La cuenta se actualizará una vez que se confirme el nuevo correo electrónico." @@ -4270,9 +4288,7 @@ es: providers: provider: "Proveedor" check: "Efectivo / transferencia / etc. (pagos para los que no se requiere validación automática)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/es_US.yml b/config/locales/es_US.yml index e780a82f86..4fcb548eab 100644 --- a/config/locales/es_US.yml +++ b/config/locales/es_US.yml @@ -3737,9 +3737,7 @@ es_US: providers: provider: "Proveedor" check: "Efectivo / transferencia / etc. (pagos para los que no se requiere validación automática)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index a28adc1ed1..23ba813ca1 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -506,6 +506,7 @@ eu: errors: vine_api: "Errorea gertatu da HJArekiko komunikazioan, saia zaitez geroago." invalid_voucher: "Bonuak ez du balio" + expired: "Bonua iraungi da" not_found_voucher: "Sentitzen dugu, ezin izan dugu txartel hori aurkitu, mesedez, egiaztatu kodea." vine_voucher_redeemer_service: errors: @@ -698,6 +699,8 @@ eu: edit: title: "Konektatutako aplikazioaren doikuntzak" enabled_legend: "Gaitutako aplikazio konektatuak" + connected_apps_enabled: + vine: Voucher Integration Engine (VINE) update: resource: Konektatutako aplikazioaren doikuntzak customers: @@ -1008,6 +1011,7 @@ eu: orders: edit: order_sure_want_to: Ziur al zaude eskaera hau %{event} nahi duzula? + voucher_tax_included_in_price: "%{label} (bonuan zerga barne)" tax_on_fees: "Tasen gaineko zerga" invoice_email_sent: 'Posta elektronikoa bidali da fakturarekin.' order_email_resent: 'Eskaeraren posta elektronikoa berriz bidali da' @@ -1302,6 +1306,8 @@ eu: loading: "Kargatzen" need_to_be_manager: "Administratzaileek bakarrik konekta ditzakete aplikazioak." vine: + title: "Voucher Integration Engine (VINE)" + tagline: "Utzi VINE bonoen trukea zure dendaren erakusleihoan." enable: "Konektatu" disable: "Deskonektatu" need_to_be_manager: "Administratzaileek bakarrik konekta ditzakete aplikazioak." @@ -1784,6 +1790,7 @@ eu: save: Gorde voucher_code: Sustapen-kodea voucher_amount: Kopurua + voucher_type: Bonu mota controllers: enterprises: stripe_connect_cancelled: "Striperako konexioa bertan behera geratu da" @@ -1872,6 +1879,12 @@ eu: explaination: Zure eskaera berrikusteko eta berresteko aukera duzu hurrengo urratsean, azken kostuak barne. submit: Hurrengoa - Eskaeraren laburpena cancel: Itzuli Zure informazioa atalera + voucher: + voucher: "%{voucher_amount} Bonua" + apply_voucher: Aplikatu bonoa + placeholder: Sartu bonoaren kodea + confirm_delete: Ziur zaude bonoa kendu nahi duzula? + warning_forfeit_remaining_amount: "Oharra: zure eskaeraren guztizkoa zure bonoa baino txikiagoa bada, baliteke gainerako balioa ezin gastatu ahal izatea." step3: delivery_details: title: Entregaren xehetasunak @@ -1903,7 +1916,10 @@ eu: invalid_email: "Sartu baliozko mezu elektroniko bat" select_a_shipping_method: Hautatu bidalketa-metodoa select_a_payment_method: Hautatu ordainketa-metodoa + voucher_code_blank: Mesedez, sartu bono-kode baliodun bat add_voucher_error: Errore bat gertatu da bonoa gehitzean + create_voucher_error: "Errore bat gertatu da bonoa sortzerakoan: %{error}" + voucher_redeeming_error: Errore bat gertatu da zure bonoa trukatzen saiatzean shops: hubs: show_closed_shops: "Denda itxiak erakutsi" @@ -2227,6 +2243,7 @@ eu: email_order_summary_subtotal: "Subtotala:" email_order_summary_total: "Guztira:" email_order_summary_includes_tax: "(zergak barne):" + email_order_summary_voucher_label: "Bonua ( %{code} ):" email_payment_paid: ORDAINDUA email_payment_not_paid: ORDAINDU GABE email_payment_description: Erosketaren ordainketaren deskribapena @@ -4058,9 +4075,7 @@ eu: providers: provider: "Hornitzailea" check: "Eskudirua/transferentzia/etab. (automatikoki baliozkotzea eskatzen ez duten ordainketak)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 132a49cfca..6c13012ae4 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -4401,9 +4401,7 @@ fi: providers: provider: "Palveluntarjoaja" check: "Käteinen/sähköinen maksu/jne. (maksut, joille ei vaadita automaattista vahvistusta)" - pin: "PIN-maksut" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 736abf3d88..074fe71a47 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -120,6 +120,64 @@ fr: one: "a un contenu invalide (le type de contenu autorisé est %{authorized_human_content_types})" many: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" other: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + content_type_spoofed: + one: "a un type de contenu qui n'est pas équivalent avec celui détecté (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + file_size_not_less_than: "la taille du fichier doit être inférieure à %{max} (la taille actuelle est %{file_size})" + file_size_not_less_than_or_equal_to: "la taille du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{file_size})" + file_size_not_greater_than: "la taille du fichier doit être supérieure à %{min} (la taille actuelle est %{file_size})" + file_size_not_greater_than_or_equal_to: "la taille du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{file_size})" + file_size_not_between: "la taille du fichier doit être comprise entre %{min} et %{max} (la taille actuelle est %{file_size})" + file_size_not_equal_to: "La taille du fichier doit être égale à %{exact} (la taille actuelle est %{file_size} )" + total_file_size_not_less_than: "La taille totale du fichier doit être inférieure à %{max} (la taille actuelle est %{total_file_size} )." + total_file_size_not_less_than_or_equal_to: "La taille totale du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{total_file_size} )." + total_file_size_not_greater_than: "La taille totale du fichier doit être supérieure à %{min} (la taille actuelle est %{total_file_size} )." + total_file_size_not_greater_than_or_equal_to: "La taille totale du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{total_file_size} )." + total_file_size_not_between: "La taille totale du fichier doit être comprise entre %{min} et %{max} (la taille actuelle est %{total_file_size} )." + total_file_size_not_equal_to: "La taille totale du fichier doit être égale à %{exact} (la taille actuelle est %{total_file_size} )." + duration_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{duration} )" + duration_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est %{duration})." + duration_not_greater_than: "La durée doit être supérieure à %{min} (la durée actuelle est %{duration})" + duration_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle est %{duration})" + duration_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{duration})" + duration_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{duration})" + limit_out_of_range: + zero: "Aucun fichier joint (doit contenir entre %{min} et %{max} fichiers)" + one: "Seulement 1 fichier joint (doit contenir entre %{min} et %{max} fichiers)" + other: "Le nombre total de fichiers doit être compris entre %{min} et %{max} (il y a %{count} fichiers joints)." + limit_min_not_reached: + zero: "Aucun fichier joint (doit contenir au moins %{min} fichiers)" + one: "Seulement 1 fichier joint (doit contenir au moins %{min} fichiers)" + other: "%{count} fichiers joints (doit contenir au moins %{min} fichiers)" + limit_max_exceeded: + zero: "Aucun fichier joint (au maximum %{max} fichiers)" + one: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a %{count} )" + other: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a %{count} )" + attachment_missing: "une pièce jointe est manquante" + media_metadata_missing: "n'est pas un fichier multimédia valide" + dimension_min_not_included_in: "doit être plus grand ou égal à %{width} x %{height} pixels" + dimension_max_not_included_in: "doit être plus petit ou égal à %{width} x %{height} pixels" + dimension_width_not_included_in: "la largeur n'est pas comprise entre %{min} et %{max} pixels" + dimension_height_not_included_in: "la hauteur n'est pas comprise entre %{min} et %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixels" + dimension_width_not_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixels" + dimension_height_not_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixels" + dimension_width_not_equal_to: "la largeur doit être égale à %{length} pixels" + dimension_height_not_equal_to: "La hauteur doit être égale à %{length} pixels" + aspect_ratio_not_square: "doit être carré (le fichier actuel est %{width} x %{height} px)" + aspect_ratio_not_portrait: "doit être au format portrait (le fichier actuel mesure %{width} x %{height} px)" + aspect_ratio_not_landscape: "doit être au format paysage (le fichier actuel mesure %{width} x %{height} px)" + aspect_ratio_not_x_y: "doit être %{authorized_aspect_ratios} (le fichier actuel est %{width} x %{height} px)" + aspect_ratio_invalid: "possède un ratio d'image invalide (les ratios d'image valides sont %{authorized_aspect_ratios})" + file_not_processable: "n'est pas identifié comme un fichier multimédia valide" + pages_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{pages})" + pages_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est %{pages})" + pages_not_greater_than: "La durée doit être supérieure à %{max} (la durée actuelle est %{pages})" + pages_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle est %{pages})" + pages_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{pages})" + pages_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{pages})" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: " Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez.

Contacter notre support

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -190,6 +248,9 @@ fr: disconnect_failure: "Déconnecter Stripe a échoué." success_code: disconnected: "Le compte Stripe est déconnecté." + taler: + order_status: + claimed: "La demande de paiement a expiré. Merci d'essayer à nouveau." activemodel: errors: messages: @@ -524,6 +585,7 @@ fr: errors: vine_api: "Il y a eu une erreur de communication avec l'API, merci de réessayer." invalid_voucher: "Le bon de réduction n'est pas valide." + expired: "Le bon de réduction a expiré." not_found_voucher: "Désolé, nous n'avons pas trouvé ce bon de réduction. Merci de vérifier le code qui vous a été transmis." vine_voucher_redeemer_service: errors: @@ -1442,6 +1504,7 @@ fr: owner: Gestionnaire principal producer: Producteur sells_options: + unspecified: non spécifié none: aucun own: les miens any: tous @@ -3307,6 +3370,8 @@ fr: payment_processing_failed: "Le paiement n'a pas pu être traité, veuillez vérifier les informations saisies" payment_method_not_supported: "Cette méthode de paiement n'est pas maintenue. Veuillez en sélectionner une autre." payment_updated: "Paiement mis à jour" + payment_method_taler: + order_summary: "Commande CoopCircuits" cannot_perform_operation: "Le paiement n'a pas pu être mis à jour." action_required: "Une action est requise" tag_rules: "Règles de tag" @@ -3983,6 +4048,8 @@ fr: destroy: success: Le webhook a bien été supprimé. error: Le webhook n'a pas pu être supprimé. + test: + success: Des données test vont être envoyées à l'URL du webhook spree: order_updated: "La commande a été mise à jour" cannot_perform_operation: "Cette opération ne peut pas être réalisée" @@ -4089,6 +4156,7 @@ fr: logourl: "URL logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + tag_rule: "Règle de tag" voucher: "Bon de réduction" configurations: "Configurations" general_settings: "Configurations générales" @@ -4180,6 +4248,8 @@ fr: alt_text: "Texte alternatif" thumbnail: "Miniature" back_to_images_list: "Retour à la liste des images" + backend_url: "URL du backend" + api_key: "Clé API" email: Email account_updated: "Compte mis à jour!" email_updated: "Le compte sera mis à jour une fois la nouvelle adresse email confirmée." @@ -4496,10 +4566,9 @@ fr: providers: provider: "Fournisseur" check: "Espèces / chèques / virements / autres " - pin: "Méthode de paiement réservée à l'Australie (Pin Payments)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (ancienne version)" stripesca: "Stripe" + taler: "Taler" payments: source_forms: stripe: @@ -4986,6 +5055,8 @@ fr: create_placeholder: Entrez l'URL du point de terminaison du webhook event_types: order_cycle_opened: Cycle de vente ouvert + payment_status_changed: Poster webhook sur le changement du statut de paiement + test_endpoint: Tester le point de terminaison du webhook invisible_captcha: sentence_for_humans: "Merci de laisser ce champ libre" timestamp_error_message: "S'il vous plaît réessayez après 5 secondes." diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index 40b8643e4a..b02cb428d5 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -72,10 +72,17 @@ fr_BE: preferred_first_item: "Premier élément de la calculatrice :" preferred_additional_item: "Coût supplémentaire de l'article :" preferred_max_items: "Nombre maximum d'éléments de la calculatrice :" + preferred_minimal_amount: "Montant minimum" + preferred_normal_amount: "Montant normal" + preferred_discount_amount: "Montant de la réduction" + preferred_unit_from_list: "A l'unité depuis la liste" + preferred_per_unit: "A l'unité" enterprise: white_label_logo_link: "Lien pour le logo utilisé en vitrine" errors: models: + enterprise_fee: + inherit_tax_requires_per_item_calculator: "L'héritage de la catégorie de taxe nécessite un calculateur par article." spree/image: attributes: attachment: @@ -108,6 +115,69 @@ fr_BE: blank: "Champ obligatoire" too_short: "est trop court (le minimum est %{count} caractères)" errors: + messages: + content_type_invalid: + one: "a un contenu invalide (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + content_type_spoofed: + one: "a un type de contenu qui ne correspond pas a celui détecté grâce au contenu (type de contenu autorisé %{authorized_human_content_types})" + many: "a un type de contenu qui ne correspond pas a celui détecté grâce au contenu (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un type de contenu qui ne correspond pas a celui détecté grâce au contenu (les types de contenus autorisés sont %{authorized_human_content_types})" + file_size_not_less_than: "la taille du fichier doit être inférieure à %{max} (taille actuelle %{file_size})" + file_size_not_less_than_or_equal_to: "la taille du fichier doit être inférieure ou égale à %{max} (taille actuelle : %{file_size})" + file_size_not_greater_than: "la taille du fichier doit être supérieure à%{min} (taille actuelle : %{file_size})" + file_size_not_greater_than_or_equal_to: "la taille du fichier doit être supérieure ou égale à %{min} (taille actuelle : %{file_size})" + file_size_not_between: "la taille du fichier doit être comprise entre %{min} et %{max} (taille actuelle : %{file_size})" + file_size_not_equal_to: "La taille du fichier doit être égale à %{exact} (la taille actuelle est %{file_size} )" + total_file_size_not_less_than: "La taille totale du fichier doit être inférieure à %{max} (taille actuelle : %{total_file_size} )." + total_file_size_not_less_than_or_equal_to: "La taille totale du fichier doit être inférieure ou égale à %{max} (taille actuelle : %{total_file_size} )." + total_file_size_not_greater_than: "La taille totale du fichier doit être supérieure à %{min} (taille actuelle : %{total_file_size} )." + total_file_size_not_greater_than_or_equal_to: "La taille totale du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{total_file_size} )." + total_file_size_not_between: "La taille totale du fichier doit être comprise entre %{min} et %{max} (la taille actuelle est %{total_file_size} )." + total_file_size_not_equal_to: "La taille totale du fichier doit être égale à %{exact} (la taille actuelle est %{total_file_size} )." + duration_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{duration} )" + duration_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est %{duration} )." + duration_not_greater_than: "La durée doit être supérieure à %{min} (la durée actuelle est %{duration} )" + duration_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle est %{duration} )." + duration_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{duration} )." + duration_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{duration} )" + limit_out_of_range: + zero: "Aucun fichier joint (doit contenir entre %{min} et %{max} fichiers)" + one: "Seulement 1 fichier joint (doit contenir entre %{min} et %{max} fichiers)" + other: "Le nombre total de fichiers doit être compris entre %{min} et %{max} (il y a %{count} fichiers joints)." + limit_min_not_reached: + zero: "Aucun fichier joint (doit contenir au moins %{min} fichiers)" + one: "Seulement 1 fichier joint (doit contenir au moins %{min} fichiers)" + other: "%{count} fichiers joints (doit contenir au moins %{min} fichiers)" + limit_max_exceeded: + zero: "Aucun fichier joint (au maximum %{max} fichiers)" + one: "Trop de fichiers joints (le maximum est %{max} , il y en a %{count} )" + other: "Trop de fichiers joints (le maximum est %{max} , il y en a %{count} )" + attachment_missing: "une pièce jointe est manquante" + media_metadata_missing: "n'est pas un fichier multimédia valide" + dimension_min_not_included_in: "doit être plus grand ou égal à %{width} x %{height} pixels" + dimension_max_not_included_in: "doit être plus petit ou égal à %{width} x %{height} pixels" + dimension_width_not_included_in: "la largeur n'est pas comprise entre %{min} et %{max} pixels" + dimension_height_not_included_in: "la hauteur n'est pas comprise entre %{min} et %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixels" + dimension_width_not_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixels" + dimension_height_not_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixels" + dimension_width_not_equal_to: "la largeur doit être égale à %{length} pixels" + dimension_height_not_equal_to: "La hauteur doit être égale à %{length} pixels" + aspect_ratio_not_square: "doit être carré (le fichier actuel est %{width} x %{height} px)" + aspect_ratio_not_portrait: "doit être au format portrait (le fichier actuel mesure %{width} x %{height} px)" + aspect_ratio_not_landscape: "doit être au format paysage (le fichier actuel mesure %{width} x %{height} px)" + aspect_ratio_not_x_y: "doit être %{authorized_aspect_ratios} (le fichier actuel est %{width} x %{height} px)" + aspect_ratio_invalid: "possède un ratio d'image invalide (les ratios d'iimage valides sont %{authorized_aspect_ratios} )" + file_not_processable: "n'est pas identifié comme un fichier multimédia valide" + pages_not_less_than: "Le nombre de pages doit être inférieur à %{max} (le nombre de pages actuel est %{pages} )" + pages_not_less_than_or_equal_to: "Le nombre de pages doit être inférieur ou égal à %{max} (le nombre de pages actuel est %{pages} )." + pages_not_greater_than: "Le nombre de pages doit être supérieur à %{min} (le nombre de pages actuel est %{pages} )." + pages_not_greater_than_or_equal_to: "Le nombre de pages doit être supérieur ou égal à %{min} (le nombre de pages actuel est %{pages} )." + pages_not_between: "Le nombre de pages doit être compris entre %{min} et %{max} (le nombre de pages actuel est %{pages} )." + pages_not_equal_to: "Le nombre de pages doit être égal à %{exact} (le nombre de pages actuel est %{pages} )." not_found: title: "La page que vous cherchiez n'existe pas (404)" message_html: "Veuillez réessayer

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton Précédent pour revenir à l'écran précédent ou revenir à l'accueil et réessayer.

Contactez le support

Si le problème persiste ou est urgent, veuillez nous en informer. Retrouvez nos coordonnées sur la page locale mondiale d’Open Food Network .

Cela nous aide vraiment si vous pouvez donner autant de détails que possible sur le sujet de la page manquante.

" @@ -134,6 +204,7 @@ fr_BE: incorrect_cvc: "Le code de sécurité de la carte est incorrect." incorrect_zip: "Le code postal de la carte n'a pas été validé." card_declined: "La carte a été refusée." + missing: "Un client qui n'a pas de carte bancaire est entrain d'être facturé. " processing_error: "Une erreur s'est produite lors du traitement de la carte." rate_limit: "Une erreur s'est produite en raison de requêtes atteignant l'API trop rapidement. Veuillez nous faire savoir si vous rencontrez constamment cette erreur." authentication_required: "Le paiement a été refusé car la transaction nécessite une authentification." @@ -177,6 +248,9 @@ fr_BE: disconnect_failure: "Échec à la déconnexion de Stripe" success_code: disconnected: "Le compte Stripe a été déconnecté." + taler: + order_status: + claimed: "La demande de paiement a expiré. Veuillez réessayer." activemodel: errors: messages: @@ -248,6 +322,10 @@ fr_BE: updated_not_active: "Votre mot de passe a bien été réinitialisé, mais votre email n'a pas encore été confirmé." updated: "Votre mot de passe a été changé avec succès. Vous êtes à présent connecté." send_instructions: "Un email a été envoyé avec des instructions pour confirmer votre adresse email. Vérifiez votre boite mail!" + oidc: + failure: "Impossible de se connecter : %{error}" + record_not_unique: "%{uid} est déjà associé à un autre compte" + home_page_alert_html: "Alerte HTML de la page d'accueil" item_description: "Description de l'article" menu_1_icon_name: "Nom de l'icône du menu 1" menu_2_icon_name: "Nom de l'icône du menu 2" @@ -266,10 +344,13 @@ fr_BE: open_street_map_default_longitude: "Longitude par défaut Open Street Map" open_street_map_provider_name: "Nom du fournisseur Open Street Map" open_street_map_provider_options: "Options du fournisseur Open Street Map" + producer_signup_pricing_table_html: "Tableau HTML des prix d'inscription des producteurs" + producers_social: "Réseau social producteur" resume_order: "Reprendre la commande" sku: "Référence produit" subtotal: "Sous-total" tax_rate: "TVA applicable" + with_tax_incl: "%{amount} taxe inclue" producer_mail_qty: Qté validators: date_time_string_validator: @@ -284,20 +365,34 @@ fr_BE: Nous allons examiner la question, mais n'hésitez pas à nous faire savoir si le problème persiste. backorder_mailer: backorder_failed: + subject: "Une commande fournisseur automatique a échoué" + headline: "La commande fournisseur a échoué" + description: | + Nous avons essayé de passer ou mettre à jour une commande fournisseur pour des articles en rupture de stock mais + cela n'a pas fonctionné. Il se peut que vous ayez un stock négatif et que vous deviez résoudre + le problème pour commander un stock plus important. hints: | Il se peut que vous deviez aller dans les paramètres du cycle de vente et reconnecter votre compte. Vérifiez également que le catalogue de votre fournisseur n'a pas changé et qu'il fournit toujours les produits dont vous avez besoin. N'hésitez pas à nous contacter si vous avez des questions. + order: "Commande impactée : %{number}" stock: "Stock" product: "Produit" backorder_incomplete: + subject: "Une commande fournisseur automatique n'a pas pu aboutir" headline: "Votre commande fournisseur n'est pas terminée" + description: | + Nous avons essayé de passer ou mettre à jour une commande fournisseur pour des articles en rupture de stock mais + cela n'a pas fonctionné. Les quantités en attente peuvent être trop élevées si + vous avez eu des annulations. De plus, votre commande fournisseur ne sera pas exécutée + tant qu'elle est à l'état de projet. hints: | Il se peut que vous deviez aller dans les paramètres du cycle de vente et reconnecter votre compte. Vérifiez également que le catalogue de votre fournisseur n'a pas changé et qu'il fournit toujours les produits dont vous avez besoin. N'hésitez pas à nous contacter si vous avez des questions. + affected: "%{enterprise}: %{order_cycle}" enterprise_mailer: confirmation_instructions: subject: "Confirmez l'adresse email pour %{enterprise}" @@ -389,6 +484,7 @@ fr_BE: cancel_order: "Annuler la commande" confirm_send_invoice: "La facture de cette commande va être transmise au client. Etes-vous sûr de vouloir continuer ?" confirm_resend_order_confirmation: "Etes-vous sûr de vouloir renvoyer le mail de confirmation de commande ?" + must_have_valid_business_number: "%{enterprise_name} doit avoir un SIRET valide avant que les factures puissent être utilisées." invoice: "Facture" invoices: "Factures" file: "Fichier" @@ -454,6 +550,7 @@ fr_BE: voucher: Bon d'achat processing_payment: "Paiement en cours..." no_pending_payments: "Aucun paiement en attente" + invalid_payment_state: "Statut de paiement invalide : %{state}" filter_results: Filtrer les résultats clear_filters: Effacer les filtres quantity: Quantité @@ -481,9 +578,12 @@ fr_BE: errors: vine_api: "Il y a eu une erreur de communication avec l'API, merci de réessayer." invalid_voucher: "Le bon de réduction n'est pas valide." + expired: "Le bon de réduction a expiré." + not_found_voucher: "Désolé, nous n'avons pas trouvé ce bon de réduction. Merci de vérifier le code qui vous a été transmis." vine_voucher_redeemer_service: errors: vine_api: "Il y a eu une erreur de communication avec l'API" + redeeming_failed: "Echec de la prise en compte du bon de réduction" actions: create_and_add_another: "Créer et ajouter un nouveau" create: "Créer" @@ -654,6 +754,7 @@ fr_BE: status: Statut ok: Ok instance_secret_key: Clé Secrète de l'Instance + instance_publishable_key: Clé publiable de l'instance account_id: Identifiant Compte business_name: Nom de l'entreprise charges_enabled: Frais activés @@ -672,7 +773,12 @@ fr_BE: connected_app_settings: edit: title: "Paramètres de l'application connectée" - enabled_legend: "Activer les applications connectées" + info_html: "Les applications autorisées apparaitront dans Configuration Entreprise > Applications connectées" + enabled_legend: "Applications connectées activées" + connected_apps_enabled: + discover_regen: Portail Discover Regenerative + affiliate_sales_data: API de commandes anonymisées DFC à fins de recherche + vine: Éditeur de bons de réduction (VINE) update: resource: Paramètres de l'application connectée customers: @@ -716,20 +822,35 @@ fr_BE: user_guide: Guide d'utilisation map: Carte dfc_product_imports: + connection_invalid_html: | + La connexion avec votre compte OIDC a échoué. + Merci de rafraîchir votre connexion OIDC à : %{oidc_settings_link} absent_variant: reset: "Réinitialiser le stock" index: title: "Catalogue produit DFC" + catalog_url: "%{count}produits à importer de : %{catalog_url}" + absent_products: + one: | + Un produit n'est plus dans le catalogue produits. + Il sera marqué indisponible en remettant votre stock à zéro. + other: | + %{count}produits ne sont plus dans votre catalogue produits. + Ils seront marqués indisponibles quand vous remettrez votre stock à zéro. + enterprise: "Importation vers l'entreprise : %{enterprise_name}" select_all: "Sélectionner / désélectionner tout" update: Mettre à jour new: Nouveau selected: zero: "0 sélectionné" one: "1 sélectionné" + other: "%{count} sélectionné" import: Importer invalid_url: L'URL de ce catalogue n'est pas valide. import: title: "Import du catalogue produit DFC" + imported_products: "Produits importés : %{count}" + reset_products: "Réinitialiser le stock pour les produits absents : %{count}" enterprise_fees: index: title: "Marges et Commissions" @@ -874,6 +995,11 @@ fr_BE: clone: success: Le produit a bien été dupliqué error: Impossible de dupliquer le produit + tag_rules: + rules_per_tag: + one: "%{tag} comporte 1 règle" + many: "%{tag} comporte %{count} règles" + other: "%{tag} comporte %{count} règles" product_import: title: Import liste produits file_not_found: Fichier non trouvé ou impossible à ouvrir @@ -1090,6 +1216,7 @@ fr_BE: disabled: Désactiver business_address: company_legal_name: Nom légal d'entreprise + company_placeholder: Exemple Soc. address1: Adresse du siège social address1_placeholder: 123, rue High. address2: Adresse (suite) @@ -1120,6 +1247,7 @@ fr_BE: create_button: Créer une commission enterprise_permissions: legend: "Permissions Inter-entreprises" + enterprise_relationships: Relations inter-entreprises images: legend: "Images" logo: Logo @@ -1159,7 +1287,9 @@ fr_BE: own: Les miens sells: Produits vendus sells_tip: "Aucun - l'entreprise ne vend pas en direct aux acheteurs.
Les miens - l'entreprise vend ses propres produits aux acheteurs.
Tous - l'entreprise vend ses propres produits et/ou les produits d'autres entreprises.
" + external_billing_id: Identifiant Dolibarr external_billing_id_placeholder: 'ex : INV-2024-123456' + external_billing_id_tip: "Ceci est l'identifiant utilisé par la plateforme Dolibarr pour identifier cette entreprise." visible_in_search: Apparaît sur la plateforme? visible_in_search_tip: "Les profils peuvent être 1 1. Visibles publiquement, sur la carte et la liste des comptoirs. 2 2. Invisibles sur la carte et la liste des comptoirs, mais référencées sur les profils des comptoirs et producteurs de leur réseau. 3 3. Complètement invisibles (sauf si on dispose du lien)." visible: Visible par tous @@ -1205,8 +1335,10 @@ fr_BE: customer_names_in_reports: "Nom de client dans le rapport" customer_names_tip: "Autoriser vos fourniseurs à voir les noms des clients dans le rapport " producers_to_edit_orders: "Possibilité pour les producteurs de modifier les commandes" + producers_to_edit_orders_tip: "Permettre à vos fournisseurs de visualiser les commandes comprenant leurs produits et de modifier la quantité et le poids de leurs produits seulement." customer_names_false: "Désactivé" customer_names_true: "Activé" + customer_contacts_in_reports: "Coordonnées du client dans les rapports" customer_contacts_tip: "Autoriser vos fournisseurs de voir l'adresse mail et le téléphone des clients dans les rapports" customer_contacts_false: "Désactivé" customer_contacts_true: "Activé" @@ -1229,6 +1361,7 @@ fr_BE: open_date: "Date d'ouverture" close_date: "Date de fermeture" display_ordering_in_shopfront: "Ordre d'affichage sur le comptoir :" + shopfront_sort_by_product: "Par produit" shopfront_sort_by_category: "Par catégorie" shopfront_sort_by_producer: "Par producteur" shopfront_sort_by_category_placeholder: "Catégorie" @@ -1291,7 +1424,11 @@ fr_BE: voucher_code: Code du bon d'achat rate: 'Taux ' label: Étiquette + purpose: Raison + expiry: Date d'expiration + use_limit: Date limite customers: Acheteur·euse + net_value: Valeur nette active: Actif? add_new: Ajouter un nouveau no_voucher_yet: Pas encore de bons d'achat @@ -1306,21 +1443,41 @@ fr_BE: connected_apps: legend: "Applications connectées" affiliate_sales_data: + title: "Programme de recherche INRAE / UFC QUE CHOISIR" + tagline: "Autoriser ce programme de recherche à accéder à vos données de commandes anonymisées" enable: "Autoriser le partage de données" disable: "Arrêter le partage" loading: "Chargement en cours" need_to_be_manager: "Seuls les gestionnaires peuvent connecter des applications." + description: "L'INRAE et UFC QUE CHOISIR travaillent conjointement sur les prix des produits distribués en circuit court, comparés aux prix des mêmes produits vendus en supermarché, pour un échantillon de produits. Les données utilisées dans le cadre de ce programme de recherche sont une agrégation des données fournies par plusieurs plateformes de vente en circuit court en Belgique. Aucun prix de produit d'une boutique en particulier ne sera transmis publiquement à travers ce programme." + link_label_html: "En savoir plus à propos de ce projet de recherche " + link_url: "https://apropos.coopcircuits.fr/" discover_regen: + title: "Discover Regenerative" + tagline: "Autoriser Discover Regenerative à publier les informations de votre entreprise" enable: "Autoriser le partage de données" disable: "Arrêter le partage" loading: "Chargement en cours" need_to_be_manager: "Seuls les gestionnaires peuvent connecter des applications." + note: | + Votre compte Open Food Network est connecté à Discover Regenerative. + Ajouter et mettre à jour les informations sur votre liste Discover Regenerative ici. + link_label: "Gérer la liste" + description: "Les producteurs admissibles peuvent présenter leurs certifications en matière d'agriculture régénératrice, leurs pratiques agricoles et plus encore grâce à un profil. Cela simplifie la recherche de produits issus de l'agriculture régénératrice et la prise de contact avec les producteurs qui les intéressent." + link_label_html: "En savoir plus sur Discover Regenerative " vine: + title: "Éditeur de bons de réduction (VINE)" + tagline: "Autoriser l'utilisation de bons de réduction VINE dans votre boutique" enable: "Se connecter" disable: "Déconnecter" need_to_be_manager: "Seuls les gestionnaires peuvent connecter des applications." vine_api_key: "clé API VINE" + description: "Pour autoriser l'éditeur de bons de réduction VINE pour votre entreprise, entrer votre clé API et clé secrète" + link_label_html: "VINE " + api_parameters_empty: "Entrez une clé API et un secret" + api_parameters_error: "Vérifiez que vous avez entré la clé API et le secret correctement. Contactez l'équipe support de la plateforme si l'erreur persiste. " connection_error: "Erreur de connexion à l'API. Merci de réessayer." + setup_error: "L'API VINE n'est pas configurée. Veuillez contacter l'équipe support de la plateforme." actions: edit_profile: Paramètres properties: Labels / propriétés @@ -1338,8 +1495,10 @@ fr_BE: owner: Gestionnaire principal producer: Producteur sells_options: + unspecified: indéterminé none: aucun own: les miens + any: tous change_type_form: producer_profile: Profil producteur connect_ofn: Gagnez en visibilité via Open Food Network @@ -1540,6 +1699,7 @@ fr_BE: proceed: Continuer status: undated: sans date + upcoming: prochainement open: ouvert closed: fermé producer_properties: @@ -1551,6 +1711,7 @@ fr_BE: resume: could_not_resume_the_order: La commande n'a pas pu être reprise select2: + minimal_search_length: Entrez %{count} caractères ou plus searching: Recherche... no_matches: Pas de correspondance trouvée shared: @@ -1618,12 +1779,14 @@ fr_BE: metadata: report_title: Type de rapport deprecated: "Ce rapport est obsolète et sera supprimé dans une prochaine mise à jour." + hidden_field: "< Masqué >" unitsize: Unité de mesure total: Total total_items: Nb Articles total_by_customer: Total par client total_by_supplier: Total par fournisseur supplier_totals: Totaux Cycle de Vente par Producteur + percentage: "%{value} %" supplier_totals_by_distributor: Totaux Cycle de Vente par Producteur pour chaque Comptoir totals_by_supplier: Totaux Cycle de Vente par Comptoir pour chaque Producteur customer_totals: Totaux Cycle de Vente par Acheteur·euse @@ -1688,9 +1851,11 @@ fr_BE: suppliers: name: Fournisseurs enterprise_fees_with_tax_report_by_order: "Frais d'entreprise avec rapport fiscal par commande" + enterprise_fees_with_tax_report_by_producer: "Frais d'entreprise avec rapport fiscal par producteur" errors: no_report_type: "Veuillez spécifier un type de rapport" report_not_found: "Rapport introuvable" + missing_ransack_params: " Veuillez fournir les paramètres de recherche Ransack dans la requête" summary_row: total: "Total" table: @@ -1714,20 +1879,30 @@ fr_BE: display: Ecran summary_row: Ligne TOTAL header_row: Ligne titre + metadata_rows: Lignes de métadonnées raw_data: Données brutes formatted_data: Données formatées packing: name: "Rapports de préparation des paniers" oidc_settings: index: + title: "Paramètres OIDC" connect: "Se connecter à votre compte" disconnect: "Déconnecter" + connected: "Votre compte est relié à %{uid}." + les_communs_link: "Serveur OIDC Les Communs" + link_your_account: "Vous devez d'abord lier votre compte avec le fournisseur d'autorisation utilisé par DFC (Les Communs Open ID Connect)" + link_account_button: "Relier votre compte OIDC Les Communs" + note_expiry: | + Les approbations permettant d'accéder aux applications connectées ont expiré. Veuillez rafraîchir + la connexion à votre compte pour que toutes les intégrations fonctionnent. refresh: "Rafraichir l'autorisation" view_account: "Pour voir votre compte, consultez :" subscriptions: index: title: "Commandes récurrentes" new: "Nouvel abonnement" + issue: "Problème" new: title: "Nouvel abonnement" edit: @@ -1842,9 +2017,15 @@ fr_BE: one: "E-mail de confirmation envoyé pour une commande." many: "E-mail de confirmation envoyé pour %{count} commandes." other: "E-mail de confirmation envoyé pour %{count} commandes." + send_invoice_feedback: + one: "Email de facturation envoyé pour 1 commande." + many: "Emails de facturation envoyés pour les commandes %{count} ." + other: "Emails de facturation envoyés pour les commandes %{count} ." api: + unknown_error: "Quelque chose n'a pas fonctionné. Notre équipe a été prévenue." invalid_api_key: "Clé API invalide (%{key}) spécifiée." unauthorized: "Vous n'êtes pas autorisé à effectuer cette action." + unpermitted_parameters: "Paramètres non autorisés dans cette requête : %{params}" missing_parameter: "Un paramètre nécessaire est manquant ou vide : %{param}" invalid_resource: "Ressource non valable. Veuillez corriger les erreurs et réessayer." resource_not_found: "La ressource que vous cherchiez n'a pas pu être trouvée." @@ -1859,6 +2040,7 @@ fr_BE: query_param: error: title: Paramètre de la requête invalide + extra_fields: "Champs invalides: %{fields}" checkout: failed: "La vente a échouée. Veuillez nous le faire savoir afin que nous puissions traiter votre commande." payment_cancelled_due_to_stock: "Paiement annulé : la commande n'a pas pu être finalisée en raison d'un problème de stock." @@ -1905,6 +2087,7 @@ fr_BE: form: card_number: label: Numéro de carte + placeholder: par ex. 4242 4242 4242 4242 card_verification_value: label: CVC card_month: @@ -1913,6 +2096,7 @@ fr_BE: label: Année stripe: use_saved_card: Utiliser la carte enregistrée + use_new_card: Entrez les informations de votre carte save_card: Enregistrer la carte pour une utilisation ultérieure create_new_card: ou entrez les détails de la nouvelle carte ci-dessous explaination: Vous pouvez vérifier et confirmer votre commande à l'étape suivante qui comprend les coûts finaux. @@ -1923,6 +2107,7 @@ fr_BE: apply_voucher: Appliquer le bon d'achat apply: Appliquer placeholder: Entrer le code du bon d'achat + remove_code: Supprimer le code confirm_delete: Êtes-vous sûr de vouloir supprimer le bon ? warning_forfeit_remaining_amount: "Remarque : si le total de votre commande est inférieur à votre bon, vous ne pourrez peut-être pas dépenser la valeur restante." step3: @@ -1958,7 +2143,10 @@ fr_BE: select_a_payment_method: Choisissez une méthode de paiement no_shipping_methods_available: Le paiement n'est pas possible en raison de l'absence d'options d'expédition. Veuillez contacter le propriétaire du magasin. voucher_code_blank: Veuillez entrer un bon de réduction valide + voucher_code_not_found: Invalide. Soit il n'existe pas, soit il a été utilisé en totalité add_voucher_error: Une erreur s'est produite lors de l'ajout du bon + create_voucher_error: "Il y a eu une erreur lors de la création du bon de réduction : %{error}" + voucher_redeeming_error: Il y a eu une erreur lors de la tentative d'utilisation de votre bon de réduction. shops: hubs: show_closed_shops: "Afficher les comptoirs fermés" @@ -1968,6 +2156,7 @@ fr_BE: mailers: powered_by: open_food_network: "Open Food Network" + powered_html: "Votre expérience d'achat a été rendue possible par %{open_food_network}." menu: cart: cart: "Panier" @@ -2029,14 +2218,17 @@ fr_BE: invoice_column_unit_price_without_taxes: "Prix unitaire HT" invoice_column_price_with_taxes: "Prix total TTC" invoice_column_price_without_taxes: "Prix total HT" + invoice_column_price_per_unit_without_taxes: "Prix par unité (hors taxe)" invoice_column_tax_rate: "TVA applicable" invoice_tax_total: "Total TVA :" + invoice_cancel_and_replace_invoice: "annule et remplace la facture" tax_invoice: "FACTURE" tax_total: "Total taxe (%{rate}) :" invoice_shipping_category_delivery: "Livraison" invoice_shipping_category_pickup: "Retrait" total_excl_tax: "Total HT :" total_incl_tax: "Total TTC :" + total_all_tax: "Taxe totale :" abn: "Numéro d'entreprise : " acn: "n° TVA intracommunautaire" invoice_issued_on: "Date de facture :" @@ -2252,6 +2444,9 @@ fr_BE: order_back_to_store: Retour au comptoir order_back_to_cart: Retour au panier order_back_to_website: Retour au site Web + checkout_details_title: Détails de la commande + checkout_payment_title: Paiement de la commande + checkout_summary_title: Résumé de la commande bom_tip: "Utilisez cette page pour modifier les quantités sur plusieurs commandes à la fois. Les produits peuvent aussi être supprimés des commandes si nécessaire." unsaved_changes_warning: "Des modifications n'ont pas été enregistrées et seront perdues si vous continuez." unsaved_changes_error: "Les champs entourés en rouge contiennent des erreurs." @@ -2262,8 +2457,15 @@ fr_BE: email_confirmed: "Veuillez confirmer votre adresse email." email_confirmation_activate_account: "Avant de pouvoir activer votre compte, nous devons nous assurer de la validité de votre adresse email." email_confirmation_greeting: "Bonjour %{contact}!" + email_confirmation_profile_created: > + Un profil pour %{name} a été créé avec succès ! Pour activer votre profil, nous + avons besoin de la confirmation de cette adresse mail. email_confirmation_click_link: "Veuillez cliquer sur le lien ci-dessous pour confirmer votre email et continuer la configuration de votre compte." email_confirmation_link_label: "Confirmer cette adresse email »" + email_confirmation_help_html: > + Après avoir confirmé votre mail, vous pourrez accéder à votre compte administrateur + pour l'entreprise concernée. Regardez %{link} pour en savoir plus sur les fonctionnalités + de %{sitename} et pour commencer à utiliser votre profil ou boutique en ligne." email_confirmation_notice_unexpected: "Vous recevez ce message car vous vous êtes inscrit sur %{sitename}, ou avez été invité à vous inscrire par l'un de vos contacts. Si vous ne comprenez pas pourquoi vous recevez ce message, écrivez à %{contact}." email_social: "Nous suivre:" email_contact: "Nous écrire:" @@ -2640,6 +2842,7 @@ fr_BE: locate_address: "Localiser l'adresse sur la carte" drag_pin: "Faites glisser et déposez la broche à l'emplacement correct si elle n'est pas précise." confirm_address: "Je confirme que la position indiquée sur la carte est correcte. " + drag_map_marker: "En raison de nombreux producteurs opérant dans les zones rurales, la précision des cartes est toujours en cours d'amélioration. Aidez-nous à mieux comprendre où vous vous trouvez en interagissant avec la carte ci-dessus. Déplacez le pointeur en cliquant ou en appuyant dessus pour le maintenir, puis en le faisant glisser vers l'emplacement le plus précis d'après vos connaissances. " contact: title: "Contact" who_is_managing_enterprise: "Qui gère %{enterprise}?" @@ -2650,6 +2853,7 @@ fr_BE: whatsapp_phone_field: "Numéro de téléphone Whatsapp" whatsapp_phone_tooltip: "Ce numéro sera affiché dans votre profil public pour être ouvert en tant que lien WhatsApp." phone_field_placeholder: "ex : +32 (0) 000 00 00 00 " + whatsapp_phone_field_placeholder: "ex. +61 4 1234 5678" type: title: "Catégorie" headline: "Dernière étape pour ajouter %{enterprise} !" @@ -2748,6 +2952,7 @@ fr_BE: price_graph: "Légende détail du prix" included_tax: "Inclut TVA" tax: "Taxe" + tax_amount_included: "%{amount} (inclus)" remove_tax: "Retirer TVA" balance: "Solde" transaction: "Transaction" @@ -2856,6 +3061,7 @@ fr_BE: spree_admin_enterprises_fees: "Marges et commissions" spree_admin_enterprises_none_create_a_new_enterprise: "CRÉER UNE NOUVELLE ENTREPRISE" spree_admin_enterprises_none_text: "Vous n'avez pas encore d'entreprise" + spree_admin_enterprises_showing: "Montrer %{count} de %{total}" spree_admin_enterprises_producers_manage_products: "GÉRER LES PRODUITS" spree_admin_enterprises_create_new_product: "CRÉER UN NOUVEAU PRODUIT" spree_admin_supplier: Fournisseur @@ -2952,9 +3158,13 @@ fr_BE: report_header_hub_address: Adresse du comptoir report_header_to_hub: Comptoir report_header_hub_code: Code du comptoir + report_header_hub_id: Numéro d’identification du Hub + report_header_hub_business_number: "Numéro d'entreprise du Hub" + report_header_hub_external_billing_id: "Identifiant Dolibarr" report_header_hub_legal_name: "Nom légal du comptoir" report_header_hub_contact_name: "Nom du contact du comptoir" report_header_hub_email: "Email public" + report_header_hub_contact_email: e-mail de contact de la boutique report_header_hub_owner_email: Email gestionnaire principal report_header_hub_phone: "Numéro de téléphone" report_header_hub_address_line1: "Adresse ligne 1" @@ -3025,6 +3235,9 @@ fr_BE: report_header_producer: Producteur·trice report_header_producer_suburb: Ville Producteur·trice report_header_producer_tax_status: Statut fiscal du producteur + report_header_producer_charges_sales_tax?: Soumis à la TVA / TPS + report_header_producer_abn_acn: Numéro de SIRET/SIREN du producteur + report_header_producer_address: Adresse du producteur report_header_unit: Unité report_header_group_buy_unit_quantity: Nb d'unités achetées (vente par lots) report_header_cost: Coût @@ -3069,6 +3282,8 @@ fr_BE: report_header_item_fees_price: "Coût produits + Marge (%{currency})" report_header_admin_handling_fees: "Frais si par commande (%{currency})" report_header_ship_price: "Frais de livraison (%{currency})" + report_header_producer_charges_gst: Le producteur facture-t-il la TVA ? + report_header_total_tax_on_product: "Taxe totale sur produit (%{currency})" report_header_pay_fee_price: "Frais de Transaction (%{currency})" report_header_total_price: "Total (%{currency})" report_header_product_total_price: "Total Produit (%{currency})" @@ -3085,7 +3300,11 @@ fr_BE: report_header_total_units: Vol. total report_header_sum_max_total: "Somme Max Total" report_header_total_excl_vat: "Total HT (%{currency_symbol})" + report_header_total_fees_excl_tax: "Total commission fournisseur hors taxe (%{currency_symbol})" + report_header_total_tax_on_fees: "Total taxe sur les commissions fournisseur (%{currency_symbol})" + report_header_total: "Total (%{currency_symbol})" report_header_total_incl_vat: "Total TTC (%{currency_symbol})" + report_header_total_excl_fees_and_tax: "Total hors commission fournisseur et taxe (%{currency_symbol})" report_header_temp_controlled: Temp Contrôlée ? report_header_shipment_state: "Statut livraison" report_header_shipping_method: "Méthode de Livraison" @@ -3101,6 +3320,9 @@ fr_BE: report_header_transaction_fee: Frais de Transaction (TVA non incluse) report_header_total_untaxable_admin: Total ajustements non taxables report_header_total_taxable_admin: Total ajustments soumis à TVA (inclut TVA) + report_header_voucher_label: Label du bon d'achat + report_header_voucher_amount: "Montant du bon d'achat (%{currency_symbol})" + report_line_cost_of_produce: Coût des produits report_line_line_items: Ces articles report_header_last_completed_order_date: Date de la dernière commande terminée report_xero_configuration: Configuration Xero @@ -3137,6 +3359,8 @@ fr_BE: payment_processing_failed: "Le paiement n' a pu être effectué , merci de vérifier les données rentrées" payment_method_not_supported: "Ce mode de paiement n'est pas possible. Veuillez en choisir un autre." payment_updated: "Paiement mis à jour " + payment_method_taler: + order_summary: "Commande Open Food Network" cannot_perform_operation: "Le paiement n'a pas pu être mis à jour." action_required: "Action requise" tag_rules: "Règles de tag" @@ -3184,6 +3408,7 @@ fr_BE: order_cycles_no_permission_to_coordinate_error: "Aucune de vos entreprises n'a les droits requis pour coordonner un cycle de vente" order_cycles_no_permission_to_create_error: "Vous n'avez pas les droits requis pour créer un cycle de vente coordonné par cette entreprise" order_cycle_closed: "Le cycle de commande que vous avez sélectionner vient de fermer. Essayer plus tard." + order_cycle_closed_next_steps: "Le cycle de vente que vous avez sélectionné vient de se terminer. Merci de nous contacter pour finaliser votre commande #%{order_number}!" back_to_orders_list: "Retour vers la liste des commandes " no_orders_found: "Aucune commande trouvée pour ces critères" order_information: "Info commande" @@ -3193,6 +3418,7 @@ fr_BE: amount: "Montant" invoice_number: "Numéro de facture" invoice_file: "Fichier" + invalid_url: "'%{url}' est une URL non valide" state_names: ready: Prêt pending: En attente @@ -3474,6 +3700,8 @@ fr_BE: variant: add_to_cart: "Ajouter" in_cart: "dans le panier" + quantity_in_cart: "%{num}article dans le panier" + remaining_in_stock: "Seulement %{quantity} produits restants" bulk_buy_modal: min_quantity: "Quantité min" max_quantity: "Quantité max" @@ -3539,11 +3767,17 @@ fr_BE: signup_or_login: "Commencez par vous inscrire (ou connexion)" have_an_account: "Déjà inscrit?" action_login: "Se connecter." + stripe_elements: + unknown_error_from_stripe: | + Il a eu un problème lors de la prise en compte de votre carte. + Merci de rafraîchir la page. Si cela ne fonctionne pas une seconde fois, + merci de nous contacter. trix: bold: "Gras" bullets: "Puces" code: "Code" heading1: "En-tête" + hr: "Règle horizontale" indent: "Augmenter d'un niveau" italic: "Italique" link: "Lien" @@ -3581,10 +3815,98 @@ fr_BE: one: "bocal" many: "bocaux" other: "bocaux" + head: + one: "tête" + many: "têtes" + other: "têtes" + bag: + one: "sac" + many: "sacs" + other: "sacs" + loaf: + one: "pain" + many: "pains" + other: "pains" + single: + one: "unité" + many: "unités" + other: "unités" + tub: + one: "bac" + many: "bacs" + other: "bacs" + punnet: + one: "barquette" + many: "barquettes" + other: "barquettes" + packet: + one: "paquet" + many: "paquets" + other: "paquets" item: one: "article" many: "articles" other: "articles" + dozen: + one: "dizaine" + many: "des dizaines" + other: "des dizaines" + unit: + one: "unité" + many: "unités" + other: "unités" + serve: + one: "service" + many: "services" + other: "services" + tray: + one: "plateau" + many: "plateaux" + other: "plateaux" + piece: + one: "pièce" + many: "pièces" + other: "pièces" + pot: + one: "pot" + many: "pots" + other: "pots" + flask: + one: "flacon" + many: "flacons" + other: "flacons" + basket: + one: "panier" + many: "paniers" + other: "paniers" + sack: + one: "sachet" + many: "sachets" + other: "sachets" + bucket: + one: "seau" + many: "seaux" + other: "seaux" + pail: + one: seau + many: seaux + other: seaux + stem: + one: "tige" + many: "tiges" + other: "tiges" + plug: + one: "bouchon" + many: "bouchons" + other: "bouchons" + bulb: + one: "bulbe" + many: "bulbes" + other: "bulbes" + root: + one: "racine" + many: "racines" + other: "racines" producers: signup: start_free_profile: "Commencez par créer votre profil entreprise, et présentez votre formule quand vous êtes prêt !" @@ -3674,15 +3996,27 @@ fr_BE: first: "Début" previous: "Précédent" last: "Fin" + webhook_endpoints: + create: + success: Le webhook a bien été créé. + error: Le webhook n'a pas pu être créé. + destroy: + success: Le webhook a bien été supprimé. + error: Le webhook n'a pas pu être supprimé. + test: + success: Des données de test vont être envoyées à l'URL du webhook spree: order_updated: "Commande mise à jour" + cannot_perform_operation: "Cette opération ne peut pas être réalisée" add_country: "Ajouter un pays" add_state: "Ajouter une province" adjustment: "Ajustement" all: "Tous" + associated_adjustment_closed: "L'ajustement associé est fermé" back_to_adjustments_list: "Retour aux ajustements" back_to_users_list: "Retour aux utilisateurs" back_to_zones_list: "Retour aux zones" + card_code: "Code de la carte" card_number: "Numéro de carte" category: "Catégorie" created_successfully: "Créé avec succès" @@ -3694,6 +4028,7 @@ fr_BE: expiration: "Expiration" invalid_payment_provider: "Fournisseur de paiement invalide" items_cannot_be_shipped: "Les articles ne peuvent pas être expédiés" + gateway_config_unavailable: "Configuration de la passerelle indisponible" gateway_error: "Paiement échoué" more: "Plus" new_adjustment: "Nouvel ajustement" @@ -3763,6 +4098,7 @@ fr_BE: credit_card: "Carte de crédit" new_payment: "Nouveau paiement" capture: "Payée" + capture_and_complete_order: "Capturer et terminer la commande" void: "Vide" login: "Se connecter" password: "Mot de passe" @@ -3774,6 +4110,7 @@ fr_BE: logourl: "Url logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + tag_rule: "Règle de tag" voucher: "Bon d'achat" configurations: "Configurations" general_settings: "Réglages Généraux" @@ -3808,6 +4145,7 @@ fr_BE: tax_rate_amount_explanation: "Les taux sont décimaux pour faciliter les calculs (par ex. un taux de 5% sera entré en tant que 0.05) " included_in_price: "Inclus dans le prix " show_rate_in_label: "Montrer le taux sur l'étiquette " + back_to_tax_rates_list: "Revenir à la liste des taux de taxe" tax_settings: "Paramètres TVA" zones: "Zones" new_zone: "Nouvelle zone " @@ -3864,6 +4202,8 @@ fr_BE: alt_text: "Texte alternatif" thumbnail: "Miniature" back_to_images_list: "Retour à la liste d'images" + backend_url: "URL du serveur" + api_key: "clé API" email: Email account_updated: "Compte mis à jour!" email_updated: "Le compte sera mis à jour une fois la nouvelle adresse-mail confirmée" @@ -3879,6 +4219,7 @@ fr_BE: cannot_create_payment_without_payment_methods: "Vous ne pouvez pas créer un paiement pour une commande sans qu'aucun mode de paiement ne soit défini." please_define_payment_methods: "Veuillez d'abord définir certains modes de paiement." options: "Options" + has_no_shipped_units: "n'a pas d'éléments envoyés" successfully_created: '%{resource}est crée avec succès! ' successfully_updated: '%{resource}a été enregistrée avec succès' payment_method: "Méthode de paiement" @@ -3906,6 +4247,7 @@ fr_BE: payment_state: "Statut du Paiement" errors: messages: + included_price_validation: "ne peut pas être sélectionné à moins d'avoir une zone de taxe par défaut" blank: "Champ obligatoire" invalid_instagram_url: "Doit être uniquement le nom d'utilisateur, par exemple. le_prod" layouts: @@ -3948,6 +4290,7 @@ fr_BE: enterprise_relationships: "Permissions" customers: "Acheteur·euse·s" groups: "Groupes" + oidc_settings: "Paramètres OIDC" overview: "Aperçu" product_import: "Importer" enterprise_roles: "Roles" @@ -3982,6 +4325,7 @@ fr_BE: continue: "Suivant" new: new_return_authorization: "Nouvelle autorisation de retour" + back_to_return_authorizations_list: "Revenir à la liste des autorisations" continue: "Suivant" edit: receive: "recevoir" @@ -4007,6 +4351,11 @@ fr_BE: orders: add_product: cannot_add_item_to_canceled_order: "Impossible d'ajouter un article à une commande annulée" + cannot_add_item_to_shipped_order: "Il n'est pas possible d'ajouter des produits sur une commande livrée." + include_out_of_stock_variants: "Inclure les variantes sans stock disponible" + shipment: + mark_as_shipped_message_html: "Cette action marque la commande comme livrée.
Etes-vous certain de vouloir faire ceci? " + mark_as_shipped_label_message: "Envoyer une notification de livraison / distribution par e-mail au client" index: listing_orders: "Liste des commandes" new_order: "Nouvelle commande" @@ -4065,6 +4414,9 @@ fr_BE: line_item_adjustments: "Ajustements d'élément de ligne" order_adjustments: "Ajustement de commandes" order_total: "Total commande " + invoices: + index: + order_has_changed: "La commande a changé depuis la dernière mise à jour de la facture. La facture affichée ici risque donc de ne pas être à jour." overview: enterprises_header: ofn_with_tip: Les Entreprises sont des Producteur·trice·s et/ou Comptoirs, et sont donc les organisations de base qui utilisent Open Food Network. @@ -4073,6 +4425,7 @@ fr_BE: has_no_payment_methods: "n'a aucune méthode de paiement" has_no_shipping_methods: "n'a aucune méthode de retrait/livraison" products: + products_tip: "Les produits que vous vendez via Open Food Network." active_products: zero: "Vous n'avez aucun produit actif." one: "U heeft één aktieve product" @@ -4089,6 +4442,8 @@ fr_BE: many: "Vous avez %{count} cycles de vente actifs." other: "Vous avez %{count} cycles de vente actifs." manage_order_cycles: "GERER LES CYCLES DE VENTE" + version: + view_all_releases: Voir toutes les mises à jour shipping_methods: index: shipping_methods: "Méthodes de livraison" @@ -4166,7 +4521,8 @@ fr_BE: provider: "Fournisseur" check: "Espèces / chèques / virements / autres (sans validation automatique)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" + stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: @@ -4182,6 +4538,8 @@ fr_BE: new_product: "Nouveau Produit" supplier: "Fournisseur" supplier_select_placeholder: "Sélectionnez un fournisseur" + search_for_suppliers: "Chercher des fournisseurs" + search_for_units: "Chercher des unités" product_name: "Nom du Produit" units: "Unité de mesure" value: "Nb unités" @@ -4227,6 +4585,7 @@ fr_BE: reports: table: select_and_search: "Sélectionnez les filtres et cliquez sur %{option} pour accéder à vos données." + hidden_customer_details_tip: "Si les noms et/ou contacts des clients sont masqués, vous pouvez demander au gestionnaire de la boutique de modifier les paramètres de sa boutique pour permettre aux fournisseurs de voir les détails des clients dans les rapports" products_and_inventory: all_products: message: "Notez que les niveaux de stock indiqués proviennent uniquement des listes de produits des fournisseurs. Si vous utilisez le \"catalogue magasin\" pour gérer vos stocks, ces valeurs seront ignorées dans ce rapport." @@ -4297,6 +4656,7 @@ fr_BE: total: "Total" billing_address_name: "Nom" taxons: + back_to_list: "Revenir à la liste des catégories de produits" index: title: "Catégorie Produit" new_taxon: 'Nouvelle catégorie de produit' @@ -4304,9 +4664,17 @@ fr_BE: title: "Nouvelle catégorie de produit" edit: title: "Editer la catégorie de produit" + destroy: + delete_taxon: + success: "Catégorie de produit supprimée avec succès" + error: "Impossible de supprimer la catégorie de produit car des produits sont liés à cette catégorie." form: name: Nom + meta_title: Titre de référencement web + meta_description: Description de référencement Web + meta_keywords: Mot-clés de référencement web description: Description + dfc_id: URI DFC general_settings: edit: legal_settings: "Configuration légales" @@ -4331,6 +4699,8 @@ fr_BE: or_enter_new_card: "Ou entrez les informations pour utiliser une nouvelle carte :" remember_this_card: Se souvenir de cette carte ? date_picker: + flatpickr_date_format: "Y-m-d" + flatpickr_datetime_format: "Y-m-d H:i" today: "Aujourd'hui" now: "Maintenant" close: "Ferme" @@ -4363,6 +4733,7 @@ fr_BE: requires_authorization: "Autorisation nécessaire" void: faire un avoir invalid: invalide + authorise: autorise order_mailer: cancel_email: customer_greeting: "Chère %{name}" @@ -4399,14 +4770,23 @@ fr_BE: subject: "Instructions de réinitialisation du mot de passe" confirmation_instructions: subject: "Veuillez confirmer votre compte" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} sur OFN." + instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que le paiement soit autorisé." shipment_mailer: shipped_email: dear_customer: "Cher Client," + instructions: "Votre commande de %{distributor} : a été expédiée." shipment_summary: "Résumé de l'envoi" subject: "Notification d'expédition" thanks: "Merci pour votre commande." track_information: "Informations de suivi : %{tracking}" track_link: "Lien de suivi : %{url}" + picked_up_instructions: "Votre commande de %{distributor} a été réceptionnée" picked_up_subject: "Notification de réception" test_mailer: test_email: @@ -4435,18 +4815,34 @@ fr_BE: paused: mis en pause canceled: annulé paypal: + already_refunded: "Ce paiement a été remboursé et aucune autre action ne peut être entreprise à son sujet." + no_payment_via_admin_backend: "Vous ne pouvez pas réaliser de paiements via Paypal depuis l'interface d'administration pour le moment." transaction: "Transaction Paypal" + payer_id: "Identifiant du payeur" + transaction_id: "Identifiant de la transaction" + token: "Jeton d'authentification (token)" refund: "Remboursement" refund_amount: "Quantité" + original_amount: "Montant initial : %{amount}" + refund_successful: "Remboursement PayPal réussi" + refund_unsuccessful: "Echec du remboursement PayPal" actions: refund: "Remboursement" + flash: + cancel: "Vous ne voulez pas utiliser PayPal ? Pas de soucis." + connection_failed: "Impossible de se connecter à PayPal." + generic_error: "PayPal a échoué. %{reasons}" users: api_keys: regenerate_key: "Regénération de clé" title: clé API webhook_endpoints: + title: Points de terminaison Webhook + description: Les événements dans le système peuvent déclencher des webhooks vers des systèmes externes. event_type: header: Type d'évènement + url: + header: URL du point de terminaison developer_settings: title: Paramètres développeurs form: @@ -4495,6 +4891,8 @@ fr_BE: saved_cards_popover: Voilà la liste des cartes de paiement que vous avez enregistrées. Votre carte par défaut sera automatiquement sélectionnée au moment de la finalisation d'une commande, et pourra être débitée par les comptoirs auxquels vous avez donné cette autorisation (voir à droite). authorised_shops: shop_name: "Nom du comptoir" + allow_charges?: "Autoriser les paiements sur la carte par défaut ?" + no_default_saved_cards_tooltip: Vous devez sélectionner une carte bancaire par défaut pour autoriser les paiements. localized_number: invalid_format: n'est pas un format valide. Veuillez entrer un nombre. api: @@ -4540,16 +4938,45 @@ fr_BE: many: presque %{count} ans other: presque %{count} an(s) half_a_minute: 30 secondes + less_than_x_seconds: + one: moins d' 1 seconde + many: moins de %{count} secondes + other: moins de %{count} secondes + less_than_x_minutes: + one: moins d'une minute + many: moins de %{count} minutes + other: moins de %{count} minutes + over_x_years: + one: plus d'1 an + many: plus de %{count} années + other: plus de %{count} années + x_seconds: + one: "1 seconde" + many: "%{count} secondes" + other: "%{count} secondes" + x_minutes: + one: "1 minute" + many: "%{count} minutes" + other: "%{count} minutes" x_days: one: "Un jour" many: "%{count} jours" other: "%{count} jour(s)" + x_months: + one: "1 mois" + many: "%{count} mois" + other: "%{count} mois" + x_years: + one: "1 an" + many: "%{count} années" + other: "%{count} années" components: multiple_checked_select: filter_placeholder: "Options de filtre" search_input: placeholder: Rechercher selector_with_filter: + selected_items: "%{count} sélectionné" search_placeholder: Rechercher pagination: next: Suivant @@ -4577,6 +5004,13 @@ fr_BE: add_tag_rule_modal: select_rule_type: "Choisir le type de règle:" add_rule: "Ajouter une règle" + webhook_endpoint_form: + url: + create_placeholder: Entrez l'URL du point de terminaison du webhook + event_types: + order_cycle_opened: Cycle de vente ouvert + payment_status_changed: Post-webhook lors d'un changement de statut de paiement + test_endpoint: Tester le point de terminaison du webhook invisible_captcha: sentence_for_humans: "Veuillez laisser vide" timestamp_error_message: "Veuillez réessayer après 5 secondes." diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index fc2a795dcc..d72b6b0ea8 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -4162,6 +4162,7 @@ fr_CA: alt_text: "Texte alternatif" thumbnail: "Miniature" back_to_images_list: "Retour à la liste des images" + api_key: "Clé API" email: Email account_updated: "Compte mis à jour!" email_updated: "Le compte sera mis à jour une fois la nouvelle adresse email confirmée." @@ -4478,9 +4479,7 @@ fr_CA: providers: provider: "Fournisseur" check: "Espèces / chèques / virements / autres " - pin: "Méthode de paiement réservée à l'Australie (Pin Payments)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (ancienne version)" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/fr_CH.yml b/config/locales/fr_CH.yml index 21e478c859..971db2c6c3 100644 --- a/config/locales/fr_CH.yml +++ b/config/locales/fr_CH.yml @@ -3875,9 +3875,7 @@ fr_CH: providers: provider: "Fournisseur" check: "Espèces / chèques / virements / autres " - pin: "Méthode de paiement réservée à l'Australie (Pin Payments)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (ancienne version)" stripesca: "Stripe" payments: source_forms: diff --git a/config/locales/fr_CM.yml b/config/locales/fr_CM.yml index a1fa179693..0ecd689450 100644 --- a/config/locales/fr_CM.yml +++ b/config/locales/fr_CM.yml @@ -3785,9 +3785,7 @@ fr_CM: providers: provider: "Fournisseur" check: "Espèces / chèques / virements / autres " - pin: "Méthode de paiement réservée à l'Australie (Pin Payments)" paypalexpress: "PayPal Express" - stripeconnect: "Stripe (ancienne version)" stripesca: "Stripe" payments: source_forms: diff --git a/config/locales/hi.yml b/config/locales/hi.yml index e7ea0b062f..8fb6623820 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -3791,6 +3791,7 @@ hi: alt_text: "वैकल्पिक टेक्स्ट" thumbnail: "थंबनेल" back_to_images_list: "छवियों की सूची पर वापस जाएं" + api_key: "API कुंजी" email: ईमेल account_updated: "अकाउंट अपडेट किया गया!" email_updated: "नए ईमेल की पुष्टि होने के बाद अकाउंट अपडेट हो जाएगा।" @@ -4096,9 +4097,7 @@ hi: providers: provider: "प्रदाता" check: "नकद/EFT/आदि (ऐसे भुगतान जिनके लिए ऑटोमैटिक वेरिफिकेशन की आवश्यकता नहीं है)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index c590d72600..d9e5eb0377 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -4001,6 +4001,7 @@ hu: alt_text: "Alternatív szöveg" thumbnail: "Miniatűr" back_to_images_list: "Vissza a képek listájához" + api_key: "API kulcs" email: Email account_updated: "Fiók frissítve!" email_updated: "A fiók az új e-mail-cím megerősítését követően frissül." @@ -4316,9 +4317,7 @@ hu: providers: provider: "Szolgáltató" check: "Készpénz/EFT/stb. (olyan kifizetések, amelyeknél nincs szükség automatikus érvényesítésre)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/it.yml b/config/locales/it.yml index e3959bbaac..07c2a17ad4 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -3656,6 +3656,7 @@ it: alt_text: "Testo alternativo" thumbnail: "Thumbnail" back_to_images_list: "Torna alla lista Immagini" + api_key: "Chiave API" email: Email account_updated: "Account aggiornato!" email_updated: "L'account sarà aggiornato una volta confermata la nuova email" @@ -3953,9 +3954,7 @@ it: providers: provider: "Provider" check: "Contanti o altri metodi di pagamento per cui non è richiesta una validazione automatica" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/it_CH.yml b/config/locales/it_CH.yml index 9fe5172add..71bcffe281 100644 --- a/config/locales/it_CH.yml +++ b/config/locales/it_CH.yml @@ -3820,9 +3820,7 @@ it_CH: providers: provider: "Provider" check: "Contanti o altri metodi di pagamento per cui non è richiesta una validazione automatica" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 871223d3cf..1fda2a412e 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -3764,9 +3764,7 @@ ko: providers: provider: "제공자" check: "현금/온라인 이체/기타 등등 (자동 유효성 검사가 필요하지 않은 지불)" - pin: "핀 결제" paypalexpress: "페이팔 익스프레스" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/ml.yml b/config/locales/ml.yml index 607f823932..c8558ec5df 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -3815,6 +3815,7 @@ ml: alt_text: "ഇതര വാചകം" thumbnail: "ലഘുചിത്രം" back_to_images_list: "ചിത്രങ്ങളുടെ പട്ടികയിലേക്ക് മടങ്ങുക" + api_key: "എപിഐ കീ" email: ഇമെയിൽ account_updated: "അക്കൗണ്ട് അപ്ഡേറ്റ് ചെയ്തു!" email_updated: "പുതിയ ഇമെയിൽ സ്ഥിരീകരിച്ചുകഴിഞ്ഞാൽ അക്കൗണ്ട് അപ്‌ഡേറ്റ് ചെയ്യും." @@ -4121,9 +4122,7 @@ ml: providers: provider: "ദാതാവ്" check: "പണം/ഇഎഫ്ടി/ മുതലായവ (ഓട്ടോമാറ്റിക് മൂല്യനിർണ്ണയം ആവശ്യമില്ലാത്ത പേയ്‌മെന്റുകൾ)" - pin: "പേയ്‌മെന്റുകൾ പിൻ ചെയ്യുക" paypalexpress: "പേപാൽ എക്സ്പ്രസ്" - stripeconnect: "സ്‌ട്രൈപ്പ്" stripesca: "സ്‌ട്രൈപ്പ് എസ്സിഎ" payments: source_forms: diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 19e1ab534c..221c5ab168 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -3696,6 +3696,7 @@ mr: alt_text: "पर्यायी मजकूर" thumbnail: "लघुप्रतिमा" back_to_images_list: "प्रतिमा सूचीकडे परत" + api_key: "API key" email: ईमेल account_updated: "खाते अपडेट केले!" email_updated: "नवीन ईमेलची पुष्टी झाल्यानंतर खाते अद्यतनित केले जाईल." @@ -3995,9 +3996,7 @@ mr: providers: provider: "प्रदाता" check: "रोख/EFT/इ. (स्वयंचलित प्रमाणीकरण आवश्यक नसलेली पेमेंट्स)" - pin: "पेमेंट्स पिन करा" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 50c793000d..46db40815f 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -4013,6 +4013,7 @@ nb: alt_text: "Alternativ Tekst" thumbnail: "Miniatyrbilde" back_to_images_list: "Tilbake til bildelisten" + api_key: "API-nøkkel" email: Epost account_updated: "Konto oppdatert!" email_updated: "Kontoen vil bli oppdatert når den nye epostadressen er bekreftet." @@ -4328,9 +4329,7 @@ nb: providers: provider: "Tilbyder" check: "Kontanter/ EFT/osv. (betalinger som det ikke kreves automatisk validering av)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 3e7ccf7b2c..9b07c1461c 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -3685,6 +3685,7 @@ pa: alt_text: "ਵੈਕਲਪਿਕ ਟੈਕਸਟ" thumbnail: "ਥੰਬਨੇਲ" back_to_images_list: "ਫੋਟੋ ਸੂਚੀ ਤੇ ਵਾਪਸ" + api_key: "API ਕੁੰਜੀ" email: ਈਮੇਲ account_updated: "ਖਾਤਾ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ!" email_updated: "ਨਵੇਂ ਈਮੇਲ ਦੀ ਪੁਸ਼ਟੀ ਹੋਣ ਤੋਂ ਬਾਅਦ ਖਾਤਾ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾਵੇਗਾ।" @@ -3990,9 +3991,7 @@ pa: providers: provider: "ਪ੍ਰਦਾਤਾ" check: "ਨਕਦ/ਈਐਫਟੀ/ਆਦਿ (ਭੁਗਤਾਨ ਜਿਸ ਲਈ ਸਵੈਚਲਿਤ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ)" - pin: "ਪਿੰਨ ਭੁਗਤਾਨ" paypalexpress: "ਪੇਪਾਲ ਐਕਸਪ੍ਰੈਸ" - stripeconnect: "ਸਟ੍ਰਾਈਪ" stripesca: "ਸਟ੍ਰਾਈਪ SCA" payments: source_forms: diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index 5cdc345a63..feb00a849b 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -3649,9 +3649,7 @@ pt_BR: providers: provider: "Provedor" check: "Dinheiro / Transferência Bancária / Maquininha / etc. (pagamentos para os quais é necessária a validação manual)." - pin: "Pagamentos via Pin" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 8636d8d1dd..e0b2e1a2e7 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -3917,6 +3917,7 @@ ru: alt_text: "Альтернативный Текст" thumbnail: "Миниатюра" back_to_images_list: "Назад К Списку Изображений" + api_key: "Ключ API" email: Email account_updated: "Профиль обновлен!" email_updated: "Профиль будет обновлен после подтверждения нового адреса электронной почты..." @@ -4231,9 +4232,7 @@ ru: providers: provider: "Провайдер" check: "Наличные/ EFT/т. д. (платежи, для которых автоматическая проверка не требуется)" - pin: "Пин Платежи" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 2a2158afed..5a354c3104 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -4266,9 +4266,7 @@ sr: providers: provider: "Провајдер" check: "Готовина/ЕФТ/итд. (плаћања за која није потребна аутоматска валидација)" - pin: "Пин Паиментс" paypalexpress: "ПаиПал Екпресс" - stripeconnect: "Стрипе" stripesca: "Стрипе СЦА" payments: source_forms: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d7880cba3e..dde545e16f 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -3676,9 +3676,7 @@ tr: providers: provider: "Sağlayıcı" check: "Nakit/EFT/vb. (otomatik doğrulamanın gerekli olmadığı ödemeler)" - pin: "Pin Ödemeleri" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index f268121c48..f46c534e9f 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -3888,9 +3888,7 @@ uk: providers: provider: "Провайдер" check: "Готівка/електронний переказ коштів/і т.д. (платежі, для яких не потрібна автоматична перевірка)" - pin: "Pin Payments" paypalexpress: "PayPal Express" - stripeconnect: "Stripe" stripesca: "Stripe SCA" payments: source_forms: From 461fd00ccd420920e8063520d826643741851594 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 8 Feb 2026 18:06:54 +0500 Subject: [PATCH 192/270] Add specs for non-linked fees by introducing specs for non-admin users. Plus include specs refactoring --- spec/requests/admin/reports_ajax_api_spec.rb | 309 +++++++++++-------- 1 file changed, 183 insertions(+), 126 deletions(-) diff --git a/spec/requests/admin/reports_ajax_api_spec.rb b/spec/requests/admin/reports_ajax_api_spec.rb index 37654fb18e..cb4f50c0c2 100644 --- a/spec/requests/admin/reports_ajax_api_spec.rb +++ b/spec/requests/admin/reports_ajax_api_spec.rb @@ -14,6 +14,9 @@ RSpec.describe "Admin Reports AJAX Search API" do let(:product2) { create(:product, price: 23.45, supplier_id: supplier2.id) } let(:product3) { create(:product, price: 34.56, supplier_id: supplier3.id) } + let(:enterprise_fee1) { create(:enterprise_fee, name: "Delivery Fee", enterprise: distributor1) } + let(:enterprise_fee2) { create(:enterprise_fee, name: "Admin Fee", enterprise: distributor2) } + let(:ocA) { create(:simple_order_cycle, coordinator: coordinator1, distributors: [distributor1, distributor2], @@ -59,167 +62,153 @@ RSpec.describe "Admin Reports AJAX Search API" do order end - context "AJAX Search" do - let(:enterprise_fee1) { - create(:enterprise_fee, name: "Delivery Fee", enterprise: distributor1) + let(:base_params) do + { + report_type: :enterprise_fee_summary, + report_subtype: :enterprise_fees_with_tax_report_by_order } - let(:enterprise_fee2) { create(:enterprise_fee, name: "Admin Fee", enterprise: distributor2) } + end + def create_adjustment(order, fee, amount) + order.adjustments.create!( + originator: fee, + label: fee.name, + amount:, + state: "finalized", + order: + ) + end + + context "when user is an admin" do before do login_as create(:admin_user) - orderA1.adjustments.create!( - originator: enterprise_fee1, - label: "Delivery Fee", - amount: 5.0, - state: "finalized", - order: orderA1 - ) - orderB1.adjustments.create!( - originator: enterprise_fee2, - label: "Admin Fee", - amount: 3.0, - state: "finalized", - order: orderB1 - ) + create_adjustment(orderA1, enterprise_fee1, 5.0) + create_adjustment(orderB1, enterprise_fee2, 3.0) end describe "GET /admin/reports/search_enterprise_fees" do - it "returns paginated JSON with enterprise fees ordered by name" do - get "/admin/reports/search_enterprise_fees", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - } + it "returns enterprise fees sorted alphabetically by name" do + get "/admin/reports/search_enterprise_fees", params: base_params expect(response).to have_http_status(:ok) json_response = response.parsed_body - names = json_response["results"].pluck("label") - expect(names).to eq(['Admin Fee', 'Delivery Fee']) + expect(json_response["results"].pluck("label")).to eq(['Admin Fee', 'Delivery Fee']) expect(json_response["pagination"]["more"]).to be false end - it "paginates results and sets more flag correctly with more than 30 records" do - create_list(:enterprise_fee, 35, enterprise: distributor1) do |fee, i| - index = (i + 1).to_s.rjust(2, "0") - fee.update!(name: "Fee #{index}") - orderA1.adjustments.create!( - originator: fee, - label: "Fee #{index}", - amount: 1.0, - state: "finalized", - order: orderA1 - ) + context "with more than 30 records" do + before do + create_list(:enterprise_fee, 35, enterprise: distributor1) do |fee, i| + index = (i + 1).to_s.rjust(2, "0") + fee.update!(name: "Fee #{index}") + create_adjustment(orderA1, fee, 1.0) + end end - get "/admin/reports/search_enterprise_fees", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 1 - } + it "returns first page with 30 results and more flag as true" do + get "/admin/reports/search_enterprise_fees", params: base_params.merge(page: 1) - json_response = response.parsed_body - expect(json_response["results"].length).to eq(30) - expect(json_response["pagination"]["more"]).to be true + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + end - get "/admin/reports/search_enterprise_fees", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 2 - } + it "returns remaining results on second page with more flag as false" do + get "/admin/reports/search_enterprise_fees", params: base_params.merge(page: 2) - json_response = response.parsed_body - expect(json_response["results"].length).to eq(7) - expect(json_response["pagination"]["more"]).to be false + json_response = response.parsed_body + expect(json_response["results"].length).to eq(7) + expect(json_response["pagination"]["more"]).to be false + end end end describe "GET /admin/reports/search_enterprise_fee_owners" do - it "returns paginated JSON with unique enterprise owners ordered by name" do + it "returns unique enterprise fee owners sorted alphabetically by name" do distributor1.update!(name: "Zebra Farm") distributor2.update!(name: "Alpha Market") - get "/admin/reports/search_enterprise_fee_owners", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order - } + get "/admin/reports/search_enterprise_fee_owners", params: base_params expect(response).to have_http_status(:ok) json_response = response.parsed_body - names = json_response["results"].pluck("label") - expect(names).to eq(['Alpha Market', 'Zebra Farm']) + expect(json_response["results"].pluck("label")).to eq(['Alpha Market', 'Zebra Farm']) expect(json_response["pagination"]["more"]).to be false end end describe "GET /admin/reports/search_order_customers" do - it "filters customers by email and returns paginated results" do - customer1 = create(:customer, email: "alice@example.com", enterprise: distributor1) - customer2 = create(:customer, email: "bob@example.com", enterprise: distributor1) + let!(:customer1) { create(:customer, email: "alice@example.com", enterprise: distributor1) } + let!(:customer2) { create(:customer, email: "bob@example.com", enterprise: distributor1) } + + before do orderA1.update!(customer: customer1) orderA2.update!(customer: customer2) + end - get "/admin/reports/search_order_customers", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "alice" - } + it "returns all customers sorted by email" do + get "/admin/reports/search_order_customers", params: base_params + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq(["alice@example.com", + "bob@example.com"]) + expect(json_response["pagination"]["more"]).to be false + end + + it "filters customers by email query" do + get "/admin/reports/search_order_customers", params: base_params.merge(q: "alice") json_response = response.parsed_body expect(json_response["results"].pluck("label")).to eq(["alice@example.com"]) expect(json_response["pagination"]["more"]).to be false end - it "paginates customers and sets more flag correctly with more than 30 records" do - create_list(:customer, 35, enterprise: distributor1) do |customer, i| - customer.update!( - email: "customer#{(i + 1).to_s.rjust(2, '0')}@example.com" - ) - order = create( - :order, - distributor: distributor1, - order_cycle: ocA, - customer: customer - ) - order.line_items << create( - :line_item, - variant: product1.variants.first - ) - order.finalize! + context "with more than 30 customers" do + before do + create_list(:customer, 35, enterprise: distributor1) do |customer, i| + customer.update!(email: "customer#{(i + 1).to_s.rjust(2, '0')}@example.com") + order = create(:order, distributor: distributor1, order_cycle: ocA, customer:) + order.line_items << create(:line_item, variant: product1.variants.first) + order.finalize! + end end - get "/admin/reports/search_order_customers", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 1 - } + it "returns first page with 30 results and more flag as true" do + get "/admin/reports/search_order_customers", params: base_params.merge(page: 1) - json_response = response.parsed_body - expect(json_response["results"].length).to eq(30) - expect(json_response["pagination"]["more"]).to be true + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + end - get "/admin/reports/search_order_customers", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 2 - } + it "returns remaining results on second page with more flag as false" do + get "/admin/reports/search_order_customers", params: base_params.merge(page: 2) - json_response = response.parsed_body - expect(json_response["results"].length).to eq(5) - expect(json_response["pagination"]["more"]).to be false + json_response = response.parsed_body + expect(json_response["results"].length).to eq(7) + expect(json_response["pagination"]["more"]).to be false + end end end describe "GET /admin/reports/search_order_cycles" do - it "filters order cycles by name and orders by close date" do + before do ocA.update!(name: "Winter Market") ocB.update!(name: "Summer Market") + end - get "/admin/reports/search_order_cycles", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "Winter" - } + it "returns order cycles sorted by close date" do + get "/admin/reports/search_order_cycles", params: base_params + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq(["Summer Market", "Winter Market"]) + expect(json_response["pagination"]["more"]).to be false + end + + it "filters order cycles by name query" do + get "/admin/reports/search_order_cycles", params: base_params.merge(q: "Winter") json_response = response.parsed_body expect(json_response["results"].pluck("label")).to eq(["Winter Market"]) @@ -228,42 +217,110 @@ RSpec.describe "Admin Reports AJAX Search API" do end describe "GET /admin/reports/search_distributors" do - it "filters distributors by name" do + before do distributor1.update!(name: "Alpha Farm") distributor2.update!(name: "Beta Market") + end - get "/admin/reports/search_distributors", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - q: "Alpha" - } + it "filters distributors by name query" do + get "/admin/reports/search_distributors", params: base_params.merge(q: "Alpha") json_response = response.parsed_body expect(json_response["results"].pluck("label")).to eq(["Alpha Farm"]) expect(json_response["pagination"]["more"]).to be false end - it "paginates distributors and sets more flag correctly with more than 30 records" do - create_list(:distributor_enterprise, 35) + context "with more than 30 distributors" do + before { create_list(:distributor_enterprise, 35) } - get "/admin/reports/search_distributors", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 1 - } + it "returns first page with 30 results and more flag as true" do + get "/admin/reports/search_distributors", params: base_params.merge(page: 1) + + json_response = response.parsed_body + expect(json_response["results"].length).to eq(30) + expect(json_response["pagination"]["more"]).to be true + end + + it "returns remaining results on subsequent pages with more flag as false" do + get "/admin/reports/search_distributors", params: base_params.merge(page: 2) + + json_response = response.parsed_body + expect(json_response["results"].length).to be > 0 + expect(json_response["pagination"]["more"]).to be false + end + end + end + end + + context "when user is not an admin" do + before do + login_as distributor1.users.first + create_adjustment(orderA1, enterprise_fee1, 5.0) + create_adjustment(orderA2, enterprise_fee2, 3.0) + end + + describe "GET /admin/reports/search_enterprise_fees" do + it "returns only enterprise fees for user's managed enterprises" do + get "/admin/reports/search_enterprise_fees", params: base_params + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + expect(json_response["results"].pluck("label")).to eq(['Delivery Fee']) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_enterprise_fee_owners" do + it "returns only enterprise fee owners for user's managed enterprises" do + get "/admin/reports/search_enterprise_fee_owners", params: base_params + + expect(response).to have_http_status(:ok) + json_response = response.parsed_body + + expect(json_response["results"].pluck("label")).to eq([distributor1.name]) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_order_customers" do + it "returns only customers from user's managed enterprises" do + customer1 = create(:customer, email: "alice@example.com", enterprise: distributor1) + customer2 = create(:customer, email: "bob@example.com", enterprise: distributor1) + orderA1.update!(customer: customer1) + orderA2.update!(customer: customer2) + + get "/admin/reports/search_order_customers", params: base_params json_response = response.parsed_body - expect(json_response["results"].length).to eq(30) - expect(json_response["pagination"]["more"]).to be true + expect(json_response["results"].pluck("label")).to eq(["alice@example.com"]) + expect(json_response["pagination"]["more"]).to be false + end + end - get "/admin/reports/search_distributors", params: { - report_type: :enterprise_fee_summary, - report_subtype: :enterprise_fees_with_tax_report_by_order, - page: 2 - } + describe "GET /admin/reports/search_order_cycles" do + it "returns only order cycles accessible to user's managed enterprises" do + ocA.update!(name: "Winter Market") + ocB.update!(name: "Summer Market") + create(:simple_order_cycle, name: 'Autumn Market', coordinator: coordinator1, + distributors: [distributor2], + suppliers: [supplier1, supplier2, supplier3], + variants: [product2.variants.first]) + + get "/admin/reports/search_order_cycles", params: base_params json_response = response.parsed_body - expect(json_response["results"].length).to be > 0 + expect(json_response["results"].pluck("label")).to eq(["Summer Market", "Winter Market"]) + expect(json_response["pagination"]["more"]).to be false + end + end + + describe "GET /admin/reports/search_distributors" do + it "returns only user's managed distributors" do + get "/admin/reports/search_distributors", params: base_params + + json_response = response.parsed_body + expect(json_response["results"].pluck("label")).to eq([distributor1.name]) expect(json_response["pagination"]["more"]).to be false end end From 7c0586db7b9b53de1cd5396669ef1bb043dc834b Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 8 Feb 2026 18:29:55 +0500 Subject: [PATCH 193/270] Enhance comment for shouldLoad function --- app/webpacker/controllers/tom_select_controller.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/webpacker/controllers/tom_select_controller.js b/app/webpacker/controllers/tom_select_controller.js index fcc6b72e02..3867fa3380 100644 --- a/app/webpacker/controllers/tom_select_controller.js +++ b/app/webpacker/controllers/tom_select_controller.js @@ -103,7 +103,9 @@ export default class extends Controller { this.openedByClick = false; }.bind(this); - // As per TomSelect source code, no result feedback after API call is shown when this callback returns true. + // As per TomSelect source code, Loading state is shown on the UI when this function returns true. + // By default it shows loading state only when there is some input in the search box. + // We want to show loading state on focus as well (when there is no input) to indicate that options are being loaded. options.shouldLoad = function (query) { return this.openedByClick || query.length > 0; }.bind(this); From a690d398640d804d7c150f268eabdc9a68e5d73c Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 8 Feb 2026 18:41:49 +0500 Subject: [PATCH 194/270] Update Finnish date and datetime formats in locale file --- config/locales/fi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 6c13012ae4..ef51cf4202 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -4579,8 +4579,8 @@ fi: or_enter_new_card: "Tai anna uuden kortin tiedot:" remember_this_card: Muistatko tämän kortin? date_picker: - flatpickr_date_format: "Vuosi" - flatpickr_datetime_format: "Vuosi H:i" + flatpickr_date_format: "d.m.Y" + flatpickr_datetime_format: "d.m.Y H:i" today: "Tänään" now: "Nyt" close: "Sulje" From d24af18ff4618939199ba98e64f0985812c6f3a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 10:39:41 +0000 Subject: [PATCH 195/270] Bump @babel/preset-env from 7.28.6 to 7.29.0 Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.28.6 to 7.29.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.29.0/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-version: 7.29.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 214 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 132 insertions(+), 82 deletions(-) diff --git a/yarn.lock b/yarn.lock index de61c0f483..1bc6681c4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,10 +22,19 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" - integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== +"@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.0.tgz#00d03e8c0ac24dd9be942c5370990cbe1f17d88d" + integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== "@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.5": version "7.28.6" @@ -59,6 +68,17 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" +"@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== + dependencies: + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": version "7.27.3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" @@ -110,6 +130,17 @@ lodash.debounce "^4.0.8" resolve "^1.22.10" +"@babel/helper-define-polyfill-provider@^0.6.6": + version "0.6.6" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz#714dfe33d8bd710f556df59953720f6eeb6c1a14" + integrity sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA== + dependencies: + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" + lodash.debounce "^4.0.8" + resolve "^1.22.11" + "@babel/helper-globals@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" @@ -131,7 +162,7 @@ "@babel/traverse" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3", "@babel/helper-module-transforms@^7.28.6": +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== @@ -147,21 +178,11 @@ dependencies: "@babel/types" "^7.27.1" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.8.0": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-plugin-utils@^7.14.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" - integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== - "@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" @@ -227,6 +248,13 @@ dependencies: "@babel/types" "^7.28.6" +"@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" @@ -306,14 +334,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" - integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-syntax-import-attributes@^7.28.6": +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz#b71d5914665f60124e133696f17cd7669062c503" integrity sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw== @@ -419,14 +440,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz#80cb86d3eaa2102e18ae90dd05ab87bdcad3877d" - integrity sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA== +"@babel/plugin-transform-async-generator-functions@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz#63ed829820298f0bf143d5a4a68fb8c06ffd742f" + integrity sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w== dependencies: "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.28.6" + "@babel/traverse" "^7.29.0" "@babel/plugin-transform-async-to-generator@^7.28.6": version "7.28.6" @@ -510,10 +531,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz#e0c59ba54f1655dd682f2edf5f101b5910a8f6f3" - integrity sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz#8014b8a6cfd0e7b92762724443bf0d2400f26df1" + integrity sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.28.5" "@babel/helper-plugin-utils" "^7.28.6" @@ -608,15 +629,15 @@ "@babel/helper-module-transforms" "^7.28.6" "@babel/helper-plugin-utils" "^7.28.6" -"@babel/plugin-transform-modules-systemjs@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" - integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== +"@babel/plugin-transform-modules-systemjs@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz#e458a95a17807c415924106a3ff188a3b8dee964" + integrity sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ== dependencies: - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-validator-identifier" "^7.28.5" - "@babel/traverse" "^7.28.5" + "@babel/traverse" "^7.29.0" "@babel/plugin-transform-modules-umd@^7.27.1": version "7.27.1" @@ -626,13 +647,13 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" - integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz#a26cd51e09c4718588fc4cce1c5d1c0152102d6a" + integrity sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.28.5" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-transform-new-target@^7.27.1": version "7.27.1" @@ -720,10 +741,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz#6ca2ed5b76cff87980f96eaacfc2ce833e8e7a1b" - integrity sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw== +"@babel/plugin-transform-regenerator@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz#dec237cec1b93330876d6da9992c4abd42c9d18b" + integrity sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog== dependencies: "@babel/helper-plugin-utils" "^7.28.6" @@ -822,11 +843,11 @@ "@babel/helper-plugin-utils" "^7.28.6" "@babel/preset-env@^7.28.5": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.6.tgz#b4586bb59d8c61be6c58997f4912e7ea6bd17178" - integrity sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.0.tgz#c55db400c515a303662faaefd2d87e796efa08d0" + integrity sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w== dependencies: - "@babel/compat-data" "^7.28.6" + "@babel/compat-data" "^7.29.0" "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-plugin-utils" "^7.28.6" "@babel/helper-validator-option" "^7.27.1" @@ -840,7 +861,7 @@ "@babel/plugin-syntax-import-attributes" "^7.28.6" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.28.6" + "@babel/plugin-transform-async-generator-functions" "^7.29.0" "@babel/plugin-transform-async-to-generator" "^7.28.6" "@babel/plugin-transform-block-scoped-functions" "^7.27.1" "@babel/plugin-transform-block-scoping" "^7.28.6" @@ -851,7 +872,7 @@ "@babel/plugin-transform-destructuring" "^7.28.5" "@babel/plugin-transform-dotall-regex" "^7.28.6" "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.28.6" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.0" "@babel/plugin-transform-dynamic-import" "^7.27.1" "@babel/plugin-transform-explicit-resource-management" "^7.28.6" "@babel/plugin-transform-exponentiation-operator" "^7.28.6" @@ -864,9 +885,9 @@ "@babel/plugin-transform-member-expression-literals" "^7.27.1" "@babel/plugin-transform-modules-amd" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.28.6" - "@babel/plugin-transform-modules-systemjs" "^7.28.5" + "@babel/plugin-transform-modules-systemjs" "^7.29.0" "@babel/plugin-transform-modules-umd" "^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.0" "@babel/plugin-transform-new-target" "^7.27.1" "@babel/plugin-transform-nullish-coalescing-operator" "^7.28.6" "@babel/plugin-transform-numeric-separator" "^7.28.6" @@ -878,7 +899,7 @@ "@babel/plugin-transform-private-methods" "^7.28.6" "@babel/plugin-transform-private-property-in-object" "^7.28.6" "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.6" + "@babel/plugin-transform-regenerator" "^7.29.0" "@babel/plugin-transform-regexp-modifiers" "^7.28.6" "@babel/plugin-transform-reserved-words" "^7.27.1" "@babel/plugin-transform-shorthand-properties" "^7.27.1" @@ -891,10 +912,10 @@ "@babel/plugin-transform-unicode-regex" "^7.27.1" "@babel/plugin-transform-unicode-sets-regex" "^7.28.6" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" - core-js-compat "^3.43.0" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -938,6 +959,19 @@ "@babel/types" "^7.28.6" debug "^4.3.1" +"@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" @@ -946,6 +980,14 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2639,13 +2681,13 @@ babel-plugin-jest-hoist@30.2.0: dependencies: "@types/babel__core" "^7.20.5" -babel-plugin-polyfill-corejs2@^0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" - integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== +babel-plugin-polyfill-corejs2@^0.4.14, babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz#808fa349686eea4741807cfaaa2aa3aa57ce120a" + integrity sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw== dependencies: - "@babel/compat-data" "^7.27.7" - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.6" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.13.0: @@ -2656,12 +2698,20 @@ babel-plugin-polyfill-corejs3@^0.13.0: "@babel/helper-define-polyfill-provider" "^0.6.5" core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" - integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz#65b06cda48d6e447e1e926681f5a247c6ae2b9cf" + integrity sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/helper-define-polyfill-provider" "^0.6.6" + core-js-compat "^3.48.0" + +babel-plugin-polyfill-regenerator@^0.6.5, babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz#69f5dd263cab933c42fe5ea05e83443b374bd4bf" + integrity sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.6" babel-preset-current-node-syntax@^1.2.0: version "1.2.0" @@ -2775,7 +2825,7 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.27.0, browserslist@^4.28.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.24.0, browserslist@^4.27.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -3075,12 +3125,12 @@ cookie@~0.7.1, cookie@~0.7.2: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== -core-js-compat@^3.43.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" - integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== +core-js-compat@^3.43.0, core-js-compat@^3.48.0: + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" + integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== dependencies: - browserslist "^4.28.0" + browserslist "^4.28.1" core-util-is@~1.0.0: version "1.0.3" @@ -3297,7 +3347,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -6239,7 +6289,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.1.7, resolve@^1.22.10, resolve@^1.9.0: +resolve@^1.1.7, resolve@^1.22.10, resolve@^1.22.11, resolve@^1.9.0: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== From 11e8c9456d330fa224b2c9ed1a1aad171a289fd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:10:18 +0000 Subject: [PATCH 196/270] Bump @babel/core from 7.28.6 to 7.29.0 Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.28.6 to 7.29.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.29.0/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-version: 7.29.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 74 ++++++++++--------------------------------------------- 1 file changed, 13 insertions(+), 61 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1bc6681c4a..49a30ba12c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,16 +13,7 @@ "@csstools/css-tokenizer" "^3.0.3" lru-cache "^10.4.3" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" - integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== - dependencies: - "@babel/helper-validator-identifier" "^7.28.5" - js-tokens "^4.0.0" - picocolors "^1.1.1" - -"@babel/code-frame@^7.29.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== @@ -37,19 +28,19 @@ integrity sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg== "@babel/core@^7.23.9", "@babel/core@^7.27.4", "@babel/core@^7.28.5": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f" - integrity sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== dependencies: - "@babel/code-frame" "^7.28.6" - "@babel/generator" "^7.28.6" + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" "@babel/helper-compilation-targets" "^7.28.6" "@babel/helper-module-transforms" "^7.28.6" "@babel/helpers" "^7.28.6" - "@babel/parser" "^7.28.6" + "@babel/parser" "^7.29.0" "@babel/template" "^7.28.6" - "@babel/traverse" "^7.28.6" - "@babel/types" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -57,18 +48,7 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.27.5", "@babel/generator@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1" - integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw== - dependencies: - "@babel/parser" "^7.28.6" - "@babel/types" "^7.28.6" - "@jridgewell/gen-mapping" "^0.3.12" - "@jridgewell/trace-mapping" "^0.3.28" - jsesc "^3.0.2" - -"@babel/generator@^7.29.0": +"@babel/generator@^7.27.5", "@babel/generator@^7.29.0": version "7.29.1" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== @@ -241,14 +221,7 @@ "@babel/template" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" - integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== - dependencies: - "@babel/types" "^7.28.6" - -"@babel/parser@^7.29.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.28.6", "@babel/parser@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== @@ -946,20 +919,7 @@ "@babel/parser" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" - integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg== - dependencies: - "@babel/code-frame" "^7.28.6" - "@babel/generator" "^7.28.6" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.6" - "@babel/template" "^7.28.6" - "@babel/types" "^7.28.6" - debug "^4.3.1" - -"@babel/traverse@^7.29.0": +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.5", "@babel/traverse@^7.28.6", "@babel/traverse@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== @@ -972,15 +932,7 @@ "@babel/types" "^7.29.0" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.4.4": - version "7.28.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" - integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" - -"@babel/types@^7.29.0": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.5", "@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.4": version "7.29.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== From c3cc01c677c4f290d00b61b2cc4399d86c5a0883 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:32:51 +0000 Subject: [PATCH 197/270] Bump tom-select from 2.4.3 to 2.4.5 Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.4.3 to 2.4.5. - [Release notes](https://github.com/orchidjs/tom-select/releases) - [Commits](https://github.com/orchidjs/tom-select/compare/v2.4.3...v2.4.5) --- updated-dependencies: - dependency-name: tom-select dependency-version: 2.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 49a30ba12c..23458e833b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7064,9 +7064,9 @@ toidentifier@1.0.1, toidentifier@~1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tom-select@*: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.3.tgz#1daa4131cd317de691f39eb5bf41148265986c1f" - integrity sha512-MFFrMxP1bpnAMPbdvPCZk0KwYxLqhYZso39torcdoefeV/NThNyDu8dV96/INJ5XQVTL3O55+GqQ78Pkj5oCfw== + version "2.4.5" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.5.tgz#5c91355c9bf024ff5bc9389f8a2a370e4a28126a" + integrity sha512-ujZ5P10kRohKDFElklhkO4dRM+WkUEaytHhOuzbQkZ6MyiR8e2IwGKXab4v+ZNipE2queN8ztlb0MmRLqoM6QA== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" From 8c244e8b560b5f0467ade53f141f13a59d042fd9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:33:14 +0000 Subject: [PATCH 198/270] Bump @babel/plugin-transform-runtime from 7.28.5 to 7.29.0 Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.28.5 to 7.29.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.29.0/packages/babel-plugin-transform-runtime) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-runtime" dependency-version: 7.29.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 49a30ba12c..9a2166f451 100644 --- a/yarn.lock +++ b/yarn.lock @@ -134,7 +134,7 @@ "@babel/traverse" "^7.28.5" "@babel/types" "^7.28.5" -"@babel/helper-module-imports@^7.27.1", "@babel/helper-module-imports@^7.28.6": +"@babel/helper-module-imports@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== @@ -737,12 +737,12 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-runtime@^7.28.5": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" - integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz#a5fded13cc656700804bfd6e5ebd7fffd5266803" + integrity sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" babel-plugin-polyfill-corejs2 "^0.4.14" babel-plugin-polyfill-corejs3 "^0.13.0" babel-plugin-polyfill-regenerator "^0.6.5" From 4744d7b741f5b40318e1bef1dc80a4d971ffb24f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Feb 2026 09:33:05 +0000 Subject: [PATCH 199/270] Bump webpack from 5.104.1 to 5.105.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.104.1 to 5.105.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack/compare/v5.104.1...v5.105.0) --- updated-dependencies: - dependency-name: webpack dependency-version: 5.105.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 53a1f3c9bc..5ea4903b9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3513,13 +3513,13 @@ engine.io@~6.6.0: engine.io-parser "~5.2.1" ws "~8.17.1" -enhanced-resolve@^5.17.4: - version "5.18.4" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz#c22d33055f3952035ce6a144ce092447c525f828" - integrity sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q== +enhanced-resolve@^5.19.0: + version "5.19.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz#6687446a15e969eaa63c2fa2694510e17ae6d97c" + integrity sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.0" ent@~2.2.0: version "2.2.2" @@ -6989,7 +6989,7 @@ synckit@^0.11.8: dependencies: "@pkgr/core" "^0.2.9" -tapable@^2.2.0, tapable@^2.2.1, tapable@^2.3.0: +tapable@^2.2.1, tapable@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== @@ -7263,10 +7263,10 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -watchpack@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.0.tgz#fa115d5ccaa4bf3aa594f586257c0bc4768939fd" - integrity sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA== +watchpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.1.tgz#dd38b601f669e0cbf567cb802e75cead82cde102" + integrity sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -7376,9 +7376,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.104.0: - version "5.104.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.104.1.tgz#94bd41eb5dbf06e93be165ba8be41b8260d4fb1a" - integrity sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA== + version "5.105.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" + integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" @@ -7390,7 +7390,7 @@ webpack@^5.104.0: acorn-import-phases "^1.0.3" browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.4" + enhanced-resolve "^5.19.0" es-module-lexer "^2.0.0" eslint-scope "5.1.1" events "^3.2.0" @@ -7403,7 +7403,7 @@ webpack@^5.104.0: schema-utils "^4.3.3" tapable "^2.3.0" terser-webpack-plugin "^5.3.16" - watchpack "^2.4.4" + watchpack "^2.5.1" webpack-sources "^3.3.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: From b21224d5ff420bc885c16cceeb8c98f798fe3654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Turbelin?= Date: Wed, 11 Feb 2026 13:35:22 +0100 Subject: [PATCH 200/270] Allow s3-compatible provider for db2fog configuration --- config/initializers/db2fog.rb | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/config/initializers/db2fog.rb b/config/initializers/db2fog.rb index a030841b82..7ef7e77724 100644 --- a/config/initializers/db2fog.rb +++ b/config/initializers/db2fog.rb @@ -2,16 +2,27 @@ require_relative 'spree' Rails.application.reloader.to_prepare do # See: https://github.com/openfoodfoundation/db2fog - DB2Fog.config = { + if ENV['S3_BACKUPS_HOST'].present? + DB2Fog.config = { + aws_access_key_id: ENV['S3_BACKUPS_ACCESS_KEY'], + aws_secret_access_key: ENV['S3_BACKUPS_SECRET'], + directory: ENV['S3_BACKUPS_BUCKET'], + provider: 'AWS', + scheme: ENV['S3_BACKUPS_SCHEME'], + host: ENV['S3_BACKUPS_HOST'] + } + else + DB2Fog.config = { :aws_access_key_id => Spree::Config[:s3_access_key], :aws_secret_access_key => Spree::Config[:s3_secret], :directory => ENV['S3_BACKUPS_BUCKET'], :provider => 'AWS' - } + } - region = ENV['S3_BACKUPS_REGION'] || ENV['S3_REGION'] + region = ENV['S3_BACKUPS_REGION'] || ENV['S3_REGION'] - # If no region is defined we leave this config key undefined (instead of nil), - # so that db2fog correctly applies it's default - DB2Fog.config[:region] = region if region + # If no region is defined we leave this config key undefined (instead of nil), + # so that db2fog correctly applies it's default + DB2Fog.config[:region] = region if region + end end From 283d13eb35fbfac5fa9beb4703df2b28e80163b3 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 13 Jan 2026 14:16:38 +1100 Subject: [PATCH 201/270] Move payment method display logic to helper So we don't need to convert strings into classes to then only convert it into the same string again. --- .../spree/admin/payment_methods_controller.rb | 2 +- app/helpers/spree/admin/payment_methods_helper.rb | 14 ++++++++++++++ .../admin/payment_methods/_providers.html.haml | 2 +- .../spree/admin/payment_methods/index.html.haml | 2 +- 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 app/helpers/spree/admin/payment_methods_helper.rb diff --git a/app/controllers/spree/admin/payment_methods_controller.rb b/app/controllers/spree/admin/payment_methods_controller.rb index 8073fb544a..b8ad17a608 100644 --- a/app/controllers/spree/admin/payment_methods_controller.rb +++ b/app/controllers/spree/admin/payment_methods_controller.rb @@ -138,7 +138,7 @@ module Spree providers.delete("Spree::Gateway::StripeSCA") unless show_stripe? - providers.map(&:constantize) + providers end # Show Stripe as an option if enabled, or if the diff --git a/app/helpers/spree/admin/payment_methods_helper.rb b/app/helpers/spree/admin/payment_methods_helper.rb new file mode 100644 index 0000000000..575a205b71 --- /dev/null +++ b/app/helpers/spree/admin/payment_methods_helper.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Spree + module Admin + module PaymentMethodsHelper + def payment_method_type_name(class_name) + scope = "spree.admin.payment_methods.providers" + key = class_name.demodulize.downcase + + I18n.t(key, scope:) + end + end + end +end diff --git a/app/views/spree/admin/payment_methods/_providers.html.haml b/app/views/spree/admin/payment_methods/_providers.html.haml index 15bd4ef979..b645c5c083 100644 --- a/app/views/spree/admin/payment_methods/_providers.html.haml +++ b/app/views/spree/admin/payment_methods/_providers.html.haml @@ -3,6 +3,6 @@ .alpha.four.columns = label :payment_method, :type, t('.provider') .omega.twelve.columns - = collection_select(:payment_method, :type, @providers, :to_s, :clean_name, {}, { class: 'select2 fullwidth', 'provider-prefs-for' => "#{@object.id}"}) + = select(:payment_method, :type, @providers.map { |p| [payment_method_type_name(p), p] }, {}, { class: 'select2 fullwidth', 'provider-prefs-for' => "#{@object.id}"}) %div{"ng-include" => "include_html" } diff --git a/app/views/spree/admin/payment_methods/index.html.haml b/app/views/spree/admin/payment_methods/index.html.haml index 1952c60c06..61eb28c63a 100644 --- a/app/views/spree/admin/payment_methods/index.html.haml +++ b/app/views/spree/admin/payment_methods/index.html.haml @@ -37,7 +37,7 @@ - method.distributors.each do |distributor| = distributor.name %br/ - %td= method.class.clean_name + %td= payment_method_type_name(method.class.name) - if spree_current_user.admin? %td.align-center= method.environment.to_s.titleize %td.align-center= method.display_on.blank? ? t('.both') : t('.' + method.display_on.to_s) From 3be0cca230ad45d85e0684df6738de2baf3eb448 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Feb 2026 11:47:01 +1100 Subject: [PATCH 202/270] Move options code into helper --- app/helpers/spree/admin/payment_methods_helper.rb | 4 ++++ app/views/spree/admin/payment_methods/_providers.html.haml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/helpers/spree/admin/payment_methods_helper.rb b/app/helpers/spree/admin/payment_methods_helper.rb index 575a205b71..4d94a7ad52 100644 --- a/app/helpers/spree/admin/payment_methods_helper.rb +++ b/app/helpers/spree/admin/payment_methods_helper.rb @@ -9,6 +9,10 @@ module Spree I18n.t(key, scope:) end + + def payment_method_type_options(providers) + providers.map { |p| [payment_method_type_name(p), p] } + end end end end diff --git a/app/views/spree/admin/payment_methods/_providers.html.haml b/app/views/spree/admin/payment_methods/_providers.html.haml index b645c5c083..fbbb6fec96 100644 --- a/app/views/spree/admin/payment_methods/_providers.html.haml +++ b/app/views/spree/admin/payment_methods/_providers.html.haml @@ -3,6 +3,6 @@ .alpha.four.columns = label :payment_method, :type, t('.provider') .omega.twelve.columns - = select(:payment_method, :type, @providers.map { |p| [payment_method_type_name(p), p] }, {}, { class: 'select2 fullwidth', 'provider-prefs-for' => "#{@object.id}"}) + = select(:payment_method, :type, payment_method_type_options(@providers), {}, { class: 'select2 fullwidth', 'provider-prefs-for' => "#{@object.id}"}) %div{"ng-include" => "include_html" } From 51df612c519e90d3862c1695244a73e78f5b31cb Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Feb 2026 11:47:27 +1100 Subject: [PATCH 203/270] Spec current default selection And fix the matcher! This matcher was written over ten years ago in 2015. But it never failed wrong tests. --- spec/support/matchers/select2_matchers.rb | 4 +--- spec/support/request/web_helper.rb | 2 -- spec/system/admin/adjustments_spec.rb | 2 +- spec/system/admin/payment_method_spec.rb | 3 +++ 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/spec/support/matchers/select2_matchers.rb b/spec/support/matchers/select2_matchers.rb index 8e7be8f87e..bdafd93ae9 100644 --- a/spec/support/matchers/select2_matchers.rb +++ b/spec/support/matchers/select2_matchers.rb @@ -92,9 +92,7 @@ RSpec::Matchers.define :have_select2 do |id, options = {}| end def selected_option_is(from, text) - within find(from) do - find("a.select2-choice").text == text - end + find("#{from} a.select2-choice", text:) end def with_select2_open(from) diff --git a/spec/support/request/web_helper.rb b/spec/support/request/web_helper.rb index 9087d59981..de10dc79c6 100644 --- a/spec/support/request/web_helper.rb +++ b/spec/support/request/web_helper.rb @@ -69,8 +69,6 @@ module WebHelper .find(:css, '.select2-drop-active .select2-result-label', text: options[:select_text] || value) .click - - expect(page).to have_select2 options[:from], selected: options[:select_text] || value end def open_select2(selector) diff --git a/spec/system/admin/adjustments_spec.rb b/spec/system/admin/adjustments_spec.rb index 64ce6a5ad0..8cb0cf9956 100644 --- a/spec/system/admin/adjustments_spec.rb +++ b/spec/system/admin/adjustments_spec.rb @@ -152,7 +152,7 @@ RSpec.describe ' click_link 'Adjustments' page.find('tr', text: 'Extra Adjustment').find('a.icon-edit').click - expect(page).to have_select2 :adjustment_tax_category_id, selected: [] + expect(page).to have_select2 :adjustment_tax_category_id, selected: "None" # When I edit the adjustment, setting a tax rate select2_select 'GST', from: :adjustment_tax_category_id diff --git a/spec/system/admin/payment_method_spec.rb b/spec/system/admin/payment_method_spec.rb index 1a6c519a59..582cdec8ac 100644 --- a/spec/system/admin/payment_method_spec.rb +++ b/spec/system/admin/payment_method_spec.rb @@ -20,6 +20,9 @@ RSpec.describe ' click_link 'Payment Methods' click_link 'New Payment Method' + # Selects the first one by default: + expect(page).to have_select2 "payment_method_type", selected: "PayPal Express" + fill_in 'payment_method_name', with: 'Cheque payment method' check "payment_method_distributor_ids_#{@distributors[0].id}" From 9da3b0ea01d7fab54b0efc062ce401dbf9203964 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 12 Feb 2026 13:02:06 +1100 Subject: [PATCH 204/270] User must choose payment method type on creation --- .../spree/admin/payment_methods/_providers.html.haml | 2 +- spec/system/admin/payment_method_spec.rb | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/views/spree/admin/payment_methods/_providers.html.haml b/app/views/spree/admin/payment_methods/_providers.html.haml index fbbb6fec96..942a2a0c8f 100644 --- a/app/views/spree/admin/payment_methods/_providers.html.haml +++ b/app/views/spree/admin/payment_methods/_providers.html.haml @@ -3,6 +3,6 @@ .alpha.four.columns = label :payment_method, :type, t('.provider') .omega.twelve.columns - = select(:payment_method, :type, payment_method_type_options(@providers), {}, { class: 'select2 fullwidth', 'provider-prefs-for' => "#{@object.id}"}) + = select(:payment_method, :type, payment_method_type_options(@providers), {}, { class: 'select2 fullwidth', required: true, placeholder: t("admin.choose"), 'provider-prefs-for' => "#{@object.id}"}) %div{"ng-include" => "include_html" } diff --git a/spec/system/admin/payment_method_spec.rb b/spec/system/admin/payment_method_spec.rb index 582cdec8ac..2ee60b3c2b 100644 --- a/spec/system/admin/payment_method_spec.rb +++ b/spec/system/admin/payment_method_spec.rb @@ -20,10 +20,11 @@ RSpec.describe ' click_link 'Payment Methods' click_link 'New Payment Method' - # Selects the first one by default: - expect(page).to have_select2 "payment_method_type", selected: "PayPal Express" + expect(page).to have_select2 "payment_method_type", selected: "Choose..." fill_in 'payment_method_name', with: 'Cheque payment method' + cash_name = "Cash/EFT/etc. (payments for which automatic validation is not required)" + select2_select cash_name, from: "payment_method_type" check "payment_method_distributor_ids_#{@distributors[0].id}" click_button 'Create' @@ -246,6 +247,9 @@ RSpec.describe ' it "creates payment methods" do visit spree.new_admin_payment_method_path fill_in 'payment_method_name', with: 'Cheque payment method' + cash_name = "Cash/EFT/etc. (payments for which automatic validation is not required)" + select2_select cash_name, from: "payment_method_type" + expect(page).to have_field 'payment_method_description' expect(page).to have_select 'payment_method_display_on' From 5cbd507c1e87bedf9bc3bd109a81ac2206c4ac6e Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Fri, 13 Feb 2026 10:15:38 +1100 Subject: [PATCH 205/270] Upgrade redis-github-action to 1.8.1 The version we were using, uses an obsolete version of Docker --- .github/workflows/build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c6711bb01a..33f3663f33 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,7 +46,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup redis - uses: supercharge/redis-github-action@1.4.0 + uses: supercharge/redis-github-action@1.8.1 with: redis-version: 6 @@ -124,7 +124,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup redis - uses: supercharge/redis-github-action@1.4.0 + uses: supercharge/redis-github-action@1.8.1 with: redis-version: 6 @@ -211,7 +211,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup redis - uses: supercharge/redis-github-action@1.4.0 + uses: supercharge/redis-github-action@1.8.1 with: redis-version: 6 @@ -290,7 +290,7 @@ jobs: - uses: actions/checkout@v3 - name: Setup redis - uses: supercharge/redis-github-action@1.4.0 + uses: supercharge/redis-github-action@1.8.1 with: redis-version: 6 From ab1f43f1ac12e971901f19fe5a01a1e6b3500397 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 01:17:44 +0000 Subject: [PATCH 206/270] Bump qs from 6.14.1 to 6.14.2 Bumps [qs](https://github.com/ljharb/qs) from 6.14.1 to 6.14.2. - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2) --- updated-dependencies: - dependency-name: qs dependency-version: 6.14.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5ea4903b9b..51480d93de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6080,9 +6080,9 @@ qjobs@^1.2.0: integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== qs@~6.14.0: - version "6.14.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" - integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== + version "6.14.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" + integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== dependencies: side-channel "^1.1.0" From 482c2a4a6ee6c1e85276583c99cd19edb46def53 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 13 Feb 2026 12:36:26 +1100 Subject: [PATCH 207/270] Delete now unused method clean_name --- app/models/spree/payment_method.rb | 5 ----- spec/models/spree/payment_method_spec.rb | 7 ------- 2 files changed, 12 deletions(-) diff --git a/app/models/spree/payment_method.rb b/app/models/spree/payment_method.rb index 77474fb277..7f845f1160 100644 --- a/app/models/spree/payment_method.rb +++ b/app/models/spree/payment_method.rb @@ -113,11 +113,6 @@ module Spree distributors.include?(distributor) end - def self.clean_name - scope = "spree.admin.payment_methods.providers" - I18n.t(name.demodulize.downcase, scope:) - end - private def distributor_validation diff --git a/spec/models/spree/payment_method_spec.rb b/spec/models/spree/payment_method_spec.rb index d84d6e4ca3..44ec84cce7 100644 --- a/spec/models/spree/payment_method_spec.rb +++ b/spec/models/spree/payment_method_spec.rb @@ -131,13 +131,6 @@ RSpec.describe Spree::PaymentMethod do expect(pm.errors.to_a).to eq(["Name can't be blank", "At least one hub must be selected"]) end - it "generates a clean name for known Payment Method types" do - expect(Spree::PaymentMethod::Check.clean_name) - .to eq('Cash/EFT/etc. (payments for which automatic validation is not required)') - expect(Spree::Gateway::PayPalExpress.clean_name).to eq('PayPal Express') - expect(Spree::Gateway::StripeSCA.clean_name).to eq('Stripe SCA') - end - it "computes the amount of fees" do order = create(:order) From c1068af0bad64a61ad37c823cac7968509fb0424 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Feb 2026 09:32:32 +0000 Subject: [PATCH 208/270] Bump sass-loader from 16.0.6 to 16.0.7 Bumps [sass-loader](https://github.com/webpack/sass-loader) from 16.0.6 to 16.0.7. - [Release notes](https://github.com/webpack/sass-loader/releases) - [Changelog](https://github.com/webpack/sass-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/sass-loader/compare/v16.0.6...v16.0.7) --- updated-dependencies: - dependency-name: sass-loader dependency-version: 16.0.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 51480d93de..a90ee30e19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6430,9 +6430,9 @@ sass-embedded@^1.96.0: sass-embedded-win32-x64 "1.97.3" sass-loader@^16.0.6: - version "16.0.6" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.6.tgz#913b05607d06c386bc37870494e1e3a3e091fd3b" - integrity sha512-sglGzId5gmlfxNs4gK2U3h7HlVRfx278YK6Ono5lwzuvi1jxig80YiuHkaDBVsYIKFhx8wN7XSCI0M2IDS/3qA== + version "16.0.7" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.7.tgz#d1f8723b795805831d41b5825e3d9cd72cb939e7" + integrity sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA== dependencies: neo-async "^2.6.2" From 33a96d5a0fff7b13c2e14922b7405158ffa62e3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 22:49:10 +0000 Subject: [PATCH 209/270] Bump responders from 3.1.1 to 3.2.0 Bumps [responders](https://github.com/heartcombo/responders) from 3.1.1 to 3.2.0. - [Release notes](https://github.com/heartcombo/responders/releases) - [Changelog](https://github.com/heartcombo/responders/blob/main/CHANGELOG.md) - [Commits](https://github.com/heartcombo/responders/compare/v3.1.1...v3.2.0) --- updated-dependencies: - dependency-name: responders dependency-version: 3.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index a15a7aff21..7d2ae314d0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -242,7 +242,7 @@ GEM marcel (~> 1.0) nokogiri (~> 1.10, >= 1.10.4) rubyzip (>= 1.3.0, < 3) - cgi (0.5.0) + cgi (0.5.1) childprocess (5.0.0) choice (0.2.0) chronic (0.10.2) @@ -257,7 +257,7 @@ GEM combine_pdf (1.0.31) matrix ruby-rc4 (>= 0.1.5) - concurrent-ruby (1.3.5) + concurrent-ruby (1.3.6) connection_pool (2.5.5) cookiejar (0.3.4) crack (1.0.1) @@ -278,7 +278,7 @@ GEM database_cleaner-core (2.0.1) datafoodconsortium-connector (1.2.0) virtual_assembly-semantizer (~> 1.0, >= 1.0.5) - date (3.5.0) + date (3.5.1) debug (1.11.0) irb (~> 1.10) reline (>= 0.3.8) @@ -425,10 +425,11 @@ GEM activerecord (>= 3.0) invisible_captcha (2.3.0) rails (>= 5.2) - io-console (0.8.1) + io-console (0.8.2) ipaddress (0.8.3) - irb (1.15.3) + irb (1.17.0) pp (>= 0.6.0) + prism (>= 1.3.0) rdoc (>= 4.0.0) reline (>= 0.4.2) jmespath (1.6.2) @@ -478,7 +479,7 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) - loofah (2.24.1) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.9.0) @@ -501,7 +502,8 @@ GEM logger mini_mime (1.1.5) mini_portile2 (2.8.6) - minitest (5.26.2) + minitest (6.0.1) + prism (~> 1.5) monetize (1.13.0) money (~> 6.12) money (6.16.0) @@ -523,7 +525,8 @@ GEM net-protocol newrelic_rpm (9.24.0) nio4r (2.7.5) - nokogiri (1.18.10) + nokogiri (1.19.0) + mini_portile2 (~> 2.8.2) racc (~> 1.4) nokogiri-html5-inference (0.3.0) nokogiri (~> 1.14) @@ -693,7 +696,7 @@ GEM logger (~> 1.5) ostruct (~> 0.6) readline (~> 0.0) - rdoc (7.0.1) + rdoc (7.2.0) erb psych (>= 4.0.0) tsort @@ -709,9 +712,9 @@ GEM io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) - responders (3.1.1) - actionpack (>= 5.2) - railties (>= 5.2) + responders (3.2.0) + actionpack (>= 7.0) + railties (>= 7.0) rexml (3.4.4) roadie (5.2.1) css_parser (~> 1.4) @@ -889,7 +892,7 @@ GEM temple (0.10.4) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) - thor (1.4.0) + thor (1.5.0) thread-local (1.1.0) tilt (2.6.1) timeout (0.4.4) From b69e6827ccec9ced01f35388c99845ab23703e7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 23:46:31 +0000 Subject: [PATCH 210/270] Bump bullet from 8.0.8 to 8.1.0 Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.0.8 to 8.1.0. - [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md) - [Commits](https://github.com/flyerhzm/bullet/compare/8.0.8...8.1.0) --- updated-dependencies: - dependency-name: bullet dependency-version: 8.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7d2ae314d0..16b7e2295b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -215,7 +215,7 @@ GEM bugsnag (6.28.0) concurrent-ruby (~> 1.0) builder (3.3.0) - bullet (8.0.8) + bullet (8.1.0) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) cable_ready (5.0.6) @@ -589,7 +589,7 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.7.0) + prism (1.9.0) private_address_check (0.5.0) pry (0.15.2) coderay (~> 1.1) @@ -917,7 +917,7 @@ GEM unicode-display_width (3.2.0) unicode-emoji (~> 4.1) unicode-emoji (4.2.0) - uniform_notifier (1.17.0) + uniform_notifier (1.18.0) uri (1.1.1) valid_email2 (5.2.3) activemodel (>= 3.2) From b3e7b12b86e1ce88f5c0dd2b202db7e3f6bfe18e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 15 Feb 2026 23:47:01 +0000 Subject: [PATCH 211/270] Bump active_storage_validations from 1.1.4 to 3.0.3 Bumps [active_storage_validations](https://github.com/igorkasyanchuk/active_storage_validations) from 1.1.4 to 3.0.3. - [Release notes](https://github.com/igorkasyanchuk/active_storage_validations/releases) - [Changelog](https://github.com/igorkasyanchuk/active_storage_validations/blob/master/CHANGES.md) - [Commits](https://github.com/igorkasyanchuk/active_storage_validations/commits/3.0.03) --- updated-dependencies: - dependency-name: active_storage_validations dependency-version: 3.0.3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7d2ae314d0..9afd564e18 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -112,7 +112,7 @@ GEM rails-html-sanitizer (~> 1.6) active_model_serializers (0.8.4) activemodel (>= 3.0) - active_storage_validations (3.0.2) + active_storage_validations (3.0.3) activejob (>= 6.1.4) activemodel (>= 6.1.4) activestorage (>= 6.1.4) @@ -589,7 +589,7 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - prism (1.7.0) + prism (1.9.0) private_address_check (0.5.0) pry (0.15.2) coderay (~> 1.1) @@ -895,7 +895,7 @@ GEM thor (1.5.0) thread-local (1.1.0) tilt (2.6.1) - timeout (0.4.4) + timeout (0.6.0) tsort (0.2.0) ttfunk (1.8.0) bigdecimal (~> 3.1) From 1b36cce81674875a9517148b35882b891c34e5cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 00:30:33 +0000 Subject: [PATCH 212/270] Bump omniauth-rails_csrf_protection from 1.0.2 to 2.0.1 Bumps [omniauth-rails_csrf_protection](https://github.com/cookpad/omniauth-rails_csrf_protection) from 1.0.2 to 2.0.1. - [Release notes](https://github.com/cookpad/omniauth-rails_csrf_protection/releases) - [Commits](https://github.com/cookpad/omniauth-rails_csrf_protection/compare/v1.0.2...v2.0.1) --- updated-dependencies: - dependency-name: omniauth-rails_csrf_protection dependency-version: 2.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e65865e5fa..4c89dffbd6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -396,7 +396,8 @@ GEM sysexits (~> 1.1) hashdiff (1.2.1) hashery (2.1.2) - hashie (5.0.0) + hashie (5.1.0) + logger highline (3.1.2) reline htmlentities (4.4.2) @@ -542,7 +543,7 @@ GEM logger rack (>= 2.2.3) rack-protection - omniauth-rails_csrf_protection (1.0.2) + omniauth-rails_csrf_protection (2.0.1) actionpack (>= 4.2) omniauth (~> 2.0) omniauth_openid_connect (0.8.0) From 99687767263b478f47d7876c24f10a2ba4cb395b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:20:27 +0000 Subject: [PATCH 213/270] Bump tom-select from 2.4.5 to 2.4.6 Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.4.5 to 2.4.6. - [Release notes](https://github.com/orchidjs/tom-select/releases) - [Commits](https://github.com/orchidjs/tom-select/compare/v2.4.5...v2.4.6) --- updated-dependencies: - dependency-name: tom-select dependency-version: 2.4.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a90ee30e19..53972a01cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7064,9 +7064,9 @@ toidentifier@1.0.1, toidentifier@~1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tom-select@*: - version "2.4.5" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.5.tgz#5c91355c9bf024ff5bc9389f8a2a370e4a28126a" - integrity sha512-ujZ5P10kRohKDFElklhkO4dRM+WkUEaytHhOuzbQkZ6MyiR8e2IwGKXab4v+ZNipE2queN8ztlb0MmRLqoM6QA== + version "2.4.6" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.6.tgz#23acdfc09ee235eb752706d418c9c9ae6ccf67f0" + integrity sha512-Hhqi15AiTl0+FjaHVTXvUkF3t7x4W5LXUHxLYlzp7r8bcIgGJyz9M+3ZvrHdTRvEmV4EmNyJPbHJJnZOjr5Iig== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" From ad9a12da0ea804b88aad88fcf6045907c90191c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:20:43 +0000 Subject: [PATCH 214/270] Bump rubocop-rspec from 3.8.0 to 3.9.0 Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.8.0 to 3.9.0. - [Release notes](https://github.com/rubocop/rubocop-rspec/releases) - [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.8.0...v3.9.0) --- updated-dependencies: - dependency-name: rubocop-rspec dependency-version: 3.9.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4c89dffbd6..1ac763de0f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -572,7 +572,7 @@ GEM parallel (1.27.0) paranoia (2.6.4) activerecord (>= 5.1, < 7.2) - parser (3.3.10.0) + parser (3.3.10.1) ast (~> 2.4.1) racc paypal-sdk-core (0.3.4) @@ -781,9 +781,9 @@ GEM rubocop-ast (>= 1.47.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.48.0) + rubocop-ast (1.49.0) parser (>= 3.3.7.2) - prism (~> 1.4) + prism (~> 1.7) rubocop-capybara (2.22.1) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) @@ -796,7 +796,7 @@ GEM rack (>= 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.44.0, < 2.0) - rubocop-rspec (3.8.0) + rubocop-rspec (3.9.0) lint_roller (~> 1.1) rubocop (~> 1.81) rubocop-rspec_rails (2.32.0) From 39d59c3a5f38e73b76ec02442b293092a9a30d6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:21:52 +0000 Subject: [PATCH 215/270] Bump bootsnap from 1.19.0 to 1.22.0 Bumps [bootsnap](https://github.com/rails/bootsnap) from 1.19.0 to 1.22.0. - [Release notes](https://github.com/rails/bootsnap/releases) - [Changelog](https://github.com/rails/bootsnap/blob/main/CHANGELOG.md) - [Commits](https://github.com/rails/bootsnap/compare/v1.19.0...v1.22.0) --- updated-dependencies: - dependency-name: bootsnap dependency-version: 1.22.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4c89dffbd6..dbac6f936f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -210,7 +210,7 @@ GEM bigdecimal (3.3.1) bindata (2.5.1) bindex (0.8.1) - bootsnap (1.19.0) + bootsnap (1.22.0) msgpack (~> 1.2) bugsnag (6.28.0) concurrent-ruby (~> 1.0) From 9c99f4868c74e86def405d55889164f95dad66f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:22:39 +0000 Subject: [PATCH 216/270] Bump pry from 0.15.2 to 0.16.0 Bumps [pry](https://github.com/pry/pry) from 0.15.2 to 0.16.0. - [Release notes](https://github.com/pry/pry/releases) - [Changelog](https://github.com/pry/pry/blob/master/CHANGELOG.md) - [Commits](https://github.com/pry/pry/compare/v0.15.2...v0.16.0) --- updated-dependencies: - dependency-name: pry dependency-version: 0.16.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4c89dffbd6..c159e8780b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -592,9 +592,10 @@ GEM prettyprint (0.2.0) prism (1.9.0) private_address_check (0.5.0) - pry (0.15.2) + pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) + reline (>= 0.6.0) psych (5.3.1) date stringio From 4b689d00a469abc3f2dc46279fb08639e1fe1ce0 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 14 Aug 2025 16:17:55 +1000 Subject: [PATCH 217/270] Remove unnecessary erb compilation on JS file --- .../{order_cycles.js.erb.coffee => order_cycles.js.coffee} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/assets/javascripts/admin/order_cycles/{order_cycles.js.erb.coffee => order_cycles.js.coffee} (100%) diff --git a/app/assets/javascripts/admin/order_cycles/order_cycles.js.erb.coffee b/app/assets/javascripts/admin/order_cycles/order_cycles.js.coffee similarity index 100% rename from app/assets/javascripts/admin/order_cycles/order_cycles.js.erb.coffee rename to app/assets/javascripts/admin/order_cycles/order_cycles.js.coffee From 47652e9d25dd072962175f09a6808e9bdf33bb0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 09:31:48 +0000 Subject: [PATCH 218/270] Bump rubocop from 1.81.7 to 1.84.1 Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.81.7 to 1.84.1. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop/compare/v1.81.7...v1.84.1) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.84.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6036ca93cf..6d0ef56656 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -572,7 +572,7 @@ GEM parallel (1.27.0) paranoia (2.6.4) activerecord (>= 5.1, < 7.2) - parser (3.3.10.1) + parser (3.3.10.2) ast (~> 2.4.1) racc paypal-sdk-core (0.3.4) @@ -771,7 +771,7 @@ GEM rswag-ui (2.17.0) actionpack (>= 5.2, < 8.2) railties (>= 5.2, < 8.2) - rubocop (1.81.7) + rubocop (1.84.1) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -779,7 +779,7 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.47.1, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) rubocop-ast (1.49.0) From 15d83724ea9c41bd15166a3ad5c6b1fe85a94e08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Feb 2026 09:34:08 +0000 Subject: [PATCH 219/270] Bump listen from 3.9.0 to 3.10.0 Bumps [listen](https://github.com/guard/listen) from 3.9.0 to 3.10.0. - [Release notes](https://github.com/guard/listen/releases) - [Commits](https://github.com/guard/listen/compare/v3.9.0...v3.10.0) --- updated-dependencies: - dependency-name: listen dependency-version: 3.10.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6036ca93cf..ab50691fd7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -338,7 +338,7 @@ GEM webrick (~> 1.7) websocket-driver (>= 0.6, < 0.8) ffaker (2.25.0) - ffi (1.17.2) + ffi (1.17.3) flipper (1.3.6) concurrent-ruby (< 2) flipper-active_record (1.3.6) @@ -476,7 +476,8 @@ GEM launchy (>= 2.2, < 4) link_header (0.0.8) lint_roller (1.1.0) - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) @@ -689,7 +690,7 @@ GEM activesupport (>= 6.1.5) i18n rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) rdf (3.3.4) bcp47_spec (~> 0.2) From 1d4bbfa506a6db4ef87615be789ec2f7a7fcb5fc Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Wed, 18 Feb 2026 01:37:41 +0500 Subject: [PATCH 220/270] Supports tag filters persistence during product updates Adds functionality to retain tag filters applied in the admin product interface after bulk updates. Updates controller parameters to include tags_name_in, adds hidden fields for tag persistence in the view, and includes specs to verify filter state retention across update operations. --- .../admin/products_v3_controller.rb | 4 +- app/views/admin/products_v3/_table.html.haml | 2 + spec/support/tom_select_helper.rb | 17 +++++++++ spec/system/admin/products_v3/update_spec.rb | 38 +++++++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index 0f4dc4ad3f..d5c3f5383c 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -28,7 +28,7 @@ module Admin flash[:success] = I18n.t('admin.products_v3.bulk_update.success') redirect_to [:index, { page: @page, per_page: @per_page, search_term: @search_term, - producer_id: @producer_id, category_id: @category_id }] + producer_id: @producer_id, category_id: @category_id, tags_name_in: @tags }] elsif product_set.errors.present? @error_counts = { saved: product_set.saved_count, invalid: product_set.invalid.count } @@ -120,7 +120,7 @@ module Admin @search_term = params[:search_term] || params[:_search_term] @producer_id = params[:producer_id] || params[:_producer_id] @category_id = params[:category_id] || params[:_category_id] - @tags = params[:tags_name_in] || params[:_tags_name_in] + @tags = params[:tags_name_in] || [] end def init_pagination_params diff --git a/app/views/admin/products_v3/_table.html.haml b/app/views/admin/products_v3/_table.html.haml index 1f5fbf1ebe..068f531fe5 100644 --- a/app/views/admin/products_v3/_table.html.haml +++ b/app/views/admin/products_v3/_table.html.haml @@ -13,6 +13,8 @@ = hidden_field_tag :search_term, @search_term = hidden_field_tag :producer_id, @producer_id = hidden_field_tag :category_id, @category_id + - @tags.each do |tag| + = hidden_field_tag 'tags_name_in[]', tag %table.products{ 'data-column-preferences-target': "table", class: (hide_producer_column?(producer_options) ? 'hide-producer' : '') } %colgroup diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index d066bbe6ea..2f39b15b33 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -36,4 +36,21 @@ module TomSelectHelper find('.ts-dropdown .ts-dropdown-content .option', text: /#{Regexp.quote(value)}/i).click end + + def expect_tomselect_selected_options(from, *options) + tomselect_control = page + .find("[name='#{from}']") + .sibling(".ts-wrapper") + .find('.ts-control') + + within(tomselect_control) do + # options in case of we want to expect multiselect options + options.each do |option| + expect(page).to have_css( + "div[data-ts-item]", + text: option + ) + end + end + end end diff --git a/spec/system/admin/products_v3/update_spec.rb b/spec/system/admin/products_v3/update_spec.rb index 320f15d3b2..0da94594f6 100644 --- a/spec/system/admin/products_v3/update_spec.rb +++ b/spec/system/admin/products_v3/update_spec.rb @@ -731,6 +731,44 @@ RSpec.describe 'As an enterprise user, I can update my products' do expect(page).to have_css row_containing_name("zucchinis") end end + + context "when filters are applied" do + before do + variant_b1 # invoke to create the variant + variant_a1.tags.create!(name: 'organic') + visit admin_products_url + end + it 'persists the filters after update' do + # Ensure all products are shown + expect_products_count_to_be 2 + + supplier_name = variant_a1.supplier.name + category_name = variant_a1.primary_taxon.name + tag_name = variant_a1.tags.first.name + tomselect_select supplier_name, from: "producer_id" + tomselect_select category_name, from: "category_id" + tomselect_multiselect tag_name, from: "tags_name_in" + click_button "Search" + + # Ensure filters are selected and applied after search + expect_tomselect_selected_options("producer_id", supplier_name) + expect_tomselect_selected_options("category_id", category_name) + expect_tomselect_selected_options("tags_name_in[]", tag_name) + expect_products_count_to_be 1 + + within row_containing_name("Medium box") do + fill_in "Price", with: "10.25" + end + click_button "Save changes" + expect(page).to have_content "Changes saved" + + # Ensure filters still selected and applied even after update + expect_tomselect_selected_options("producer_id", supplier_name) + expect_tomselect_selected_options("category_id", category_name) + expect_tomselect_selected_options("tags_name_in[]", tag_name) + expect_products_count_to_be 1 + end + end end describe "edit image" do From da1e1a98595e597b57ce0222526eba0b1650604f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:42:07 +1100 Subject: [PATCH 221/270] Style indentation --- app/models/spree/product.rb | 2 +- app/models/spree/taxon.rb | 4 ++-- app/models/spree/variant.rb | 12 ++++++------ app/services/dfc_catalog_importer.rb | 8 ++++---- app/services/line_item_syncer.rb | 4 ++-- lib/reporting/reports/customers/base.rb | 8 ++++---- .../enterprise_fees_with_tax_report_by_order.rb | 10 +++++----- spec/models/spree/order/state_machine_spec.rb | 10 +++++----- spec/models/spree/user_spec.rb | 2 +- spec/services/orders/compare_invoice_service_spec.rb | 4 ++-- spec/system/admin/bulk_order_management_spec.rb | 8 ++++---- spec/system/consumer/checkout/payment_spec.rb | 6 +++--- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/app/models/spree/product.rb b/app/models/spree/product.rb index 2ad3561b6c..e077af407b 100755 --- a/app/models/spree/product.rb +++ b/app/models/spree/product.rb @@ -251,7 +251,7 @@ module Spree transaction do ExchangeVariant. where(exchange_variants: { variant_id: variants.with_deleted. - select(:id) }).destroy_all + select(:id) }).destroy_all yield end diff --git a/app/models/spree/taxon.rb b/app/models/spree/taxon.rb index 09c772fdf0..a663a05922 100644 --- a/app/models/spree/taxon.rb +++ b/app/models/spree/taxon.rb @@ -35,8 +35,8 @@ module Spree taxons .pluck('spree_taxons.id, enterprises.id AS enterprise_id') .each_with_object({}) do |(taxon_id, enterprise_id), collection| - collection[enterprise_id.to_i] ||= Set.new - collection[enterprise_id.to_i] << taxon_id + collection[enterprise_id.to_i] ||= Set.new + collection[enterprise_id.to_i] << taxon_id end end diff --git a/app/models/spree/variant.rb b/app/models/spree/variant.rb index 63baad819e..d6eda45ca8 100644 --- a/app/models/spree/variant.rb +++ b/app/models/spree/variant.rb @@ -167,8 +167,8 @@ module Spree # In Rails 3, merging two scopes on the same column will consider only the last scope. def self.in_distributor(distributor) where(id: ExchangeVariant.select(:variant_id). - joins(:exchange). - where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor)) + joins(:exchange). + where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor)) end def self.indexed @@ -179,11 +179,11 @@ module Spree # "where(id:" is necessary so that the returned relation has no includes # The relation without includes will not be readonly and allow updates on it where(spree_variants: { id: joins(:prices). - where(deleted_at: nil). - where('spree_prices.currency' => + where(deleted_at: nil). + where('spree_prices.currency' => currency || CurrentConfig.get(:currency)). - where.not(spree_prices: { amount: nil }). - select("spree_variants.id") }) + where.not(spree_prices: { amount: nil }). + select("spree_variants.id") }) end def self.linked_to(semantic_id) diff --git a/app/services/dfc_catalog_importer.rb b/app/services/dfc_catalog_importer.rb index 16d81ac6d3..8ec1c74310 100644 --- a/app/services/dfc_catalog_importer.rb +++ b/app/services/dfc_catalog_importer.rb @@ -42,10 +42,10 @@ class DfcCatalogImporter .includes(:semantic_links).references(:semantic_links) .where.not(semantic_links: { semantic_id: present_ids }) .select do |variant| - # Variants that were in the same catalog before: - variant.semantic_links.map(&:semantic_id).any? do |semantic_id| - FdcUrlBuilder.new(semantic_id).catalog_url == catalog_url - end + # Variants that were in the same catalog before: + variant.semantic_links.map(&:semantic_id).any? do |semantic_id| + FdcUrlBuilder.new(semantic_id).catalog_url == catalog_url + end end end end diff --git a/app/services/line_item_syncer.rb b/app/services/line_item_syncer.rb index fb2af07b13..ce7fda37eb 100644 --- a/app/services/line_item_syncer.rb +++ b/app/services/line_item_syncer.rb @@ -51,8 +51,8 @@ class LineItemSyncer def destroy_obsolete_items(order) order.line_items. where(variant_id: subscription_line_items. - select(&:marked_for_destruction?). - map(&:variant_id)). + select(&:marked_for_destruction?). + map(&:variant_id)). destroy_all end diff --git a/lib/reporting/reports/customers/base.rb b/lib/reporting/reports/customers/base.rb index b53fb7b44c..3539775c6d 100644 --- a/lib/reporting/reports/customers/base.rb +++ b/lib/reporting/reports/customers/base.rb @@ -10,10 +10,10 @@ module Reporting .complete.not_state(:canceled) .order(:id)) .group_by do |order| - { - customer_id: order.customer_id || order.email, - hub_id: order.distributor_id, - } + { + customer_id: order.customer_id || order.email, + hub_id: order.distributor_id, + } end.values end diff --git a/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb b/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb index abc27aa844..51c6a21fe5 100644 --- a/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb +++ b/lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_order.rb @@ -44,11 +44,11 @@ module Reporting .filter(&method(:filter_enterprise_fee_by_id)) .filter(&method(:filter_enterprise_fee_by_owner)) .map do |enterprise_fee_id, enterprise_fee_adjustment_ids| - { - enterprise_fee_id:, - enterprise_fee_adjustment_ids:, - order: - } + { + enterprise_fee_id:, + enterprise_fee_adjustment_ids:, + order: + } end end end diff --git a/spec/models/spree/order/state_machine_spec.rb b/spec/models/spree/order/state_machine_spec.rb index 7ac1d81333..f50326789d 100644 --- a/spec/models/spree/order/state_machine_spec.rb +++ b/spec/models/spree/order/state_machine_spec.rb @@ -86,11 +86,11 @@ RSpec.describe Spree::Order do (Spree::Shipment.state_machine.states.keys - [:pending, :backorder, :ready]) .each do |shipment_state| - it "should be false if shipment_state is #{shipment_state}" do - allow(order).to receive_messages completed?: true - order.shipment_state = shipment_state - expect(order.can_cancel?).to be_falsy - end + it "should be false if shipment_state is #{shipment_state}" do + allow(order).to receive_messages completed?: true + order.shipment_state = shipment_state + expect(order.can_cancel?).to be_falsy + end end end diff --git a/spec/models/spree/user_spec.rb b/spec/models/spree/user_spec.rb index 517b405ac7..5e6fea55ef 100644 --- a/spec/models/spree/user_spec.rb +++ b/spec/models/spree/user_spec.rb @@ -17,7 +17,7 @@ RSpec.describe Spree::User do bill_address_attributes: new_bill_address.dup.attributes.merge( 'id' => old_bill_address.id ) - .except!('created_at', 'updated_at') + .except!('created_at', 'updated_at') ) expect(user.bill_address.id).to eq old_bill_address.id diff --git a/spec/services/orders/compare_invoice_service_spec.rb b/spec/services/orders/compare_invoice_service_spec.rb index 4580446b52..a3c5a8a2cc 100644 --- a/spec/services/orders/compare_invoice_service_spec.rb +++ b/spec/services/orders/compare_invoice_service_spec.rb @@ -38,8 +38,8 @@ RSpec.shared_examples "attribute changes - tax total changes" do |boolean, type, create(:order_with_taxes, product_price: 110, tax_rate_amount: 0.1, included_in_price: included_boolean) .tap do |order| - order.create_tax_charge! - order.update_shipping_fees! + order.create_tax_charge! + order.update_shipping_fees! end end diff --git a/spec/system/admin/bulk_order_management_spec.rb b/spec/system/admin/bulk_order_management_spec.rb index cf768670f2..33542ff71c 100644 --- a/spec/system/admin/bulk_order_management_spec.rb +++ b/spec/system/admin/bulk_order_management_spec.rb @@ -1044,10 +1044,10 @@ RSpec.describe ' page.driver .dismiss_modal :confirm, text: "Unsaved changes exist and will be lost if you continue." do - within "tr#li_#{li1.id}" do - fill_in "quantity", with: (li1.quantity + 1) - find("a.edit-order").click - end + within "tr#li_#{li1.id}" do + fill_in "quantity", with: (li1.quantity + 1) + find("a.edit-order").click + end end # So we save the changes diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index eac1eb1de0..4e513845b3 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -360,10 +360,10 @@ RSpec.describe "As a consumer, I want to checkout my order" do # And fake the payment status to avoid user interaction. allow_any_instance_of(Taler::Client) .to receive(:fetch_order) do - payment = Spree::Payment.last - url = payment_gateways_confirm_taler_path(payment_id: payment.id) + payment = Spree::Payment.last + url = payment_gateways_confirm_taler_path(payment_id: payment.id) - { "order_status_url" => url, "order_status" => "paid" } + { "order_status_url" => url, "order_status" => "paid" } end end From 40d8839bc4f9f7f36da49a394efe108415b4b3cf Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:42:33 +1100 Subject: [PATCH 222/270] Style Heredoc indentation --- spec/queries/outstanding_balance_query_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/queries/outstanding_balance_query_spec.rb b/spec/queries/outstanding_balance_query_spec.rb index 57d4f14adb..e69cbfdd66 100644 --- a/spec/queries/outstanding_balance_query_spec.rb +++ b/spec/queries/outstanding_balance_query_spec.rb @@ -10,7 +10,7 @@ RSpec.describe OutstandingBalanceQuery do let(:normalized_sql_statement) { normalize(query.statement) } it 'returns the CASE statement necessary to compute the order balance' do - expect(normalized_sql_statement).to eq(normalize(<<-SQL.squish)) + expect(normalized_sql_statement).to eq(normalize(<<~SQL.squish)) CASE WHEN "spree_orders"."state" IN ('canceled', 'returned') THEN "spree_orders"."payment_total" WHEN "spree_orders"."state" IS NOT NULL THEN "spree_orders"."payment_total" - "spree_orders"."total" ELSE 0 END From 167099badf07b9bfb049b08d6134dbb78c64415c Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 09:44:19 +1100 Subject: [PATCH 223/270] Lint/NoReturnInBeginEndBlocks --- app/services/orders/handle_fees_service.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/services/orders/handle_fees_service.rb b/app/services/orders/handle_fees_service.rb index 64e42f63ad..eb6211d5e8 100644 --- a/app/services/orders/handle_fees_service.rb +++ b/app/services/orders/handle_fees_service.rb @@ -130,12 +130,11 @@ module Orders def order_cycle_fees return @order_cycle_fees if defined? @order_cycle_fees + return [] unless order_cycle && distributor @order_cycle_fees = begin fees = [] - return fees unless order_cycle && distributor - order_cycle.exchanges.supplying_to(distributor).each do |exchange| exchange.enterprise_fees.per_item.each do |enterprise_fee| fee_value = FeeValue.new(fee: enterprise_fee, role: exchange.role) From 5b925517f0160862a5d708570404900a820aa1bc Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 11:52:33 +1100 Subject: [PATCH 224/270] Bump rack from 2.2.21 to 2.2.22 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ab50691fd7..0de0b5e48b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -616,7 +616,7 @@ GEM railties (>= 4.2) raabro (1.4.0) racc (1.8.1) - rack (2.2.21) + rack (2.2.22) rack-mini-profiler (2.3.4) rack (>= 1.2.0) rack-oauth2 (2.3.0) From 13cec27f6b73a4f6a6e696a67048f3709164bb99 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 11:54:32 +1100 Subject: [PATCH 225/270] Deactivate cooldown for testing --- .github/dependabot.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1b2572a9cc..1228ca8e2e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,8 +31,9 @@ updates: directory: "/" schedule: interval: "daily" - cooldown: - default-days: 7 + # Deactivating for now to see if this blocked security updates even though it shouldn't. + # cooldown: + # default-days: 7 # Only specific requirements are specified in Gemfile, so don't touch it. versioning-strategy: lockfile-only From 618c7028e2585f58abf1818d300328befefce34c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 00:55:57 +0000 Subject: [PATCH 226/270] Bump webpack from 5.105.0 to 5.105.1 Bumps [webpack](https://github.com/webpack/webpack) from 5.105.0 to 5.105.1. - [Release notes](https://github.com/webpack/webpack/releases) - [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack/compare/v5.105.0...v5.105.1) --- updated-dependencies: - dependency-name: webpack dependency-version: 5.105.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 53972a01cf..95c974665a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7376,9 +7376,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.104.0: - version "5.105.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.0.tgz#38b5e6c5db8cbe81debbd16e089335ada05ea23a" - integrity sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw== + version "5.105.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.1.tgz#c05cb3621196c76fa3b3a9bea446d14616b83778" + integrity sha512-Gdj3X74CLJJ8zy4URmK42W7wTZUJrqL+z8nyGEr4dTN0kb3nVs+ZvjbTOqRYPD7qX4tUmwyHL9Q9K6T1seW6Yw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" From 62f25d4d31361a9d4ead9c73f594caa8912249f9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 00:57:55 +0000 Subject: [PATCH 227/270] Bump knapsack_pro from 8.4.0 to 9.2.2 Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 8.4.0 to 9.2.2. - [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/main/CHANGELOG.md) - [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v8.4.0...v9.2.2) --- updated-dependencies: - dependency-name: knapsack_pro dependency-version: 9.2.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ab50691fd7..57ae41cf14 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -466,7 +466,7 @@ GEM activesupport (>= 4.2) jwt (2.10.2) base64 - knapsack_pro (8.4.0) + knapsack_pro (9.2.2) rake language_server-protocol (3.17.0.5) launchy (3.0.0) From 045482e07d15257ea7db9523e68b551dc59026e4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 12:11:37 +1100 Subject: [PATCH 228/270] Revert "Deactivate cooldown for testing" This reverts commit 13cec27f6b73a4f6a6e696a67048f3709164bb99. --- .github/dependabot.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1228ca8e2e..1b2572a9cc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,9 +31,8 @@ updates: directory: "/" schedule: interval: "daily" - # Deactivating for now to see if this blocked security updates even though it shouldn't. - # cooldown: - # default-days: 7 + cooldown: + default-days: 7 # Only specific requirements are specified in Gemfile, so don't touch it. versioning-strategy: lockfile-only From 691995eeaa836a61c8568a90b66f9f3b685a3713 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 12:44:41 +1100 Subject: [PATCH 229/270] Bump rubocop from 1.84.1 to 1.84.2 --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6d0ef56656..f5f6e296d9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -440,7 +440,7 @@ GEM thor (>= 0.14, < 2.0) jquery-ui-rails (4.2.1) railties (>= 3.2.16) - json (2.15.2) + json (2.18.1) json-canonicalization (1.0.0) json-jwt (1.17.0) activesupport (>= 4.2) @@ -771,7 +771,7 @@ GEM rswag-ui (2.17.0) actionpack (>= 5.2, < 8.2) railties (>= 5.2, < 8.2) - rubocop (1.84.1) + rubocop (1.84.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) From 16b3da66c2fafcc8b5a37326e34fcce5d27b25b8 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 18 Feb 2026 12:45:37 +1100 Subject: [PATCH 230/270] Style/HashAsLastArrayItem --- app/queries/product_scope_query.rb | 4 ++-- app/services/permitted_attributes/enterprise.rb | 12 ++++++------ app/services/permitted_attributes/order_cycle.rb | 4 ++-- app/services/permitted_attributes/subscription.rb | 10 +++++----- .../dfc_provider/spec/requests/catalog_items_spec.rb | 2 +- .../spec/requests/product_groups_spec.rb | 2 +- lib/reporting/line_items.rb | 2 +- spec/support/request/stripe_stubs.rb | 2 +- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/queries/product_scope_query.rb b/app/queries/product_scope_query.rb index bdadbc3401..e900f60769 100644 --- a/app/queries/product_scope_query.rb +++ b/app/queries/product_scope_query.rb @@ -60,8 +60,8 @@ class ProductScopeQuery def product_query_includes [ - image: { attachment_attachment: :blob }, - variants: [:default_price, :stock_items, :variant_overrides] + { image: { attachment_attachment: :blob }, + variants: [:default_price, :stock_items, :variant_overrides] } ] end diff --git a/app/services/permitted_attributes/enterprise.rb b/app/services/permitted_attributes/enterprise.rb index 391377ba49..b7c8fa92e4 100644 --- a/app/services/permitted_attributes/enterprise.rb +++ b/app/services/permitted_attributes/enterprise.rb @@ -14,12 +14,12 @@ module PermittedAttributes def self.attributes basic_permitted_attributes + [ - group_ids: [], user_ids: [], - shipping_method_ids: [], payment_method_ids: [], - address_attributes: PermittedAttributes::Address.attributes, - business_address_attributes: PermittedAttributes::BusinessAddress.attributes, - producer_properties_attributes: [:id, :property_name, :value, :_destroy], - custom_tab_attributes: PermittedAttributes::CustomTab.attributes, + { group_ids: [], user_ids: [], + shipping_method_ids: [], payment_method_ids: [], + address_attributes: PermittedAttributes::Address.attributes, + business_address_attributes: PermittedAttributes::BusinessAddress.attributes, + producer_properties_attributes: [:id, :property_name, :value, :_destroy], + custom_tab_attributes: PermittedAttributes::CustomTab.attributes }, ] end diff --git a/app/services/permitted_attributes/order_cycle.rb b/app/services/permitted_attributes/order_cycle.rb index dc23c8e5c3..b0351e0901 100644 --- a/app/services/permitted_attributes/order_cycle.rb +++ b/app/services/permitted_attributes/order_cycle.rb @@ -25,8 +25,8 @@ module PermittedAttributes private def attributes - self.class.basic_attributes + [incoming_exchanges: permitted_exchange_attributes, - outgoing_exchanges: permitted_exchange_attributes] + self.class.basic_attributes + [{ incoming_exchanges: permitted_exchange_attributes, + outgoing_exchanges: permitted_exchange_attributes }] end def permitted_exchange_attributes diff --git a/app/services/permitted_attributes/subscription.rb b/app/services/permitted_attributes/subscription.rb index e80469767f..a8b34e85d9 100644 --- a/app/services/permitted_attributes/subscription.rb +++ b/app/services/permitted_attributes/subscription.rb @@ -26,11 +26,11 @@ module PermittedAttributes def other_permitted_attributes [ - subscription_line_items_attributes: [ - :id, :quantity, :variant_id, :price_estimate, :_destroy - ], - bill_address_attributes: PermittedAttributes::Address.attributes, - ship_address_attributes: PermittedAttributes::Address.attributes + { subscription_line_items_attributes: [ + :id, :quantity, :variant_id, :price_estimate, :_destroy + ], + bill_address_attributes: PermittedAttributes::Address.attributes, + ship_address_attributes: PermittedAttributes::Address.attributes } ] end end diff --git a/engines/dfc_provider/spec/requests/catalog_items_spec.rb b/engines/dfc_provider/spec/requests/catalog_items_spec.rb index 1b69192310..1d3854b072 100644 --- a/engines/dfc_provider/spec/requests/catalog_items_spec.rb +++ b/engines/dfc_provider/spec/requests/catalog_items_spec.rb @@ -36,7 +36,7 @@ RSpec.describe "CatalogItems", swagger_doc: "dfc.yaml" do get "List CatalogItems" do produces "application/json" - security [oidc_token: []] + security [{ oidc_token: [] }] response "404", "not found" do context "as platform user" do diff --git a/engines/dfc_provider/spec/requests/product_groups_spec.rb b/engines/dfc_provider/spec/requests/product_groups_spec.rb index 9520acab2c..cea6ed0182 100644 --- a/engines/dfc_provider/spec/requests/product_groups_spec.rb +++ b/engines/dfc_provider/spec/requests/product_groups_spec.rb @@ -35,7 +35,7 @@ RSpec.describe "ProductGroups", swagger_doc: "dfc.yaml" do get "Show ProductGroup" do produces "application/json" - security [oidc_token: []] + security [{ oidc_token: [] }] response "200", "success" do let(:id) { product.id } diff --git a/lib/reporting/line_items.rb b/lib/reporting/line_items.rb index 1fa5cb56c5..8a709aa8e1 100644 --- a/lib/reporting/line_items.rb +++ b/lib/reporting/line_items.rb @@ -15,7 +15,7 @@ module Reporting @orders ||= search_orders end - def list(line_item_includes = [variant: [:supplier, :product]]) + def list(line_item_includes = [{ variant: [:supplier, :product] }]) line_items = order_permissions.visible_line_items.in_orders(orders.result) .order( "supplier.name", diff --git a/spec/support/request/stripe_stubs.rb b/spec/support/request/stripe_stubs.rb index 524233cffc..8132d8751e 100644 --- a/spec/support/request/stripe_stubs.rb +++ b/spec/support/request/stripe_stubs.rb @@ -144,7 +144,7 @@ module StripeStubs customer_id = options[:customer_id] || "cus_A123" { status: 200, body: JSON.generate(id: customer_id, - sources: { data: [id: customer_id] }) } + sources: { data: [{ id: customer_id }] }) } end def payment_successful_refund_mock From 7a4aa9dcb1980d31e7ecebdd9152a5b41f11f408 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 09:33:00 +0000 Subject: [PATCH 231/270] Bump spring from 4.4.0 to 4.4.2 Bumps [spring](https://github.com/rails/spring) from 4.4.0 to 4.4.2. - [Release notes](https://github.com/rails/spring/releases) - [Changelog](https://github.com/rails/spring/blob/main/CHANGELOG.md) - [Commits](https://github.com/rails/spring/compare/v4.4.0...v4.4.2) --- updated-dependencies: - dependency-name: spring dependency-version: 4.4.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 57ae41cf14..81b5e0127f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -850,7 +850,7 @@ GEM caxlsx (<= 4.0) csv rodf - spring (4.4.0) + spring (4.4.2) spring-commands-rspec (1.0.4) spring (>= 0.9.1) spring-commands-rubocop (0.4.0) From e2536ffe717ec54de32b1386c65a9222b454213b Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 14:07:47 +1100 Subject: [PATCH 232/270] Bump faraday from 2.9.0 to 2.14.1 --- Gemfile.lock | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81b5e0127f..2ae2233793 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -326,12 +326,14 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) - faraday (2.9.0) - faraday-net_http (>= 2.0, < 3.2) + faraday (2.14.1) + faraday-net_http (>= 2.0, < 3.5) + json + logger faraday-follow_redirects (0.4.0) faraday (>= 1, < 3) - faraday-net_http (3.1.1) - net-http + faraday-net_http (3.4.2) + net-http (~> 0.5) ferrum (0.14) addressable (~> 2.5) concurrent-ruby (~> 1.1) @@ -514,8 +516,8 @@ GEM multi_json (1.17.0) multi_xml (0.6.0) mutex_m (0.3.0) - net-http (0.7.0) - uri + net-http (0.9.1) + uri (>= 0.11.1) net-imap (0.5.12) date net-protocol From 2e67899bcca7d7dc75df979af41fd7e72dc1df84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 09:32:42 +0000 Subject: [PATCH 233/270] Bump tom-select from 2.4.6 to 2.5.1 Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.4.6 to 2.5.1. - [Release notes](https://github.com/orchidjs/tom-select/releases) - [Commits](https://github.com/orchidjs/tom-select/compare/v2.4.6...v2.5.1) --- updated-dependencies: - dependency-name: tom-select dependency-version: 2.5.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 95c974665a..8f90dee2d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7064,9 +7064,9 @@ toidentifier@1.0.1, toidentifier@~1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tom-select@*: - version "2.4.6" - resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.4.6.tgz#23acdfc09ee235eb752706d418c9c9ae6ccf67f0" - integrity sha512-Hhqi15AiTl0+FjaHVTXvUkF3t7x4W5LXUHxLYlzp7r8bcIgGJyz9M+3ZvrHdTRvEmV4EmNyJPbHJJnZOjr5Iig== + version "2.5.1" + resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.5.1.tgz#8c8d3f11e5c1780b5f26c9e90f4e650842ff9596" + integrity sha512-63D5/Qf6bb6kLSgksEuas/60oawDcuUHrD90jZofeOpF6bkQFYriKrvtpJBQQ4xIA5dUGcjhBbk/yrlfOQsy3g== dependencies: "@orchidjs/sifter" "^1.1.0" "@orchidjs/unicode-variants" "^1.1.2" From 0418163ad7e1073e01420314f445328c8868d884 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 09:34:06 +0000 Subject: [PATCH 234/270] Bump rubocop-rails from 2.34.2 to 2.34.3 Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.34.2 to 2.34.3. - [Release notes](https://github.com/rubocop/rubocop-rails/releases) - [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md) - [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.34.2...v2.34.3) --- updated-dependencies: - dependency-name: rubocop-rails dependency-version: 2.34.3 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 81b5e0127f..1f950fe9e3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -573,7 +573,7 @@ GEM parallel (1.27.0) paranoia (2.6.4) activerecord (>= 5.1, < 7.2) - parser (3.3.10.1) + parser (3.3.10.2) ast (~> 2.4.1) racc paypal-sdk-core (0.3.4) @@ -616,7 +616,7 @@ GEM railties (>= 4.2) raabro (1.4.0) racc (1.8.1) - rack (2.2.21) + rack (2.2.22) rack-mini-profiler (2.3.4) rack (>= 1.2.0) rack-oauth2 (2.3.0) @@ -792,7 +792,7 @@ GEM rubocop-factory_bot (2.28.0) lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) - rubocop-rails (2.34.2) + rubocop-rails (2.34.3) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) From b528bb47a0f989f397b1e2a37784ae260c9e65fb Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 19 Feb 2026 21:23:09 +0000 Subject: [PATCH 235/270] Replace Angular expand/collapse with native HTML details/summary for brand story Co-authored-by: Cursor --- .../controllers/home_controller.js.coffee | 5 +- app/views/home/_brandstory.html.haml | 36 +++++++------- app/views/home/index.html.haml | 2 +- app/webpacker/css/darkswarm/home_panes.scss | 47 ++++++++++++++++++- .../home_controller_spec.js.coffee | 19 -------- 5 files changed, 65 insertions(+), 44 deletions(-) delete mode 100644 spec/javascripts/unit/darkswarm/controllers/home_controller_spec.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee index ddc73075c2..c57750c1a9 100644 --- a/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee @@ -1,5 +1,2 @@ angular.module('Darkswarm').controller "HomeCtrl", ($scope) -> - $scope.brandStoryExpanded = false - - $scope.toggleBrandStory = -> - $scope.brandStoryExpanded = !$scope.brandStoryExpanded + # Controller kept for potential future use diff --git a/app/views/home/_brandstory.html.haml b/app/views/home/_brandstory.html.haml index 25b8687742..3511a78dd0 100644 --- a/app/views/home/_brandstory.html.haml +++ b/app/views/home/_brandstory.html.haml @@ -6,21 +6,21 @@ %p = t :brandstory_intro - #brand-story-text.hide-show.slideable - %p - = t :brandstory_part1 - %p - = t :brandstory_part2 - %p - = t :brandstory_part3 - %p - = t :brandstory_part4 - %p - %strong - = t :brandstory_part5_strong - %p - = t :brandstory_part6 - - %a.text-vbig{"slide-toggle" => "#brand-story-text", "ng-click" => "toggleBrandStory()"} - %i.ofn-i_005-caret-down{"ng-hide" => "brandStoryExpanded"} - %i.ofn-i_006-caret-up{ "ng-show" => "brandStoryExpanded"} + %details#brand-story-text.text-vbig + %summary + %i.ofn-i_005-caret-down + %i.ofn-i_006-caret-up + .brand-story-content + %p + = t :brandstory_part1 + %p + = t :brandstory_part2 + %p + = t :brandstory_part3 + %p + = t :brandstory_part4 + %p + %strong + = t :brandstory_part5_strong + %p + = t :brandstory_part6 diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml index 899e19ca72..7804de4056 100644 --- a/app/views/home/index.html.haml +++ b/app/views/home/index.html.haml @@ -5,7 +5,7 @@ - content_for :page_alert do = render "shared/menu/alert" -%div{"ng-controller" => "HomeCtrl"} +%div = render "home/tagline" #panes diff --git a/app/webpacker/css/darkswarm/home_panes.scss b/app/webpacker/css/darkswarm/home_panes.scss index d96e931466..7d06a562fd 100644 --- a/app/webpacker/css/darkswarm/home_panes.scss +++ b/app/webpacker/css/darkswarm/home_panes.scss @@ -71,8 +71,51 @@ } } - a.text-vbig i { - font-size: 75px; + #brand-story-text { + cursor: pointer; + text-align: center; + margin-top: 1rem; + + summary { + list-style: none; + cursor: pointer; + display: inline-block; + + &::-webkit-details-marker { + display: none; + } + + &::marker { + display: none; + } + + i { + font-size: 75px; + } + + .ofn-i_005-caret-down { + display: inline-block; + } + + .ofn-i_006-caret-up { + display: none; + } + } + + &[open] summary { + .ofn-i_005-caret-down { + display: none; + } + + .ofn-i_006-caret-up { + display: inline-block; + } + } + + .brand-story-content { + margin-top: 1rem; + text-align: left; + } } } diff --git a/spec/javascripts/unit/darkswarm/controllers/home_controller_spec.js.coffee b/spec/javascripts/unit/darkswarm/controllers/home_controller_spec.js.coffee deleted file mode 100644 index 8ba07e2f77..0000000000 --- a/spec/javascripts/unit/darkswarm/controllers/home_controller_spec.js.coffee +++ /dev/null @@ -1,19 +0,0 @@ -describe "HomeCtrl", -> - ctrl = null - scope = null - - beforeEach -> - module 'Darkswarm' - scope = {} - - inject ($controller) -> - ctrl = $controller 'HomeCtrl', {$scope: scope} - - it "starts with the brand story contracted", -> - expect(scope.brandStoryExpanded).toBe false - - it "toggles the brand story", -> - scope.toggleBrandStory() - expect(scope.brandStoryExpanded).toBe true - scope.toggleBrandStory() - expect(scope.brandStoryExpanded).toBe false From b348536d125d1fbde1850deef3d9317a9e94dbef Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 19 Feb 2026 21:39:32 +0000 Subject: [PATCH 236/270] Clean up dead code after Angular brand story removal - Delete HomeCtrl controller file (nothing references it anymore) - Remove misplaced .text-vbig class from
(was on the old toggle; summary has no visible text) - Remove redundant cursor: pointer on #brand-story-text ( already sets it) Co-Authored-By: Claude Sonnet 4.6 --- .../javascripts/darkswarm/controllers/home_controller.js.coffee | 2 -- app/views/home/_brandstory.html.haml | 2 +- app/webpacker/css/darkswarm/home_panes.scss | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee diff --git a/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee deleted file mode 100644 index c57750c1a9..0000000000 --- a/app/assets/javascripts/darkswarm/controllers/home_controller.js.coffee +++ /dev/null @@ -1,2 +0,0 @@ -angular.module('Darkswarm').controller "HomeCtrl", ($scope) -> - # Controller kept for potential future use diff --git a/app/views/home/_brandstory.html.haml b/app/views/home/_brandstory.html.haml index 3511a78dd0..182aa9b5d6 100644 --- a/app/views/home/_brandstory.html.haml +++ b/app/views/home/_brandstory.html.haml @@ -6,7 +6,7 @@ %p = t :brandstory_intro - %details#brand-story-text.text-vbig + %details#brand-story-text %summary %i.ofn-i_005-caret-down %i.ofn-i_006-caret-up diff --git a/app/webpacker/css/darkswarm/home_panes.scss b/app/webpacker/css/darkswarm/home_panes.scss index 7d06a562fd..93c36d7147 100644 --- a/app/webpacker/css/darkswarm/home_panes.scss +++ b/app/webpacker/css/darkswarm/home_panes.scss @@ -72,7 +72,6 @@ } #brand-story-text { - cursor: pointer; text-align: center; margin-top: 1rem; From e98244fe63fc9cae973e6f65b747e10f0a3f4832 Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 19 Feb 2026 21:55:13 +0000 Subject: [PATCH 237/270] Fix Rails 7.2 serialize deprecation warnings Pass type as keyword argument in serialize calls, as required from Rails 7.2 onwards. Co-Authored-By: Claude Sonnet 4.6 --- app/models/invoice.rb | 2 +- app/models/report_rendering_options.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 69c89d673f..0f75424c76 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -4,7 +4,7 @@ class Invoice < ApplicationRecord self.belongs_to_required_by_default = false belongs_to :order, class_name: 'Spree::Order' - serialize :data, Hash, coder: YAML + serialize :data, type: Hash, coder: YAML before_validation :serialize_order after_create :cancel_previous_invoices default_scope { order(created_at: :desc) } diff --git a/app/models/report_rendering_options.rb b/app/models/report_rendering_options.rb index dd69ecf887..79b0e67507 100644 --- a/app/models/report_rendering_options.rb +++ b/app/models/report_rendering_options.rb @@ -4,5 +4,5 @@ class ReportRenderingOptions < ApplicationRecord self.belongs_to_required_by_default = false belongs_to :user, class_name: "Spree::User" - serialize :options, Hash, coder: YAML + serialize :options, type: Hash, coder: YAML end From 8d7252f07875c724393952c15132cdecb2bb7944 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 22:15:49 +0000 Subject: [PATCH 238/270] Bump hotkeys-js from 3.13.15 to 4.0.0 Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys-js) from 3.13.15 to 4.0.0. - [Release notes](https://github.com/jaywcjlove/hotkeys-js/releases) - [Commits](https://github.com/jaywcjlove/hotkeys-js/compare/v3.13.15...v4.0.0) --- updated-dependencies: - dependency-name: hotkeys-js dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8f90dee2d3..3b0f12bfba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4005,9 +4005,9 @@ hasown@^2.0.2: function-bind "^1.1.2" hotkeys-js@*: - version "3.13.15" - resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.13.15.tgz#2d394bd6bd78857d4b24dc86bdba2fa1cf7012fc" - integrity sha512-gHh8a/cPTCpanraePpjRxyIlxDFrIhYqjuh01UHWEwDpglJKCnvLW8kqSx5gQtOuSsJogNZXLhOdbSExpgUiqg== + version "4.0.0" + resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-4.0.0.tgz#75336c0ac610ad384d286c61c519909dcd4bdf6b" + integrity sha512-gIoeqMWYqPIItc4HaseVbtTRpEpBbeufZMUcoWtN62JZdDq3KadS1ijN6wpaDjTzRK7PjT3QOPUcx+yNT0rrZQ== hpack.js@^2.1.6: version "2.1.6" From a2a9d32c5b73a970f58e536c0f111e38ab153452 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 2 Feb 2026 15:31:48 +1100 Subject: [PATCH 239/270] Bump taler from 0.1.0 to 0.2.0 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 989e611c03..98a5c18c11 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -893,7 +893,7 @@ GEM faraday (~> 2.0) faraday-follow_redirects sysexits (1.2.0) - taler (0.1.0) + taler (0.2.0) temple (0.10.4) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) From 52e2fb923efea1933c0aa70db8bbe9cb39bdbf85 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 2 Feb 2026 15:44:34 +1100 Subject: [PATCH 240/270] Update Taler calls for new v0.2.0 --- app/models/spree/payment_method/taler.rb | 30 +++++++++---------- spec/system/consumer/checkout/payment_spec.rb | 4 +-- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index d50625b309..5df12fe8a8 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -38,7 +38,7 @@ module Spree payment.source ||= self payment.response_code ||= create_taler_order(payment) - payment.redirect_auth_url ||= fetch_order_url(payment) + payment.redirect_auth_url ||= taler_order.status_url payment.save! if payment.changed? payment.redirect_auth_url @@ -53,8 +53,8 @@ module Spree return unless payment.response_code - taler_order = client.fetch_order(payment.response_code) - status = taler_order["order_status"] + taler_order = taler_order(id: payment.response_code) + status = taler_order.fetch("order_status") success = (status == "paid") message = I18n.t(status, default: status, scope: "taler.order_status") @@ -72,22 +72,20 @@ module Spree # current demo backend only working with the KUDOS currency. taler_amount = "KUDOS:#{payment.amount}" urls = Rails.application.routes.url_helpers - new_order = client.create_order( - taler_amount, - I18n.t("payment_method_taler.order_summary"), - urls.payment_gateways_confirm_taler_url(payment_id: payment.id), + fulfillment_url = urls.payment_gateways_confirm_taler_url(payment_id: payment.id) + taler_order.create( + amount: taler_amount, + summary: I18n.t("payment_method_taler.order_summary"), + fulfillment_url:, ) - - new_order["order_id"] end - def fetch_order_url(payment) - order = client.fetch_order(payment.response_code) - order["order_status_url"] - end - - def client - @client ||= ::Taler::Client.new(preferred_backend_url, preferred_api_key) + def taler_order(id: nil) + @taler_order ||= ::Taler::Order.new( + backend_url: preferred_backend_url, + password: preferred_api_key, + id:, + ) end end end diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index 4e513845b3..207e2268c1 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -354,8 +354,8 @@ RSpec.describe "As a consumer, I want to checkout my order" do # Shortcut the user interaction and go straight to our # confirmation action. taler_order_id = { "order_id" => "taler-order:123" } - expect_any_instance_of(Taler::Client) - .to receive(:create_order).and_return(taler_order_id) + expect_any_instance_of(Taler::Order) + .to receive(:create).and_return(taler_order_id) # And fake the payment status to avoid user interaction. allow_any_instance_of(Taler::Client) From ed701b00dcc1e85ae569ccdee6c8bcf145ef9747 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 2 Feb 2026 15:54:04 +1100 Subject: [PATCH 241/270] Stop storing now redundant redirect URL The Taler gem now computes it from the order id. No need to store it. --- app/models/spree/payment_method/taler.rb | 3 +- ...ference_and_retrieves_a_URL_to_pay_at.yml} | 0 .../retrieves_a_URL_to_pay_at.yml | 106 ------------------ .../models/spree/payment_method/taler_spec.rb | 6 +- spec/system/consumer/checkout/payment_spec.rb | 10 +- 5 files changed, 9 insertions(+), 116 deletions(-) rename spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/{retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml => creates_an_order_reference_and_retrieves_a_URL_to_pay_at.yml} (100%) delete mode 100644 spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index 5df12fe8a8..747015f048 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -38,10 +38,9 @@ module Spree payment.source ||= self payment.response_code ||= create_taler_order(payment) - payment.redirect_auth_url ||= taler_order.status_url payment.save! if payment.changed? - payment.redirect_auth_url + taler_order.status_url end # Main method called by Spree::Payment::Processing during checkout diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/creates_an_order_reference_and_retrieves_a_URL_to_pay_at.yml similarity index 100% rename from spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at_and_stores_it_on_the_payment_record.yml rename to spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/creates_an_order_reference_and_retrieves_a_URL_to_pay_at.yml diff --git a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml b/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml deleted file mode 100644 index 89a829b59d..0000000000 --- a/spec/fixtures/vcr_cassettes/Spree_PaymentMethod_Taler/_external_payment_url/retrieves_a_URL_to_pay_at.yml +++ /dev/null @@ -1,106 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://backend.demo.taler.net/instances/sandbox/private/orders - body: - encoding: UTF-8 - string: '{"order":{"amount":"KUDOS:5","summary":"OFN Order","fulfillment_url":"https://ofn.example.net"},"create_token":false}' - headers: - Authorization: - - "" - Accept: - - application/json - User-Agent: - - Taler Ruby - Content-Type: - - application/json - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx/1.26.3 - Date: - - Thu, 15 Jan 2026 04:18:27 GMT - Content-Type: - - application/json - Content-Length: - - '42' - Connection: - - keep-alive - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - "*" - Cache-Control: - - no-store - Via: - - 1.1 Caddy - Strict-Transport-Security: - - max-age=63072000; includeSubDomains; preload - body: - encoding: UTF-8 - string: |- - { - "order_id": "2026.015-02T676V4VARMT" - } - recorded_at: Thu, 15 Jan 2026 04:18:28 GMT -- request: - method: get - uri: https://backend.demo.taler.net/instances/sandbox/private/orders/2026.015-02T676V4VARMT - body: - encoding: US-ASCII - string: '' - headers: - Authorization: - - "" - Accept: - - application/json - User-Agent: - - Taler Ruby - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx/1.26.3 - Date: - - Thu, 15 Jan 2026 04:18:29 GMT - Content-Type: - - application/json - Content-Length: - - '336' - Connection: - - keep-alive - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - "*" - Cache-Control: - - no-store - Via: - - 1.1 Caddy - Strict-Transport-Security: - - max-age=63072000; includeSubDomains; preload - body: - encoding: ASCII-8BIT - string: |- - { - "taler_pay_uri": "taler://pay/backend.demo.taler.net/instances/sandbox/2026.015-02T676V4VARMT/", - "order_status_url": "https://backend.demo.taler.net/instances/sandbox/orders/2026.015-02T676V4VARMT", - "order_status": "unpaid", - "total_amount": "KUDOS:5", - "summary": "OFN Order", - "creation_time": { - "t_s": 1768450707 - } - } - recorded_at: Thu, 15 Jan 2026 04:18:29 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb index fb314043b1..176c8aecc0 100644 --- a/spec/models/spree/payment_method/taler_spec.rb +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -12,14 +12,14 @@ RSpec.describe Spree::PaymentMethod::Taler do let(:backend_url) { "https://backend.demo.taler.net/instances/sandbox" } describe "#external_payment_url", vcr: true do - it "retrieves a URL to pay at and stores it on the payment record" do + it "creates an order reference and retrieves a URL to pay at" do order = create(:order_ready_for_confirmation, payment_method: taler) + url = subject.external_payment_url(order:) - expect(url).to start_with backend_url + expect(url).to eq "#{backend_url}/orders/2026.022-0284X4GE8WKMJ" payment = order.payments.last.reload expect(payment.response_code).to match "2026.022-0284X4GE8WKMJ" - expect(payment.redirect_auth_url).to eq url end end diff --git a/spec/system/consumer/checkout/payment_spec.rb b/spec/system/consumer/checkout/payment_spec.rb index 207e2268c1..da6e7bc1a5 100644 --- a/spec/system/consumer/checkout/payment_spec.rb +++ b/spec/system/consumer/checkout/payment_spec.rb @@ -358,13 +358,13 @@ RSpec.describe "As a consumer, I want to checkout my order" do .to receive(:create).and_return(taler_order_id) # And fake the payment status to avoid user interaction. - allow_any_instance_of(Taler::Client) - .to receive(:fetch_order) do + allow_any_instance_of(Taler::Order) + .to receive(:status_url) do payment = Spree::Payment.last - url = payment_gateways_confirm_taler_path(payment_id: payment.id) - - { "order_status_url" => url, "order_status" => "paid" } + payment_gateways_confirm_taler_path(payment_id: payment.id) end + allow_any_instance_of(Taler::Order) + .to receive(:fetch).with("order_status").and_return("paid") end it_behaves_like "different payment methods", "Taler" From de873ae42c72c8b92e3af13b4a378bd1447d6665 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 5 Feb 2026 13:58:45 +1100 Subject: [PATCH 242/270] Add void action to Taler for refunds --- app/mailers/payment_mailer.rb | 13 ++++++ app/models/spree/payment_method/taler.rb | 27 +++++++++++ .../payment_mailer/refund_available.html.haml | 2 + config/locales/en.yml | 3 ++ spec/mailers/payment_mailer_spec.rb | 12 +++++ .../models/spree/payment_method/taler_spec.rb | 46 +++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 app/views/payment_mailer/refund_available.html.haml diff --git a/app/mailers/payment_mailer.rb b/app/mailers/payment_mailer.rb index f9819d252a..b73756d9ec 100644 --- a/app/mailers/payment_mailer.rb +++ b/app/mailers/payment_mailer.rb @@ -26,4 +26,17 @@ class PaymentMailer < ApplicationMailer reply_to: @order.email) end end + + def refund_available(payment, taler_order_status_url) + @order = payment.order + @taler_order_status_url = taler_order_status_url + + subject = I18n.t("spree.payment_mailer.refund_available.subject", + order: @order) + I18n.with_locale valid_locale(@order.user) do + mail(to: @order.email, + subject:, + reply_to: @order.email) + end + end end diff --git a/app/models/spree/payment_method/taler.rb b/app/models/spree/payment_method/taler.rb index 747015f048..479f06811e 100644 --- a/app/models/spree/payment_method/taler.rb +++ b/app/models/spree/payment_method/taler.rb @@ -21,6 +21,14 @@ module Spree preference :backend_url, :string preference :api_key, :password + def actions + %w{void} + end + + def can_void?(payment) + payment.state == "completed" + end + # Name of the view to display during checkout def method_type "check" # empty view @@ -60,6 +68,25 @@ module Spree ActiveMerchant::Billing::Response.new(success, message) end + def void(response_code, gateway_options) + payment = gateway_options[:payment] + taler_order = taler_order(id: response_code) + status = taler_order.fetch("order_status") + + if status == "claimed" + return ActiveMerchant::Billing::Response.new(true, "Already expired") + end + + raise "Unsupported action" if status != "paid" + + amount = taler_order.fetch("contract_terms")["amount"] + taler_order.refund(refund: amount, reason: "void") + + PaymentMailer.refund_available(payment, taler_order.status_url).deliver_later + + ActiveMerchant::Billing::Response.new(true, "Refund initiated") + end + private def load_payment(order) diff --git a/app/views/payment_mailer/refund_available.html.haml b/app/views/payment_mailer/refund_available.html.haml new file mode 100644 index 0000000000..a980981f63 --- /dev/null +++ b/app/views/payment_mailer/refund_available.html.haml @@ -0,0 +1,2 @@ +%p= t("spree.payment_mailer.refund_available.message", order_number: @order.number) +%p= link_to @taler_order_status_url, @taler_order_status_url diff --git a/config/locales/en.yml b/config/locales/en.yml index e34ed5c0d2..5a0659d29c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -4930,6 +4930,9 @@ en: authorization_required: subject: "A payment requires authorization from the customer" message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." + refund_available: + subject: "Refund available" + message: "Your payment for order %{order_number} is being refunded. Claim your refund following the link below." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/spec/mailers/payment_mailer_spec.rb b/spec/mailers/payment_mailer_spec.rb index 8aed58f59a..ae8ea86772 100644 --- a/spec/mailers/payment_mailer_spec.rb +++ b/spec/mailers/payment_mailer_spec.rb @@ -40,4 +40,16 @@ RSpec.describe PaymentMailer do end end end + + describe "#refund_available" do + it "tells the user to accept a refund" do + payment = create(:payment) + link = "https://taler.example.com/order/1" + mail = PaymentMailer.refund_available(payment, link) + + expect(mail.subject).to eq "Refund available" + expect(mail.body).to match "Claim your refund following the link below." + expect(mail.body).to match link + end + end end diff --git a/spec/models/spree/payment_method/taler_spec.rb b/spec/models/spree/payment_method/taler_spec.rb index 176c8aecc0..fc52541693 100644 --- a/spec/models/spree/payment_method/taler_spec.rb +++ b/spec/models/spree/payment_method/taler_spec.rb @@ -49,4 +49,50 @@ RSpec.describe Spree::PaymentMethod::Taler do expect(response.message).to eq "The payment request expired. Please try again." end end + + describe "#void" do + let(:order_endpoint) { "#{backend_url}/private/orders/taler-order-8" } + let(:refund_endpoint) { "#{order_endpoint}/refund" } + let(:taler_refund_uri) { + "taler://refund/backend.demo.taler.net/instances/sandbox/taler-order-8/" + } + + it "starts the refund process" do + order_status = { + order_status: "paid", + contract_terms: { + amount: "KUDOS:2", + } + } + stub_request(:get, order_endpoint).to_return(body: order_status.to_json) + stub_request(:post, refund_endpoint).to_return(body: { taler_refund_uri: }.to_json) + order = create(:completed_order_with_totals) + order.payments.create( + amount: order.total, state: :completed, + payment_method: taler, + response_code: "taler-order-8", + ) + expect { + response = taler.void("taler-order-8", { payment: order.payments[0] }) + expect(response.success?).to eq true + }.to enqueue_mail(PaymentMailer, :refund_available) + end + + it "returns early if payment already void" do + order_status = { + order_status: "claimed", + } + stub_request(:get, order_endpoint).to_return(body: order_status.to_json) + order = create(:completed_order_with_totals) + order.payments.create( + amount: order.total, state: :completed, + payment_method: taler, + response_code: "taler-order-8", + ) + expect { + response = taler.void("taler-order-8", { payment: order.payments[0] }) + expect(response.success?).to eq true + }.not_to enqueue_mail + end + end end From c66b9611b6f98d4dee167bba6e5970c73b7a3cd7 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 6 Feb 2026 09:53:12 +1100 Subject: [PATCH 243/270] Move PaymentMailer translations out of Spree namespace The mailer is not in the Spree namespace and we don't need to keep the clutter. --- app/mailers/payment_mailer.rb | 6 +++--- .../authorization_required.html.haml | 2 +- .../authorize_payment.html.haml | 2 +- .../payment_mailer/refund_available.html.haml | 2 +- config/locales/en.yml | 20 +++++++++---------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/mailers/payment_mailer.rb b/app/mailers/payment_mailer.rb index b73756d9ec..9dd8172dff 100644 --- a/app/mailers/payment_mailer.rb +++ b/app/mailers/payment_mailer.rb @@ -6,7 +6,7 @@ class PaymentMailer < ApplicationMailer def authorize_payment(payment) @payment = payment @order = @payment.order - subject = I18n.t('spree.payment_mailer.authorize_payment.subject', + subject = I18n.t("payment_mailer.authorize_payment.subject", distributor: @order.distributor.name) I18n.with_locale valid_locale(@order.user) do mail(to: @order.email, @@ -18,7 +18,7 @@ class PaymentMailer < ApplicationMailer def authorization_required(payment) @order = payment.order shop_owner = @order.distributor.owner - subject = I18n.t('spree.payment_mailer.authorization_required.subject', + subject = I18n.t("payment_mailer.authorization_required.subject", order: @order) I18n.with_locale valid_locale(shop_owner) do mail(to: shop_owner.email, @@ -31,7 +31,7 @@ class PaymentMailer < ApplicationMailer @order = payment.order @taler_order_status_url = taler_order_status_url - subject = I18n.t("spree.payment_mailer.refund_available.subject", + subject = I18n.t("payment_mailer.refund_available.subject", order: @order) I18n.with_locale valid_locale(@order.user) do mail(to: @order.email, diff --git a/app/views/payment_mailer/authorization_required.html.haml b/app/views/payment_mailer/authorization_required.html.haml index 391ccbc04a..0bf1be0f16 100644 --- a/app/views/payment_mailer/authorization_required.html.haml +++ b/app/views/payment_mailer/authorization_required.html.haml @@ -1,2 +1,2 @@ -= t('spree.payment_mailer.authorization_required.message', order_number: @order.number) += t(".message", order_number: @order.number) = link_to spree.edit_admin_order_url(@order), spree.edit_admin_order_url(@order) diff --git a/app/views/payment_mailer/authorize_payment.html.haml b/app/views/payment_mailer/authorize_payment.html.haml index ea25e0e7b4..ce7535c57b 100644 --- a/app/views/payment_mailer/authorize_payment.html.haml +++ b/app/views/payment_mailer/authorize_payment.html.haml @@ -1,2 +1,2 @@ -= t('spree.payment_mailer.authorize_payment.instructions', distributor: @payment.order.distributor.name, amount: @payment.display_amount) += t(".instructions", distributor: @payment.order.distributor.name, amount: @payment.display_amount) = link_to main_app.authorize_payment_url(@payment), main_app.authorize_payment_url(@payment) diff --git a/app/views/payment_mailer/refund_available.html.haml b/app/views/payment_mailer/refund_available.html.haml index a980981f63..64cb380f13 100644 --- a/app/views/payment_mailer/refund_available.html.haml +++ b/app/views/payment_mailer/refund_available.html.haml @@ -1,2 +1,2 @@ -%p= t("spree.payment_mailer.refund_available.message", order_number: @order.number) +%p= t(".message", order_number: @order.number) %p= link_to @taler_order_status_url, @taler_order_status_url diff --git a/config/locales/en.yml b/config/locales/en.yml index 5a0659d29c..63caaca96a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -458,6 +458,16 @@ en: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." + refund_available: + subject: "Refund available" + message: "Your payment for order %{order_number} is being refunded. Claim your refund following the link below." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4923,16 +4933,6 @@ en: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." - refund_available: - subject: "Refund available" - message: "Your payment for order %{order_number} is being refunded. Claim your refund following the link below." shipment_mailer: shipped_email: dear_customer: "Dear Customer," From 69108df2069f88584ddc1e900b984019e3ee77ff Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 6 Feb 2026 10:23:17 +1100 Subject: [PATCH 244/270] Use Rails to translate email subject And translate the subject with the user's locale. If the subject doesn't need parameters, you don't need to supply it. Rails finds the translation automatically. --- app/mailers/payment_mailer.rb | 15 ++++----------- .../payment_mailer/refund_available.html.haml | 2 +- config/locales/en.yml | 6 ++++-- spec/mailers/payment_mailer_spec.rb | 9 +++++---- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/mailers/payment_mailer.rb b/app/mailers/payment_mailer.rb index 9dd8172dff..957f0cdf02 100644 --- a/app/mailers/payment_mailer.rb +++ b/app/mailers/payment_mailer.rb @@ -6,11 +6,9 @@ class PaymentMailer < ApplicationMailer def authorize_payment(payment) @payment = payment @order = @payment.order - subject = I18n.t("payment_mailer.authorize_payment.subject", - distributor: @order.distributor.name) I18n.with_locale valid_locale(@order.user) do mail(to: @order.email, - subject:, + subject: default_i18n_subject(distributor: @order.distributor.name), reply_to: @order.distributor.contact.email) end end @@ -18,24 +16,19 @@ class PaymentMailer < ApplicationMailer def authorization_required(payment) @order = payment.order shop_owner = @order.distributor.owner - subject = I18n.t("payment_mailer.authorization_required.subject", - order: @order) I18n.with_locale valid_locale(shop_owner) do - mail(to: shop_owner.email, - subject:, - reply_to: @order.email) + mail(to: shop_owner.email, reply_to: @order.email) end end def refund_available(payment, taler_order_status_url) @order = payment.order + @shop = @order.distributor.name @taler_order_status_url = taler_order_status_url - subject = I18n.t("payment_mailer.refund_available.subject", - order: @order) I18n.with_locale valid_locale(@order.user) do mail(to: @order.email, - subject:, + subject: default_i18n_subject(shop: @shop), reply_to: @order.email) end end diff --git a/app/views/payment_mailer/refund_available.html.haml b/app/views/payment_mailer/refund_available.html.haml index 64cb380f13..94680ef385 100644 --- a/app/views/payment_mailer/refund_available.html.haml +++ b/app/views/payment_mailer/refund_available.html.haml @@ -1,2 +1,2 @@ -%p= t(".message", order_number: @order.number) +%p= t(".message", shop: @shop) %p= link_to @taler_order_status_url, @taler_order_status_url diff --git a/config/locales/en.yml b/config/locales/en.yml index 63caaca96a..2917d93374 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -466,8 +466,10 @@ en: subject: "A payment requires authorization from the customer" message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." refund_available: - subject: "Refund available" - message: "Your payment for order %{order_number} is being refunded. Claim your refund following the link below." + subject: "Refund from %{shop}" + message: | + Your payment to %{shop} is being refunded. + Accept your refund following the link below. producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" diff --git a/spec/mailers/payment_mailer_spec.rb b/spec/mailers/payment_mailer_spec.rb index ae8ea86772..db44824124 100644 --- a/spec/mailers/payment_mailer_spec.rb +++ b/spec/mailers/payment_mailer_spec.rb @@ -2,7 +2,6 @@ RSpec.describe PaymentMailer do describe '#payment_mailer' do - let(:enterprise) { create(:enterprise) } let(:payment_method) { create(:payment_method, distributors: [order.distributor]) } @@ -15,7 +14,8 @@ RSpec.describe PaymentMailer do subject(:email) { described_class.authorize_payment(payment) } it "includes the distributor's name in the subject" do - expect(email.subject).to include("authorize your payment to #{order.distributor.name}") + order.distributor.name = "Fennel Farmer" + expect(email.subject).to include("authorize your payment to Fennel Farmer") end it "sets a reply-to of the customer email" do @@ -44,11 +44,12 @@ RSpec.describe PaymentMailer do describe "#refund_available" do it "tells the user to accept a refund" do payment = create(:payment) + payment.order.distributor = create(:enterprise, name: "Carrot Castle") link = "https://taler.example.com/order/1" mail = PaymentMailer.refund_available(payment, link) - expect(mail.subject).to eq "Refund available" - expect(mail.body).to match "Claim your refund following the link below." + expect(mail.subject).to eq "Refund from Carrot Castle" + expect(mail.body).to match "Your payment to Carrot Castle is being refunded." expect(mail.body).to match link end end From b6438992b9ca6f3535e8635d6186aeb06928f486 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 6 Feb 2026 12:03:48 +1100 Subject: [PATCH 245/270] Speed up spec by not saving to database --- spec/mailers/payment_mailer_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/mailers/payment_mailer_spec.rb b/spec/mailers/payment_mailer_spec.rb index db44824124..59ece0186b 100644 --- a/spec/mailers/payment_mailer_spec.rb +++ b/spec/mailers/payment_mailer_spec.rb @@ -43,8 +43,8 @@ RSpec.describe PaymentMailer do describe "#refund_available" do it "tells the user to accept a refund" do - payment = create(:payment) - payment.order.distributor = create(:enterprise, name: "Carrot Castle") + payment = build(:payment) + payment.order.distributor = build(:enterprise, name: "Carrot Castle") link = "https://taler.example.com/order/1" mail = PaymentMailer.refund_available(payment, link) From 96c2b75a0a24eaab6a0a4528546f23eba0ec7215 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 11 Feb 2026 15:47:55 +1100 Subject: [PATCH 246/270] Spec admin display of Taler payment actions This should satisfy code coverage. --- spec/factories/order_factory.rb | 6 +-- spec/support/table_helper.rb | 8 ++++ spec/system/admin/payments_taler_spec.rb | 52 ++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 spec/support/table_helper.rb create mode 100644 spec/system/admin/payments_taler_spec.rb diff --git a/spec/factories/order_factory.rb b/spec/factories/order_factory.rb index 59b72b9c18..3a29d99833 100644 --- a/spec/factories/order_factory.rb +++ b/spec/factories/order_factory.rb @@ -238,6 +238,8 @@ FactoryBot.define do factory :completed_order_with_fees, parent: :order_with_distributor do transient do payment_fee { 5 } + payment_calculator { build(:calculator_per_item, preferred_amount: payment_fee) } + payment_method { build(:payment_method, calculator: payment_calculator) } shipping_fee { 3 } shipping_tax_category { nil } end @@ -250,11 +252,9 @@ FactoryBot.define do product = create(:simple_product) create(:line_item, order:, product:) - payment_calculator = build(:calculator_per_item, preferred_amount: evaluator.payment_fee) - payment_method = create(:payment_method, calculator: payment_calculator) create(:payment, order:, amount: order.total, - payment_method:, + payment_method: evaluator.payment_method, state: 'checkout') create(:shipping_method_with, :shipping_fee, shipping_fee: evaluator.shipping_fee, diff --git a/spec/support/table_helper.rb b/spec/support/table_helper.rb new file mode 100644 index 0000000000..5847851ea4 --- /dev/null +++ b/spec/support/table_helper.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module TableHelper + # Selector for table row that has the given string + def row_containing(value) + find(:xpath, "(//tr[contains(., '#{value}')])") + end +end diff --git a/spec/system/admin/payments_taler_spec.rb b/spec/system/admin/payments_taler_spec.rb new file mode 100644 index 0000000000..1ef2b6dfa9 --- /dev/null +++ b/spec/system/admin/payments_taler_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'system_helper' + +RSpec.describe "Admin -> Order -> Payments" do + include AuthenticationHelper + include TableHelper + + let(:distributor) { build(:distributor_enterprise) } + let(:order) { create(:completed_order_with_fees, distributor:, payments: [payment]) } + let(:payment) { + build(:payment, :completed, payment_method: taler, source: taler, response_code: "taler-id-1") + } + let(:taler) { + Spree::PaymentMethod::Taler.new( + name: "Taler", + distributors: [distributor], + environment: "test", + preferred_backend_url: "https://taler.example.com", + preferred_api_key: "sandbox", + ) + } + + before do + login_as distributor.owner + end + + it "allows to refund a Taler payment" do + order_status = { + order_status: "paid", + contract_terms: { + amount: "KUDOS:2", + } + } + order_endpoint = "https://taler.example.com/private/orders/taler-id-1" + refund_endpoint = "https://taler.example.com/private/orders/taler-id-1/refund" + stub_request(:get, order_endpoint).to_return(body: order_status.to_json) + stub_request(:post, refund_endpoint).to_return(body: "{}") + + visit spree.admin_order_payments_path(order.number) + + within row_containing("Taler") do + expect(page).to have_text "COMPLETED" + expect(page).to have_link class: "icon-void" + + click_link class: "icon-void" + + expect(page).to have_text "VOID" + expect(page).not_to have_link class: "icon-void" + end + end +end From fcb9439cd2cc6df7c69f20491bde71f072cb1059 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 09:33:13 +0000 Subject: [PATCH 247/270] Bump webpack from 5.105.1 to 5.105.2 Bumps [webpack](https://github.com/webpack/webpack) from 5.105.1 to 5.105.2. - [Release notes](https://github.com/webpack/webpack/releases) - [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack/compare/v5.105.1...v5.105.2) --- updated-dependencies: - dependency-name: webpack dependency-version: 5.105.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3b0f12bfba..d052f92fb2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7376,9 +7376,9 @@ webpack-sources@^3.3.3: integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.104.0: - version "5.105.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.1.tgz#c05cb3621196c76fa3b3a9bea446d14616b83778" - integrity sha512-Gdj3X74CLJJ8zy4URmK42W7wTZUJrqL+z8nyGEr4dTN0kb3nVs+ZvjbTOqRYPD7qX4tUmwyHL9Q9K6T1seW6Yw== + version "5.105.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.105.2.tgz#f3b76f9fc36f1152e156e63ffda3bbb82e6739ea" + integrity sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.8" From 1f7c08bbb0b9f1fc31f3f7883b3bc97e69f59b7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 09:33:43 +0000 Subject: [PATCH 248/270] Bump sidekiq-scheduler from 5.0.3 to 6.0.1 Bumps [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) from 5.0.3 to 6.0.1. - [Release notes](https://github.com/moove-it/sidekiq-scheduler/releases) - [Changelog](https://github.com/sidekiq-scheduler/sidekiq-scheduler/blob/master/CHANGELOG.md) - [Commits](https://github.com/moove-it/sidekiq-scheduler/compare/v5.0.3...v6.0.1) --- updated-dependencies: - dependency-name: sidekiq-scheduler dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 989e611c03..96ee7f8da6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -315,7 +315,7 @@ GEM activemodel erb (6.0.1) erubi (1.13.1) - et-orbi (1.3.0) + et-orbi (1.4.0) tzinfo eventmachine (1.2.7) eventmachine_httpserver (0.2.1) @@ -371,8 +371,8 @@ GEM foreman (0.90.0) thor (~> 1.4) formatador (0.2.5) - fugit (1.11.1) - et-orbi (~> 1, >= 1.2.11) + fugit (1.12.1) + et-orbi (~> 1.4) raabro (~> 1.4) fuubar (2.5.1) rspec-core (~> 3.0) @@ -710,7 +710,7 @@ GEM redcarpet (3.6.1) redis (5.4.1) redis-client (>= 0.22.0) - redis-client (0.26.1) + redis-client (0.26.4) connection_pool regexp_parser (2.11.3) reline (0.6.3) @@ -815,8 +815,8 @@ GEM ffi (~> 1.12) logger rubyzip (2.4.1) - rufus-scheduler (3.8.2) - fugit (~> 1.1, >= 1.1.6) + rufus-scheduler (3.9.2) + fugit (~> 1.1, >= 1.11.1) rugged (1.9.0) sanitize (7.0.0) crass (~> 1.0.2) @@ -838,10 +838,9 @@ GEM logger rack (>= 2.2.4, < 3.3) redis-client (>= 0.23.0, < 1) - sidekiq-scheduler (5.0.3) + sidekiq-scheduler (6.0.1) rufus-scheduler (~> 3.2) - sidekiq (>= 6, < 8) - tilt (>= 1.4.0) + sidekiq (>= 7.3, < 9) simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) @@ -899,7 +898,7 @@ GEM unicode-display_width (>= 1.1.1, < 4) thor (1.5.0) thread-local (1.1.0) - tilt (2.6.1) + tilt (2.7.0) timeout (0.6.0) tsort (0.2.0) ttfunk (1.8.0) From b455755bfc9a022de8f4171918a03845e191eeeb Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sat, 21 Feb 2026 02:34:10 +0500 Subject: [PATCH 249/270] Update all locales with the latest Transifex translations --- config/locales/en_CA.yml | 7 +++ config/locales/en_GB.yml | 88 +++++++++++++++++++++++++++-- config/locales/fi.yml | 119 ++++++++++++++++++++++++++++++++++++++- config/locales/fr.yml | 2 +- config/locales/fr_CA.yml | 76 +++++++++++++++++++++++++ 5 files changed, 284 insertions(+), 8 deletions(-) diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index a38b021535..75497933d8 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -246,6 +246,9 @@ en_CA: disconnect_failure: "Failed to disconnecct Stripe." success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: @@ -3358,6 +3361,8 @@ en_CA: payment_processing_failed: "Payment could not be processed, please check the details you entered." payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" @@ -4171,6 +4176,7 @@ en_CA: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back to Images List" + backend_url: "Backend URL" api_key: "API key" email: Email account_updated: "Account updated!" @@ -4490,6 +4496,7 @@ en_CA: check: "Cash/EFT/Bank Transfer etc. (payments for which automatic validation is not required)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 851c5f2961..0da524688a 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -115,6 +115,67 @@ en_GB: blank: "can't be blank" too_short: "is too short (minimum is %{count} characters)" errors: + messages: + content_type_invalid: + one: "has an invalid content type (authorised content type is %{authorized_human_content_types})" + other: "has an invalid content type (authorised content types are\n%{authorized_human_content_types})" + content_type_spoofed: + one: "has a content type that is not equivalent to the one that is detected through its content (authorised content type is %{authorized_human_content_types})" + other: "has a content type that is not equivalent to the one that is detected through its content (authorised content types are %{authorized_human_content_types})" + file_size_not_less_than: "file size must be less than %{max} (current size is %{file_size})" + file_size_not_less_than_or_equal_to: "file size must be less than or equal to %{max} (current size is %{file_size})" + file_size_not_greater_than: "file size must be greater than %{min} (current size is %{file_size})" + file_size_not_greater_than_or_equal_to: "file size must be greater than or equal to %{min} (current size is %{file_size})" + file_size_not_between: "file size must be between %{min} and %{max} (current size is %{file_size})" + file_size_not_equal_to: "file size must be equal to %{exact} (current size is %{file_size})" + total_file_size_not_less_than: "total file size must be less than %{max} (current size is %{total_file_size})" + total_file_size_not_less_than_or_equal_to: "total file size must be less than or equal to %{max} (current size is %{total_file_size})" + total_file_size_not_greater_than: "total file size must be greater than %{min} (current size is %{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "total file size must be greater than or equal to %{min} (current size is %{total_file_size})" + total_file_size_not_between: "total file size must be between %{min} and %{max} (current size is %{total_file_size})" + total_file_size_not_equal_to: "total file size must be equal to %{exact} (current size is %{total_file_size})" + duration_not_less_than: "duration must be less than %{max} (current duration is %{duration})" + duration_not_less_than_or_equal_to: "duration must be less than or equal to %{max} (current duration is %{duration})" + duration_not_greater_than: "duration must be greater than %{min} (current duration is %{duration})" + duration_not_greater_than_or_equal_to: "duration must be greater than or equal to %{min} (current duration is %{duration})" + duration_not_between: "duration must be between %{min} and %{max} (current duration is %{duration})" + duration_not_equal_to: "duration must be equal to %{exact} (current duration is %{duration})" + limit_out_of_range: + zero: "no files attached (must have between %{min} and %{max}files)" + one: "only 1 file attached (must have between %{min} and %{max}files)" + other: "total number of files must be between %{min} and %{max} files (there are %{count}files attached)" + limit_min_not_reached: + zero: "no files attached (must have at least %{min} files)" + one: "only 1 file attached (must have at least %{min} files)" + other: "%{count} files attached (must have at least %{min} files)" + limit_max_exceeded: + zero: "no files attached (maximum is %{max} files)" + one: "too many files attached (maximum is %{max} files, got %{count})" + other: "too many files attached (maximum is %{max} files, got %{count})" + attachment_missing: "is missing its attachment" + media_metadata_missing: "is not a valid media file" + dimension_min_not_included_in: "must be greater than or equal to %{width} x %{height} pixels" + dimension_max_not_included_in: "must be less than or equal to %{width} x %{height} pixels" + dimension_width_not_included_in: "width is not included between %{min} and %{max} pixels" + dimension_height_not_included_in: "height is not included between %{min} and %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels" + dimension_width_not_less_than_or_equal_to: "width must be less than or equal to %{length} pixels" + dimension_height_not_less_than_or_equal_to: "height must be less than or equal to %{length} pixels" + dimension_width_not_equal_to: "width must be equal to %{length} pixels" + dimension_height_not_equal_to: "height must be equal to %{length} pixels" + aspect_ratio_not_square: "must be square (current file is %{width}x%{height}px)" + aspect_ratio_not_portrait: "must be portrait (current file is %{width}x%{height}px)" + aspect_ratio_not_landscape: "must be landscape (current file is %{width}x%{height}px)" + aspect_ratio_not_x_y: "must be %{authorized_aspect_ratios} (current file is %{width}x%{height}px)" + aspect_ratio_invalid: "has an invalid aspect ratio (valid aspect ratios are %{authorized_aspect_ratios})" + file_not_processable: "is not identified as a valid media file" + pages_not_less_than: "page count must be less than %{max} (current page count is %{pages})" + pages_not_less_than_or_equal_to: "page count must be less than or equal to %{max} (current page count is %{pages})" + pages_not_greater_than: "page count must be greater than %{min} (current page count is %{pages})" + pages_not_greater_than_or_equal_to: "page count must be greater than or equal to %{min} (current page count is %{pages})" + pages_not_between: "page count must be between %{min} and %{max} (current page count is %{pages})" + pages_not_equal_to: "page count must be equal to %{exact} (current page count is %{pages})" not_found: title: "The page you were looking for doesn't exist (404)" message_html: "Please try again

This might be a temporary problem. Please click the back button to return to the previous screen or go back to Home and try again.

Contact support

If the problem persists or is urgent, please tell us about it. Find our contact details from the global Open Food Network Local page.

It really helps us if you can give as much detail as possible about what the missing page is about.

" @@ -185,6 +246,9 @@ en_GB: disconnect_failure: "Failed to disconnect Stripe." success_code: disconnected: "Stripe account disconnected." + taler: + order_status: + claimed: "The payment request expired. Please try again." activemodel: errors: messages: @@ -520,6 +584,7 @@ en_GB: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "The voucher has expired" not_found_voucher: "Sorry, we couldn't find that voucher, please check the code." vine_voucher_redeemer_service: errors: @@ -934,6 +999,10 @@ en_GB: clone: success: Successfully cloned the product error: Unable to clone the product + tag_rules: + rules_per_tag: + one: "%{tag} has 1 rule" + other: "%{tag} has %{count} rules" product_import: title: Product Import file_not_found: File not found or could not be opened @@ -2374,9 +2443,9 @@ en_GB: order_includes_tax: (includes tax) order_payment_paypal_successful: Your payment via PayPal has been processed successfully. order_hub_info: Hub info - order_back_to_store: Back To Store - order_back_to_cart: Back To Cart - order_back_to_website: Back To Website + order_back_to_store: Back to shop + order_back_to_cart: Back to cart + order_back_to_website: Back to website checkout_details_title: Checkout Details checkout_payment_title: Checkout Payment checkout_summary_title: Checkout Summary @@ -3292,11 +3361,13 @@ en_GB: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "That payment method is unsupported. Please choose another one." payment_updated: "Payment Updated" + payment_method_taler: + order_summary: "Open Food Network order" cannot_perform_operation: "Could not update the payment" action_required: "Action required" tag_rules: "Tag Rules" enterprise_fee_whole_order: Whole order - enterprise_fee_by_name: "%{name} fee by %{role}%{enterprise_name}" + enterprise_fee_by_name: "%{name} fee by %{role} %{enterprise_name}" validation_msg_relationship_already_established: "^That relationship is already established." validation_msg_at_least_one_hub: "^At least one hub must be selected" validation_msg_tax_category_cant_be_blank: "^Tax Category can't be blank" @@ -3337,6 +3408,7 @@ en_GB: order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle" order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise" order_cycle_closed: "The order cycle you've selected has just closed." + order_cycle_closed_next_steps: "The order cycle you've selected has just closed. Please contact us to complete your order #\n%{order_number}!" back_to_orders_list: "Back To Orders List" no_orders_found: "No Orders Found" order_information: "Order Information" @@ -3911,6 +3983,8 @@ en_GB: destroy: success: Webhook endpoint successfully deleted error: Webhook endpoint failed to delete + test: + success: Some test data will be sent to the webhook url spree: order_updated: "Order Updated" cannot_perform_operation: "Can not perform this operation" @@ -4017,6 +4091,7 @@ en_GB: logourl: "Logo url" are_you_sure_delete: "Are you sure you want to delete this record?" confirm_delete: "Confirm Deletion" + tag_rule: "Tag Rule" voucher: "Voucher" configurations: "Configurations" general_settings: "General Settings" @@ -4108,6 +4183,7 @@ en_GB: alt_text: "Alternative Text" thumbnail: "Thumbnail" back_to_images_list: "Back To Images List" + backend_url: "Backend URL" api_key: "API key" email: Email account_updated: "Account updated!" @@ -4427,6 +4503,7 @@ en_GB: check: "Cash/EFT/etc. (payments for which automatic validation is not required)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA " + taler: "Taler" payments: source_forms: stripe: @@ -4883,6 +4960,7 @@ en_GB: order_cycle_tagged_bottom: "are:" inventory_tagged_top: "Inventory variants tagged" inventory_tagged_bottom: "are:" + variant_tagged_top: "Variants tagged" variant_tagged_bottom: "are:" visible: VISIBLE not_visible: NOT VISIBLE @@ -4898,6 +4976,8 @@ en_GB: create_placeholder: Enter the URL of the remote webhook endpoint event_types: order_cycle_opened: Order Cycle Opened + payment_status_changed: Post webhook on Payment status change + test_endpoint: Test webhook endpoint invisible_captcha: sentence_for_humans: "Please leave empty" timestamp_error_message: "Please try again after 5 seconds." diff --git a/config/locales/fi.yml b/config/locales/fi.yml index ef51cf4202..e1d19e03d3 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -18,7 +18,7 @@ fi: phone: "Puhelinnumero" firstname: "Etunimi" lastname: "Sukunimi" - zipcode: "Toimituspostinumero" + zipcode: "Toimitusosoitteen postinumero" spree/order/bill_address: address1: "Laskutusosoite (Katu ja talonumero)" zipcode: "Laskutuspostinumero" @@ -115,6 +115,67 @@ fi: blank: "ei voi olla tyhjä" too_short: "on liian lyhyt (vähintään %{count} merkkiä)" errors: + messages: + content_type_invalid: + one: "sisältää virheellisen sisältötyypin (valtuutettu sisältötyyppi on %{authorized_human_content_types} )" + other: "sisältää virheellisen sisältötyypin (valtuutetut sisältötyypit ovat %{authorized_human_content_types} )" + content_type_spoofed: + one: "sisältötyyppi ei vastaa sisällöstä havaittua tyyppiä (valtuutettu sisältötyyppi on %{authorized_human_content_types} )" + other: "sisältötyyppi ei vastaa sisällöstä havaittua tyyppiä (valtuutetut sisältötyypit ovat %{authorized_human_content_types} )" + file_size_not_less_than: "tiedoston koko on oltava pienempi kuin %{max} (nykyinen koko on %{file_size} )" + file_size_not_less_than_or_equal_to: "tiedoston koko on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen koko on %{file_size} )" + file_size_not_greater_than: "tiedoston koko on oltava suurempi kuin %{min} (nykyinen koko on %{file_size} )" + file_size_not_greater_than_or_equal_to: "tiedoston koko on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen koko on %{file_size} )" + file_size_not_between: "koko on oltava %{min} ja %{max} välillä (nykyinen koko on %{file_size} )" + file_size_not_equal_to: "tiedoston koko on oltava yhtä suuri kuin %{exact} (nykyinen koko on %{file_size} )" + total_file_size_not_less_than: "yhteensä tiedoston koko on oltava pienempi kuin %{max} (nykyinen koko on %{total_file_size} )" + total_file_size_not_less_than_or_equal_to: "yhteensä tiedoston koko on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen koko on %{total_file_size} )" + total_file_size_not_greater_than: "yhteensä tiedoston koko on oltava suurempi kuin %{min} (nykyinen koko on %{total_file_size} )" + total_file_size_not_greater_than_or_equal_to: "yhteensä tiedoston koko on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen koko on %{total_file_size} )" + total_file_size_not_between: "yhteensä tiedoston koko on oltava %{min} ja %{max} välillä (nykyinen koko on %{total_file_size} )" + total_file_size_not_equal_to: "yhteensä tiedoston koko on oltava yhtä suuri kuin %{exact} (nykyinen koko on %{total_file_size} )" + duration_not_less_than: "keston on oltava pienempi kuin %{max} (nykyinen kesto on %{duration} )" + duration_not_less_than_or_equal_to: "keston on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen kesto on %{duration} )" + duration_not_greater_than: "keston on oltava suurempi kuin %{min} (nykyinen kesto on %{duration} )" + duration_not_greater_than_or_equal_to: "keston on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen kesto on %{duration} )" + duration_not_between: "keston on oltava välillä %{min} ja %{max} (nykyinen kesto on %{duration} )" + duration_not_equal_to: "keston on oltava yhtä suuri kuin %{exact} (nykyinen kesto on %{duration} )" + limit_out_of_range: + zero: "ei liitettyjä tiedostoja (tiedostojen on oltava %{min} ja %{max} välillä)" + one: "vain yksi liitetty tiedosto (tiedostojen on oltava %{min} ja %{max} välillä)" + other: "Tiedostojen yhteensä on oltava %{min} ja %{max} välillä (liitteenä on %{count} tiedostot)" + limit_min_not_reached: + zero: "ei liitettyjä tiedostoja (tiedostoissa on oltava vähintään %{min} )" + one: "vain yksi tiedosto liitettynä (tiedostojen on oltava vähintään %{min} )" + other: "%{count} tiedostot liitteenä (vähintään %{min} tiedostoja on oltava)" + limit_max_exceeded: + zero: "ei liitettyjä tiedostoja (enintään %{max} tiedostoja)" + one: "liian monta tiedostoa liitettynä (suurin sallittu määrä on %{max} , sain tulokseksi %{count} )" + other: "liian monta tiedostoa liitettynä (suurin sallittu määrä on %{max} , sain tulokseksi %{count} )" + attachment_missing: "puuttuu sen liite" + media_metadata_missing: "ei ole kelvollinen mediatiedosto" + dimension_min_not_included_in: "on oltava suurempi tai yhtä suuri kuin %{width} x %{height} pikseliä" + dimension_max_not_included_in: "on oltava pienempi tai yhtä suuri kuin %{width} x %{height} pikseliä" + dimension_width_not_included_in: "Leveys ei sisälly %{min} ja %{max} pikselien väliin" + dimension_height_not_included_in: "Korkeutta ei ole %{min} ja %{max} pikselien välillä." + dimension_width_not_greater_than_or_equal_to: "leveyden on oltava suurempi tai yhtä suuri kuin %{length} pikseliä" + dimension_height_not_greater_than_or_equal_to: "korkeuden on oltava suurempi tai yhtä suuri kuin %{length} pikseliä" + dimension_width_not_less_than_or_equal_to: "leveyden on oltava pienempi tai yhtä suuri kuin %{length} pikseliä" + dimension_height_not_less_than_or_equal_to: "korkeuden on oltava pienempi tai yhtä suuri kuin %{length} pikseliä" + dimension_width_not_equal_to: "leveyden on oltava yhtä suuri kuin %{length} pikseliä" + dimension_height_not_equal_to: "korkeuden on oltava yhtä suuri kuin %{length} pikselit" + aspect_ratio_not_square: "on oltava neliön muotoinen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_portrait: "tiedoston on oltava pystysuuntainen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_landscape: "tiedoston on oltava vaakasuuntainen (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_not_x_y: "tiedoston on oltava %{authorized_aspect_ratios} (nykyinen tiedosto on %{width} x %{height} px)" + aspect_ratio_invalid: "kuvasuhde on virheellinen (kelvolliset kuvasuhteet ovat %{authorized_aspect_ratios} )" + file_not_processable: "ei ole tunnistettu kelvolliseksi mediatiedostoksi" + pages_not_less_than: "sivumäärän on oltava pienempi kuin %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_less_than_or_equal_to: "sivumäärän on oltava pienempi tai yhtä suuri kuin %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_greater_than: "sivumäärän on oltava suurempi kuin %{min} (nykyinen sivumäärä on %{pages} )" + pages_not_greater_than_or_equal_to: "sivumäärän on oltava suurempi tai yhtä suuri kuin %{min} (nykyinen sivumäärä on %{pages} )" + pages_not_between: "sivumäärän on oltava välillä %{min} ja %{max} (nykyinen sivumäärä on %{pages} )" + pages_not_equal_to: "sivumäärän on oltava yhtä suuri kuin %{exact} (nykyinen sivumäärä on %{pages} )" not_found: title: "Etsimääsi sivua ei löytynyt (404)" message_html: "Yritä uudelleen

Tämä voi olla tilapäinen ongelma. Palaa edelliselle sivulle tai etusivulle ja yritä uudelleen.

Ota yhteyttä tukeen

Jos ongelma jatkuu tai on kiireellinen, kerro siitä meille. Löydä yhteystiedot globaalilta Open Food Network Local -sivulta.

Autat meitä paljon, jos annat mahdollisimman paljon yksityiskohtia puuttuvasta sivusta.

" @@ -185,6 +246,9 @@ fi: disconnect_failure: "Stripe-tilin irrottaminen epäonnistui." success_code: disconnected: "Stripe-tili irrotettu." + taler: + order_status: + claimed: "Maksupyyntö vanheni. Yritä uudelleen." activemodel: errors: messages: @@ -518,6 +582,7 @@ fi: errors: vine_api: "API-yhteydessä tapahtui virhe, yritä myöhemmin uudelleen." invalid_voucher: "Alennuskuponki ei ole kelvollinen" + expired: "Kuponki on vanhentunut" not_found_voucher: "Anteeksi, emme löytäneet tätä alennuskuponkia, tarkista koodi." vine_voucher_redeemer_service: errors: @@ -932,6 +997,10 @@ fi: clone: success: Tuote kloonattiin onnistuneesti error: Tuotteen kloonaaminen epäonnistui + tag_rules: + rules_per_tag: + one: "%{tag} llä on 1 sääntö" + other: "%{tag} llä on %{count} säännöt." product_import: title: Tuontituotteet file_not_found: Tiedostoa ei löytynyt tai sitä ei voitu avata @@ -1326,6 +1395,9 @@ fi: add_new_button: '+ Lisää uusi oletussääntö' no_tags_yet: Tähän yritykseen ei vielä liity tägejä add_new_tag: '+ Lisää uusi tägi' + show_hide_variants: 'Näytä tai Piilota variantit myymälästäni' + show_hide_shipping: 'Näytä tai piilota toimitustavat kassalla' + show_hide_payment: 'Näytä tai Piilota maksutavat kassalla' show_hide_order_cycles: 'Näytä tai piilota tilausjaksot verkkokaupassani' users: legend: "Käyttäjät" @@ -1479,6 +1551,10 @@ fi: invite_manager: user_already_exists: "Käyttäjä on jo olemassa" error: "Jotain meni pieleen" + tag_rules: + not_supported_type: tägi -sääntötyyppiä ei tueta + confirm_delete: Haluatko varmasti poistaa tämän säännön? + destroy_error: tägi -säännön poistamisessa oli ongelma. order_cycles: loading_flash: loading_order_cycles: LADATAAN TILAUSJAKSOJA @@ -1702,6 +1778,8 @@ fi: not_visible: "%{enterprise} ei ole näkyvissä, joten sitä ei löydy kartalta tai hauista" reports: none: ei yhtään + metadata: + report_title: Ilmianna otsikko deprecated: "Tämä raportti on vanhentunut ja se poistetaan tulevasta julkaisusta." hidden_field: "< Piilotettu >" unitsize: YKSIKKÖKOKO @@ -1804,6 +1882,7 @@ fi: display: Näyttö summary_row: Yhteenvetorivi header_row: Otsikkorivi + metadata_rows: Metadata-rivit raw_data: Raakadata formatted_data: Muotoiltu data packing: @@ -2379,8 +2458,15 @@ fi: email_confirmed: "Kiitos sähköpostiosoitteesi vahvistamisesta." email_confirmation_activate_account: "Ennen kuin voimme aktivoida uuden tilisi, meidän on vahvistettava sähköpostiosoitteesi." email_confirmation_greeting: "Hei, %{contact} !" + email_confirmation_profile_created: > + Profiili käyttäjälle %{name} on luotu onnistuneesti! Profiilisi aktivoimiseksi + meidän on vahvistettava tämä sähköpostiosoite. email_confirmation_click_link: "Vahvista sähköpostiosoitteesi ja jatka profiilisi luomista napsauttamalla alla olevaa linkkiä." email_confirmation_link_label: "Vahvista tämä sähköpostiosoite »" + email_confirmation_help_html: > + Kun olet vahvistanut sähköpostiosoitteesi, voit käyttää ylläpitäjän tiliäsi + tässä yrityksessä. Katso %{link} saadaksesi about %{sitename} :n ominaisuuksista + ja aloittaaksesi profiilisi tai verkkokauppasi käytön. email_confirmation_notice_unexpected: "Sait tämän viestin, koska rekisteröidyit palvelussa %{sitename} tai joku luultavasti tuntemasi henkilö kutsui sinut rekisteröitymään. Jos et ymmärrä, miksi saat tämän sähköpostin, kirjoita osoitteeseen %{contact} ." email_social: "Ota yhteyttä:" email_contact: "Lähetä meille sähköpostia:" @@ -3276,6 +3362,8 @@ fi: payment_processing_failed: "Payment could not be processed, please check the details you entered" payment_method_not_supported: "Maksutapaa ei tueta. Valitse toinen." payment_updated: "Maksu päivitetty" + payment_method_taler: + order_summary: "Open Food Network tilaus" cannot_perform_operation: "Maksua ei voitu päivittää" action_required: "Toimenpide vaaditaan" tag_rules: "Tägisäännöt" @@ -3321,6 +3409,7 @@ fi: order_cycles_no_permission_to_coordinate_error: "Yhdelläkään yritykselläsi ei ole lupaa koordinoida tilauskiertoa." order_cycles_no_permission_to_create_error: "Sinulla ei ole oikeutta luoda kyseisen yrityksen koordinoimaa tilausjaksoa." order_cycle_closed: "Valitsemasi tilausjakso on juuri päättynyt. Yritä uudelleen!" + order_cycle_closed_next_steps: "Valitsemasi tilausjakso on juuri sulkeutunut. Ota meihin yhteyttä täydentääksesi tilaustasi# %{order_number} !" back_to_orders_list: "Takaisin tilauslistaan" no_orders_found: "Ei tilaukset löytynyt" order_information: "Tilaustiedot" @@ -3888,6 +3977,8 @@ fi: destroy: success: Webhook-päätepiste poistettu onnistuneesti error: Webhook-päätepisteen poistaminen epäonnistui + test: + success: Joitakin testitietoja lähetetään webhookin URL-osoitteeseen spree: order_updated: "Tilaus päivitetty" cannot_perform_operation: "Tätä toimintoa ei voida suorittaa" @@ -3994,6 +4085,7 @@ fi: logourl: "Logourl" are_you_sure_delete: "Haluatko varmasti poistaa tämän tietueen?" confirm_delete: "Vahvista poisto" + tag_rule: "tägi Rule" voucher: "Alennuskuponki" configurations: "Asetukset" general_settings: "Yleiset asetukset" @@ -4085,6 +4177,8 @@ fi: alt_text: "Vaihtoehtoinen teksti" thumbnail: "Pienoiskuva" back_to_images_list: "Takaisin kuvaluetteloon" + backend_url: "Taustapalvelun URL-osoite" + api_key: "API-avain" email: Sähköposti account_updated: "Tili päivitetty!" email_updated: "Tili päivitetään, kun uusi sähköpostiosoite on vahvistettu." @@ -4403,6 +4497,7 @@ fi: check: "Käteinen/sähköinen maksu/jne. (maksut, joille ei vaadita automaattista vahvistusta)" paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taleri" payments: source_forms: stripe: @@ -4579,8 +4674,8 @@ fi: or_enter_new_card: "Tai anna uuden kortin tiedot:" remember_this_card: Muistatko tämän kortin? date_picker: - flatpickr_date_format: "d.m.Y" - flatpickr_datetime_format: "d.m.Y H:i" + flatpickr_date_format: "Vuosi" + flatpickr_datetime_format: "Vuosi H:i" today: "Tänään" now: "Nyt" close: "Sulje" @@ -4852,13 +4947,31 @@ fi: tag_rule_form: tag_rules: shipping_method_tagged_top: "Toimitustavat merkitty tägillä" + shipping_method_tagged_bottom: "ovat:" payment_method_tagged_top: "Maksutavat merkitty tägillä" + payment_method_tagged_bottom: "ovat:" order_cycle_tagged_top: "Tilausjaksot merkitty tägillä" + order_cycle_tagged_bottom: "ovat:" inventory_tagged_top: "Tägätyt varastomuunnelmat" + inventory_tagged_bottom: "ovat:" + variant_tagged_top: "Variantit -tunnisteella" + variant_tagged_bottom: "ovat:" + visible: NÄKYVÄ + not_visible: EI NÄKYVÄ tag_rule_group_form: for_customers_tagged: 'Asiakkaille, jotka on tägätty:' add_new_rule: '+ Lisää uusi sääntö' no_rules_yet: Tähän tägiin ei vielä sovelleta sääntöjä + add_tag_rule_modal: + select_rule_type: "Valitse säännön tyyppi:" + add_rule: "lisää sääntö" + webhook_endpoint_form: + url: + create_placeholder: Anna etäwebhook-päätepisteen URL-osoite + event_types: + order_cycle_opened: Tilausjakso avattu + payment_status_changed: Lähetä webhook maksun tilan muutoksesta + test_endpoint: Testaa webhookin päätepiste invisible_captcha: sentence_for_humans: "Jätä tyhjäksi" timestamp_error_message: "Yritä uudelleen 5 sekunnin kuluttua." diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 074fe71a47..c3ec8fef5f 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -2945,7 +2945,7 @@ fr: shipping_method_destroy_error: "Cette méthode de livraison ne peut pas être supprimée car elle est référencée dans une commande : %{number}." fees: "Frais" fee_name: "Nom de la marge/commission" - fee_owner: "Propriétaire des droits" + fee_owner: "Propriétaire de la marge/commission" item_cost: "Coût du produit" bulk: "Vrac" shop_variant_quantity_min: "min" diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index d72b6b0ea8..6c53308828 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -115,6 +115,69 @@ fr_CA: blank: "Champ obligatoire" too_short: "est trop court (minimum %{count} caractère)" errors: + messages: + content_type_invalid: + one: "a un contenu invalide (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un contenu invalide (les types de contenus autorisés sont %{authorized_human_content_types})" + content_type_spoofed: + one: "a un type de contenu qui n'est pas équivalent avec celui détecté (le type de contenu autorisé est %{authorized_human_content_types})" + many: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + other: "a un type de contenu qui n'est pas équivalent avec celui détecté (les types de contenus autorisés sont %{authorized_human_content_types})" + file_size_not_less_than: "la taille du fichier doit être inférieure à %{max} (la taille actuelle est %{file_size})" + file_size_not_less_than_or_equal_to: "la taille du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{file_size})" + file_size_not_greater_than: "la taille du fichier doit être supérieure à %{min} (la taille actuelle est%{file_size})" + file_size_not_greater_than_or_equal_to: "la taille du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{file_size})" + file_size_not_between: "la taille du fichier doit être comprise entre%{min} et %{max} (la taille actuelle est %{file_size})" + file_size_not_equal_to: "la taille du fichier doit être égale à %{exact} (la taille actuelle est %{file_size})" + total_file_size_not_less_than: "La taille totale du fichier doit être inférieure à %{max} (la taille actuelle est%{total_file_size})" + total_file_size_not_less_than_or_equal_to: "La taille totale du fichier doit être inférieure ou égale à %{max} (la taille actuelle est %{total_file_size})" + total_file_size_not_greater_than: "La taille totale du fichier doit être supérieure à %{min} (la taille actuelle est%{total_file_size})" + total_file_size_not_greater_than_or_equal_to: "La taille totale du fichier doit être supérieure ou égale à %{min} (la taille actuelle est %{total_file_size})" + total_file_size_not_between: "La taille totale du fichier doit être comprise entre %{min} et %{max} (la taille actuelle est %{total_file_size})" + total_file_size_not_equal_to: "La taille totale du fichier doit être égale à %{exact} (la taille actuelle est%{total_file_size})" + duration_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{duration})" + duration_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est%{duration})" + duration_not_greater_than: "La durée doit être supérieure à %{min} (la durée actuelle est %{duration})" + duration_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle est%{duration})" + duration_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{duration})" + duration_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{duration})" + limit_out_of_range: + zero: "Aucun fichier joint (doit contenir entre %{min} et %{max} fichiers)" + one: "Seulement 1 fichier joint (doit contenir entre%{min} et %{max} fichiers)" + other: "Le nombre total de fichiers doit être compris entre %{min} et %{max} fichiers (il y a %{count} fichiers joints)" + limit_min_not_reached: + zero: "Aucun fichier joint (doit contenir au moins %{min} fichiers)" + one: "Seulement 1 fichier joint (doit contenir au moins %{min} fichiers)" + other: "%{count} Aucun fichier joint (doit contenir au moins %{min} fichiers)" + limit_max_exceeded: + zero: "Aucun fichier joint (au maximum %{max} fichiers)" + one: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a %{count})" + other: "Trop de fichiers joints (le maximum est %{max} fichiers, il y en a%{count})" + attachment_missing: "une pièce jointe est manquante" + media_metadata_missing: "n'est pas un fichier multimédia valide" + dimension_min_not_included_in: "doit être plus grand ou égal à %{width} x %{height} pixels" + dimension_max_not_included_in: "doit être plus petit ou égal à %{width} x %{height} pixels" + dimension_width_not_included_in: "la largeur n'est pas comprise entre %{min} et %{max} pixels" + dimension_height_not_included_in: "la hauteur n'est pas comprise entre %{min} et %{max} pixels" + dimension_width_not_greater_than_or_equal_to: "la largeur doit être supérieure ou égale à %{length} pixels" + dimension_height_not_greater_than_or_equal_to: "la hauteur doit être supérieure ou égale à %{length} pixels" + dimension_width_not_less_than_or_equal_to: "la largeur doit être inférieure ou égale à %{length} pixels" + dimension_height_not_less_than_or_equal_to: "la hauteur doit être inférieure ou égale à %{length} pixels" + dimension_width_not_equal_to: "la largeur doit être égale à %{length} pixels" + dimension_height_not_equal_to: "La hauteur doit être égale à %{length} pixels" + aspect_ratio_not_square: "doit être carré (le fichier actuel est %{width}x%{height}px)" + aspect_ratio_not_portrait: "doit être au format portrait (le fichier actuel mesure %{width}x%{height}px)" + aspect_ratio_not_landscape: "doit être au format paysage (le fichier actuel mesure %{width}x%{height}px)" + aspect_ratio_not_x_y: "doit être %{authorized_aspect_ratios} (le fichier actuel est %{width}x%{height}px)" + aspect_ratio_invalid: "possède un ratio d'image invalide (les ratios d'image valides sont %{authorized_aspect_ratios})" + file_not_processable: "n'est pas identifié comme un fichier multimédia valide" + pages_not_less_than: "La durée doit être inférieure à %{max} (la durée actuelle est %{pages})" + pages_not_less_than_or_equal_to: "La durée doit être inférieure ou égale à %{max} (la durée actuelle est %{pages})" + pages_not_greater_than: "La durée doit être supérieure à %{min}(la durée actuelle est %{pages})" + pages_not_greater_than_or_equal_to: "La durée doit être supérieure ou égale à %{min} (la durée actuelle %{pages})" + pages_not_between: "La durée doit être comprise entre %{min} et %{max} (la durée actuelle est %{pages})" + pages_not_equal_to: "La durée doit être égale à %{exact} (la durée actuelle est %{pages})" not_found: title: "La page que vous recherchez n'existe pas (erreur 404)" message_html: "Veuillez essayer à nouveau

Il s'agit peut-être d'un problème temporaire. Veuillez cliquer sur le bouton retour de votre navigateur ou retourner à l' Accueil et recommencez. Contacter notre support 

Si le problème persiste ou si c'est urgent, veuillez nous contacter.

" @@ -185,6 +248,9 @@ fr_CA: disconnect_failure: "Déconnecter Stripe a échoué." success_code: disconnected: "Le compte Stripe est déconnecté." + taler: + order_status: + claimed: "La demande de paiement a expiré. Merci d'essayer à nouveau." activemodel: errors: messages: @@ -520,6 +586,7 @@ fr_CA: errors: vine_api: "There was an error communicating with the API, please try again later." invalid_voucher: "The voucher is not valid" + expired: "Le bon de réduction a expiré." not_found_voucher: "Désolé, nous n'avons pas trouvé ce bon de réduction. Merci de vérifier le code qui vous a été transmis." vine_voucher_redeemer_service: errors: @@ -3305,6 +3372,8 @@ fr_CA: payment_processing_failed: "Le paiement n'a pas pu être traité, veuillez vérifier les informations saisies" payment_method_not_supported: "Cette méthode de paiement n'est pas maintenue. Veuillez en sélectionner une autre." payment_updated: "Paiement mis à jour" + payment_method_taler: + order_summary: "Commande Open Food Network" cannot_perform_operation: "Le paiement n'a pas pu être mis à jour." action_required: "Une action est requise" tag_rules: "Règles de tag" @@ -3965,6 +4034,8 @@ fr_CA: destroy: success: Le webhook a bien été supprimé. error: Le webhook n'a pas pu être supprimé. + test: + success: Des données test vont être envoyées à l'URL du webhook spree: order_updated: "La commande a été mise à jour" cannot_perform_operation: "Cette opération ne peut pas être réalisée" @@ -4071,6 +4142,7 @@ fr_CA: logourl: "URL du logo" are_you_sure_delete: "Etes-vous certain de vouloir supprimer cet élément ?" confirm_delete: "Confirmer la suppression" + tag_rule: "Règle de tag" voucher: "Bon de réduction" configurations: "Configurations" general_settings: "Configurations générales" @@ -4162,6 +4234,7 @@ fr_CA: alt_text: "Texte alternatif" thumbnail: "Miniature" back_to_images_list: "Retour à la liste des images" + backend_url: "URL du backend" api_key: "Clé API" email: Email account_updated: "Compte mis à jour!" @@ -4481,6 +4554,7 @@ fr_CA: check: "Espèces / chèques / virements / autres " paypalexpress: "PayPal Express" stripesca: "Stripe SCA" + taler: "Taler" payments: source_forms: stripe: @@ -4967,6 +5041,8 @@ fr_CA: create_placeholder: Entrez l'URL du point de terminaison du webhook event_types: order_cycle_opened: Cycle de vente ouvert + payment_status_changed: Poster webhook sur le changement du statut de paiement + test_endpoint: Tester le point de terminaison du webhook invisible_captcha: sentence_for_humans: "Merci de laisser ce champ libre" timestamp_error_message: "S'il vous plaît réessayez après 5 secondes." From f80b484b12947b23447d34db06a33ac2475acef2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Feb 2026 16:39:48 +0000 Subject: [PATCH 250/270] Bump ajv from 6.12.6 to 6.14.0 Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0. - [Release notes](https://github.com/ajv-validator/ajv/releases) - [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0) --- updated-dependencies: - dependency-name: ajv dependency-version: 6.14.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3b0f12bfba..0bdacd8ecb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2491,9 +2491,9 @@ ajv-keywords@^5.1.0: fast-deep-equal "^3.1.3" ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2501,9 +2501,9 @@ ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc" + integrity sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== dependencies: fast-deep-equal "^3.1.3" fast-uri "^3.0.1" From 98775bfdb80ee4e85eb33c950a08b57fdd01486d Mon Sep 17 00:00:00 2001 From: Pavel Date: Sat, 21 Feb 2026 23:21:08 +0000 Subject: [PATCH 251/270] Pass type as keyword argument in migration serialize call Same fix as applied to Invoice and ReportRenderingOptions models in the parent PR: Rails 7.2 requires the type class to be passed as a keyword argument to serialize. serialize :options, Hash, coder: YAML -> serialize :options, type: Hash, coder: YAML Co-Authored-By: Claude Sonnet 4.6 --- .../20241011071014_update_item_name_to_product_in_od_report.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20241011071014_update_item_name_to_product_in_od_report.rb b/db/migrate/20241011071014_update_item_name_to_product_in_od_report.rb index 6344d91188..00edf95945 100644 --- a/db/migrate/20241011071014_update_item_name_to_product_in_od_report.rb +++ b/db/migrate/20241011071014_update_item_name_to_product_in_od_report.rb @@ -3,7 +3,7 @@ class UpdateItemNameToProductInOdReport < ActiveRecord::Migration[7.0] self.belongs_to_required_by_default = false belongs_to :user, class_name: "Spree::User" - serialize :options, Hash, coder: YAML + serialize :options, type: Hash, coder: YAML end # OD: Orders and Distributors From f2eec5685e25327b96c3fa5402db0c4cac870a54 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 23 Feb 2026 12:21:45 +1100 Subject: [PATCH 252/270] Include amount in refund email --- app/mailers/payment_mailer.rb | 1 + app/views/payment_mailer/refund_available.html.haml | 2 +- config/locales/en.yml | 2 +- spec/mailers/payment_mailer_spec.rb | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/mailers/payment_mailer.rb b/app/mailers/payment_mailer.rb index 957f0cdf02..6805f31bc8 100644 --- a/app/mailers/payment_mailer.rb +++ b/app/mailers/payment_mailer.rb @@ -24,6 +24,7 @@ class PaymentMailer < ApplicationMailer def refund_available(payment, taler_order_status_url) @order = payment.order @shop = @order.distributor.name + @amount = payment.display_amount @taler_order_status_url = taler_order_status_url I18n.with_locale valid_locale(@order.user) do diff --git a/app/views/payment_mailer/refund_available.html.haml b/app/views/payment_mailer/refund_available.html.haml index 94680ef385..a5d27a8c63 100644 --- a/app/views/payment_mailer/refund_available.html.haml +++ b/app/views/payment_mailer/refund_available.html.haml @@ -1,2 +1,2 @@ -%p= t(".message", shop: @shop) +%p= t(".message", shop: @shop, amount: @amount) %p= link_to @taler_order_status_url, @taler_order_status_url diff --git a/config/locales/en.yml b/config/locales/en.yml index 2917d93374..bf2406c867 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -468,7 +468,7 @@ en: refund_available: subject: "Refund from %{shop}" message: | - Your payment to %{shop} is being refunded. + Your payment of %{amount} to %{shop} is being refunded. Accept your refund following the link below. producer_mailer: order_cycle: diff --git a/spec/mailers/payment_mailer_spec.rb b/spec/mailers/payment_mailer_spec.rb index 59ece0186b..b5fd38d2c5 100644 --- a/spec/mailers/payment_mailer_spec.rb +++ b/spec/mailers/payment_mailer_spec.rb @@ -49,8 +49,8 @@ RSpec.describe PaymentMailer do mail = PaymentMailer.refund_available(payment, link) expect(mail.subject).to eq "Refund from Carrot Castle" - expect(mail.body).to match "Your payment to Carrot Castle is being refunded." - expect(mail.body).to match link + expect(mail.body).to include "Your payment of $45.75 to Carrot Castle is being refunded." + expect(mail.body).to include link end end end From 9d79119eb0038a555a515f1be7a3256c8f02d979 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Mon, 23 Feb 2026 12:57:14 +1100 Subject: [PATCH 253/270] Link to payment action with title The custom helper was adding a PowerTip which replaced the title attribute with its own display. I removed the PowerTip and use a simple title attribute. This should have several benefits: - Capybara can find the link by the title. - Screenreaders should be able read the title. - Browser can show the title in the best position. - Using the browser feature is more consistent and efficient. --- app/views/spree/admin/payments/_list.html.haml | 4 ++-- spec/system/admin/payments_taler_spec.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/spree/admin/payments/_list.html.haml b/app/views/spree/admin/payments/_list.html.haml index 975f171457..705ad5a016 100644 --- a/app/views/spree/admin/payments/_list.html.haml +++ b/app/views/spree/admin/payments/_list.html.haml @@ -18,5 +18,5 @@ %span{class: "state #{payment.state}"}= t(payment.state, scope: "spree.payment_states", default: payment.state.capitalize) %td.actions - payment.actions.each do |action| - = link_to_with_icon "icon-#{action}", Spree.t(action), fire_admin_order_payment_path(@order, payment, e: action), - no_text: true, data: { method: :put, action: action, disable_with: "" } + = link_to "", fire_admin_order_payment_path(@order, payment, e: action), + class: "icon_link icon-#{action} no-text", data: { method: :put, action: action, disable_with: "" }, title: Spree.t(action) diff --git a/spec/system/admin/payments_taler_spec.rb b/spec/system/admin/payments_taler_spec.rb index 1ef2b6dfa9..b6ab367ba0 100644 --- a/spec/system/admin/payments_taler_spec.rb +++ b/spec/system/admin/payments_taler_spec.rb @@ -41,12 +41,12 @@ RSpec.describe "Admin -> Order -> Payments" do within row_containing("Taler") do expect(page).to have_text "COMPLETED" - expect(page).to have_link class: "icon-void" + expect(page).to have_link "Void" click_link class: "icon-void" expect(page).to have_text "VOID" - expect(page).not_to have_link class: "icon-void" + expect(page).not_to have_link "Void" end end end From ce12bc4dbc96bf105a6b03164cfaf6d6ca2df4be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Feb 2026 23:11:45 +0000 Subject: [PATCH 254/270] Bump cuprite from 0.15 to 0.17 Bumps [cuprite](https://github.com/rubycdp/cuprite) from 0.15 to 0.17. - [Release notes](https://github.com/rubycdp/cuprite/releases) - [Changelog](https://github.com/rubycdp/cuprite/blob/main/CHANGELOG.md) - [Commits](https://github.com/rubycdp/cuprite/compare/v0.15...v0.17) --- updated-dependencies: - dependency-name: cuprite dependency-version: '0.17' dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 96ee7f8da6..ce12da36db 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -267,9 +267,9 @@ GEM css_parser (1.21.1) addressable csv (3.3.5) - cuprite (0.15) + cuprite (0.17) capybara (~> 3.0) - ferrum (~> 0.14.0) + ferrum (~> 0.17.0) database_cleaner (2.1.0) database_cleaner-active_record (>= 2, < 3) database_cleaner-active_record (2.2.2) @@ -334,11 +334,12 @@ GEM faraday (>= 1, < 3) faraday-net_http (3.4.2) net-http (~> 0.5) - ferrum (0.14) + ferrum (0.17.1) addressable (~> 2.5) + base64 (~> 0.2) concurrent-ruby (~> 1.1) webrick (~> 1.7) - websocket-driver (>= 0.6, < 0.8) + websocket-driver (~> 0.7) ffaker (2.25.0) ffi (1.17.3) flipper (1.3.6) @@ -529,7 +530,7 @@ GEM net-protocol newrelic_rpm (9.24.0) nio4r (2.7.5) - nokogiri (1.19.0) + nokogiri (1.19.1) mini_portile2 (~> 2.8.2) racc (~> 1.4) nokogiri-html5-inference (0.3.0) @@ -602,7 +603,7 @@ GEM psych (5.3.1) date stringio - public_suffix (7.0.0) + public_suffix (7.0.2) puffing-billy (4.0.2) addressable (~> 2.5) em-http-request (~> 1.1, >= 1.1.0) @@ -959,7 +960,7 @@ GEM crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) webrick (1.9.2) - websocket-driver (0.7.7) + websocket-driver (0.8.0) base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) From 424e25f83e817a49e51fcc48913a08730bee6047 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 12:50:59 +1100 Subject: [PATCH 255/270] Merge mostly duplicate Tom Select helpers --- spec/support/request/tomselect_helper.rb | 45 ------------------------ spec/support/request/web_helper.rb | 2 -- spec/support/tom_select_helper.rb | 22 ++++++++++-- 3 files changed, 19 insertions(+), 50 deletions(-) delete mode 100644 spec/support/request/tomselect_helper.rb diff --git a/spec/support/request/tomselect_helper.rb b/spec/support/request/tomselect_helper.rb deleted file mode 100644 index 93b0717d8e..0000000000 --- a/spec/support/request/tomselect_helper.rb +++ /dev/null @@ -1,45 +0,0 @@ -# frozen_string_literal: true - -module TomselectHelper - def tomselect_open(field_name) - page.find("##{field_name}-ts-control").click - end - - def tomselect_multiselect(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', - text: value).click - # Close the dropdown - page.find("body").click - end - - def tomselect_search_and_select(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - # Use send_keys as setting the value directly doesn't trigger the search - tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click - end - - def tomselect_select(value, options) - tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click - - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click - end - - def open_tomselect_to_validate!(page, field_name) - tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") - tomselect_wrapper.find(".ts-control").click # open the dropdown - - raise 'Please pass the block for expectations' unless block_given? - - # execute block containing expectations - yield - - tomselect_wrapper.find( - '.ts-dropdown .ts-dropdown-content .option.active', - ).click # close the dropdown by selecting the already selected value - end -end diff --git a/spec/support/request/web_helper.rb b/spec/support/request/web_helper.rb index de10dc79c6..3e4bb3a632 100644 --- a/spec/support/request/web_helper.rb +++ b/spec/support/request/web_helper.rb @@ -1,8 +1,6 @@ # frozen_string_literal: true module WebHelper - include TomselectHelper - def have_input(name, opts = {}) selector = "[name='#{name}']" selector += "[placeholder='#{opts[:placeholder]}']" if opts.key? :placeholder diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index d066bbe6ea..d6faed8eb5 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -6,14 +6,16 @@ module TomSelectHelper end def tomselect_multiselect(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', text: value).click + # Close the dropdown + page.find("body").click end def tomselect_search_and_select(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click # Use send_keys as setting the value directly doesn't trigger the search tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) @@ -21,7 +23,7 @@ module TomSelectHelper end def tomselect_select(value, options) - tomselect_wrapper = page.find("[name='#{options[:from]}']").sibling(".ts-wrapper") + tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click @@ -36,4 +38,18 @@ module TomSelectHelper find('.ts-dropdown .ts-dropdown-content .option', text: /#{Regexp.quote(value)}/i).click end + + def open_tomselect_to_validate!(page, field_name) + tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") + tomselect_wrapper.find(".ts-control").click # open the dropdown + + raise 'Please pass the block for expectations' unless block_given? + + # execute block containing expectations + yield + + tomselect_wrapper.find( + '.ts-dropdown .ts-dropdown-content .option.active', + ).click # close the dropdown by selecting the already selected value + end end From d770049d2d0ac4f8b01028537933d451d45ebf31 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 12:56:12 +1100 Subject: [PATCH 256/270] Replace redundant spec helper method --- spec/support/tom_select_helper.rb | 4 ---- spec/system/admin/orders_spec.rb | 8 ++++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index d6faed8eb5..64fd870426 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -1,10 +1,6 @@ # frozen_string_literal: true module TomSelectHelper - def tomselect_open(field_name) - page.find("##{field_name}-ts-control").click - end - def tomselect_multiselect(value, options) tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click diff --git a/spec/system/admin/orders_spec.rb b/spec/system/admin/orders_spec.rb index e5bcbcc776..68e5c1c489 100644 --- a/spec/system/admin/orders_spec.rb +++ b/spec/system/admin/orders_spec.rb @@ -100,10 +100,10 @@ RSpec.describe ' end it "order cycles appear in descending order by close date on orders page" do - tomselect_open('q_order_cycle_id_in').click - - expect(find('#q_order_cycle_id_in', - visible: :all)[:innerHTML]).to have_content(/.*Four.*Three.*Two.*Five/m) + open_tomselect_to_validate!(page, 'q_order_cycle_id_in') do + oc_html = find('#q_order_cycle_id_in', visible: :all)[:innerHTML] + expect(oc_html).to have_content(/.*Four.*Three.*Two.*Five/m) + end end it "filter by multiple order cycles" do From 702db32595c77a44a70b5b23abb98c8fbc094079 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 13:10:41 +1100 Subject: [PATCH 257/270] Connect unit label to input And replace redundant spec helper method. --- app/views/spree/admin/products/new.html.haml | 2 +- spec/support/tom_select_helper.rb | 10 ---------- spec/system/admin/products_v3/create_spec.rb | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/app/views/spree/admin/products/new.html.haml b/app/views/spree/admin/products/new.html.haml index b7444422d6..ee6c972d59 100644 --- a/app/views/spree/admin/products/new.html.haml +++ b/app/views/spree/admin/products/new.html.haml @@ -29,7 +29,7 @@ .sixteen.columns.alpha .eight.columns.alpha = f.field_container :variant_unit do - = f.label :variant_unit, t(".units") + = f.label :variant_unit_with_scale, t(".units") %span.required * = f.select 'variant_unit', [], { include_blank: true }, diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index 64fd870426..ab653a4555 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -25,16 +25,6 @@ module TomSelectHelper tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click end - def select_tom_select(value, from:) - container = find(:id, from) - - within(container) do - find('.ts-control').send_keys(value) - end - - find('.ts-dropdown .ts-dropdown-content .option', text: /#{Regexp.quote(value)}/i).click - end - def open_tomselect_to_validate!(page, field_name) tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click # open the dropdown diff --git a/spec/system/admin/products_v3/create_spec.rb b/spec/system/admin/products_v3/create_spec.rb index e36ba0c9fa..965d9f9e99 100644 --- a/spec/system/admin/products_v3/create_spec.rb +++ b/spec/system/admin/products_v3/create_spec.rb @@ -23,7 +23,7 @@ RSpec.describe 'As an enterprise user, I can manage my products' do expect(page).to have_content "New Product" fill_in 'product_name', with: 'Big Bag Of Apples' tomselect_select supplier.name, from: 'product[supplier_id]' - select_tom_select 'Weight (g)', from: 'product_variant_unit_field' + tomselect_search_and_select 'Weight (g)', from: "product_variant_unit_with_scale" fill_in 'product_unit_value', with: '100' fill_in 'product_price', with: '10.00' # TODO dropdowns below are still using select2: From 1dbcddf799d55d49d074fd0cf65d2c8f22b0c8d3 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 13:39:26 +1100 Subject: [PATCH 258/270] Select found option after search to fix spec Selecting the tom select option in the dropdown often happened quicker than the search finished. In that case we selected the option from the list of all options and then the search would present the found option again and leave the dropdown open. This didn't cause any trouble in the past because any other action would close the dropdown again. But the new cuprite version didn't trigger the next click on the target element. It would just close the dropdown on the next click without further action. That would then break the next assertion looking for the next open dropdown, which didn't open with the click. Selecting the "active" option means that we wait for the search to finish and present an option as active. Clicking that option closes the dropdown without opening it again. --- spec/support/tom_select_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index ab653a4555..86b1e1fd9d 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -15,7 +15,7 @@ module TomSelectHelper tomselect_wrapper.find(".ts-control").click # Use send_keys as setting the value directly doesn't trigger the search tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click + tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option.active', text: value).click end def tomselect_select(value, options) From 2cff5bc4df0ba23b9e0bc4b71e2cdb97c028bf29 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 19 Feb 2026 14:01:59 +1100 Subject: [PATCH 259/270] Style helper code --- spec/support/tom_select_helper.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/support/tom_select_helper.rb b/spec/support/tom_select_helper.rb index 86b1e1fd9d..a5216c10da 100644 --- a/spec/support/tom_select_helper.rb +++ b/spec/support/tom_select_helper.rb @@ -4,7 +4,7 @@ module TomSelectHelper def tomselect_multiselect(value, options) tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown.multi .ts-dropdown-content .option', + tomselect_wrapper.find(:css, ".ts-dropdown.multi .ts-dropdown-content .option", text: value).click # Close the dropdown page.find("body").click @@ -14,28 +14,28 @@ module TomSelectHelper tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click # Use send_keys as setting the value directly doesn't trigger the search - tomselect_wrapper.find(:css, '.ts-dropdown input.dropdown-input').send_keys(value) - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option.active', text: value).click + tomselect_wrapper.find(".ts-dropdown input.dropdown-input").send_keys(value) + tomselect_wrapper.find(".ts-dropdown .ts-dropdown-content .option.active", text: value).click end def tomselect_select(value, options) tomselect_wrapper = page.find_field(options[:from]).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click - tomselect_wrapper.find(:css, '.ts-dropdown .ts-dropdown-content .option', text: value).click + tomselect_wrapper.find(".ts-dropdown .ts-dropdown-content .option", text: value).click end def open_tomselect_to_validate!(page, field_name) tomselect_wrapper = page.find_field(field_name).sibling(".ts-wrapper") tomselect_wrapper.find(".ts-control").click # open the dropdown - raise 'Please pass the block for expectations' unless block_given? + raise "Please pass the block for expectations" unless block_given? # execute block containing expectations yield tomselect_wrapper.find( - '.ts-dropdown .ts-dropdown-content .option.active', + ".ts-dropdown .ts-dropdown-content .option.active", ).click # close the dropdown by selecting the already selected value end end From 2b32d5391165d2c4fb69cb77750da99a2b2f2ad0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 10:24:16 +0000 Subject: [PATCH 260/270] Bump postcss-loader from 8.2.0 to 8.2.1 Bumps [postcss-loader](https://github.com/webpack/postcss-loader) from 8.2.0 to 8.2.1. - [Release notes](https://github.com/webpack/postcss-loader/releases) - [Changelog](https://github.com/webpack/postcss-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/postcss-loader/compare/v8.2.0...v8.2.1) --- updated-dependencies: - dependency-name: postcss-loader dependency-version: 8.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7f4ba0babb..4d8baf7c3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5678,9 +5678,9 @@ postcss-lab-function@^7.0.12: "@csstools/utilities" "^2.0.0" postcss-loader@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.0.tgz#9b830af550bc0829d565d4e774738d84df88eab7" - integrity sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA== + version "8.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.2.1.tgz#c3d9b35498af906fe6c25eb62583c06f619f92fc" + integrity sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow== dependencies: cosmiconfig "^9.0.0" jiti "^2.5.1" From 74e7e9b17bc0ad58d7e8984840aeee355516dede Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 10:24:42 +0000 Subject: [PATCH 261/270] Bump webpack-sources from 3.3.3 to 3.3.4 Bumps [webpack-sources](https://github.com/webpack/webpack-sources) from 3.3.3 to 3.3.4. - [Release notes](https://github.com/webpack/webpack-sources/releases) - [Commits](https://github.com/webpack/webpack-sources/compare/v3.3.3...v3.3.4) --- updated-dependencies: - dependency-name: webpack-sources dependency-version: 3.3.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7f4ba0babb..0b2b6c3e24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7371,9 +7371,9 @@ webpack-merge@^5.7.3, webpack-merge@^5.8.0: wildcard "^2.0.0" webpack-sources@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" - integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891" + integrity sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q== webpack@^5.104.0: version "5.105.2" From 85c903cb7f66eaeb84ded723b5a82185ad0c5af6 Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 23 Feb 2026 23:30:48 +0000 Subject: [PATCH 262/270] Remove fixed serialize deprecation from allowed warnings The "Passing the class as positional argument" warning was suppressed while serialize calls were being updated to use the keyword argument form. Now that the fix is applied, the suppression is no longer needed. Co-Authored-By: Claude Sonnet 4.6 --- config/environments/test.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/environments/test.rb b/config/environments/test.rb index 2dc933a434..3d50e5348d 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -74,8 +74,6 @@ Rails.application.configure do allowed_warnings = [ # List strings here to allow matching deprecations. # - "Passing the class as positional argument", - # Spree::CreditCard model aliases `cc_type` and has a method called `cc_type=` defined. Starting in Rails 7.2 `brand=` will not be calling `cc_type=` anymore. You may want to additionally define `brand=` to preserve the current behavior. "model aliases", From 2330c7cfc2071c5cf139f903687474229df4c3a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Feb 2026 09:31:34 +0000 Subject: [PATCH 263/270] Bump css-loader from 7.1.3 to 7.1.4 Bumps [css-loader](https://github.com/webpack/css-loader) from 7.1.3 to 7.1.4. - [Release notes](https://github.com/webpack/css-loader/releases) - [Changelog](https://github.com/webpack/css-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/css-loader/compare/v7.1.3...v7.1.4) --- updated-dependencies: - dependency-name: css-loader dependency-version: 7.1.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d9ef9e6f9e..bdfbd59404 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3138,9 +3138,9 @@ css-has-pseudo@^7.0.3: postcss-value-parser "^4.2.0" css-loader@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.3.tgz#c0de715ceabe39b8531a85fcaf6734a430c4d99a" - integrity sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA== + version "7.1.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.4.tgz#8f6bf9f8fc8cbef7d2ef6e80acc6545eaefa90b1" + integrity sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw== dependencies: icss-utils "^5.1.0" postcss "^8.4.40" From 95412bd2036f3b58a6a51100d6f1ae9e38fbdc8a Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Tue, 24 Feb 2026 20:27:14 +0500 Subject: [PATCH 264/270] Update Finnish date and datetime formats in locale file --- config/locales/fi.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/fi.yml b/config/locales/fi.yml index e1d19e03d3..57362a09d0 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -4674,8 +4674,8 @@ fi: or_enter_new_card: "Tai anna uuden kortin tiedot:" remember_this_card: Muistatko tämän kortin? date_picker: - flatpickr_date_format: "Vuosi" - flatpickr_datetime_format: "Vuosi H:i" + flatpickr_date_format: "d.m.Y" + flatpickr_datetime_format: "d.m.Y H:i" today: "Tänään" now: "Nyt" close: "Sulje" From c0b6f263386e9aacda37993c997b3b42ee2b6902 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Thu, 26 Feb 2026 12:43:07 +1100 Subject: [PATCH 265/270] Update all locales with the latest Transifex translations --- config/locales/ar.yml | 14 +++++++------- config/locales/ca.yml | 14 +++++++------- config/locales/cy.yml | 14 +++++++------- config/locales/de_CH.yml | 14 +++++++------- config/locales/de_DE.yml | 14 +++++++------- config/locales/el.yml | 14 +++++++------- config/locales/en_CA.yml | 14 +++++++------- config/locales/en_FR.yml | 14 +++++++------- config/locales/en_GB.yml | 14 +++++++------- config/locales/en_IE.yml | 14 +++++++------- config/locales/en_NZ.yml | 14 +++++++------- config/locales/en_US.yml | 14 +++++++------- config/locales/es.yml | 14 +++++++------- config/locales/es_US.yml | 14 +++++++------- config/locales/eu.yml | 14 +++++++------- config/locales/fi.yml | 14 +++++++------- config/locales/fr.yml | 14 +++++++------- config/locales/fr_BE.yml | 14 +++++++------- config/locales/fr_CA.yml | 14 +++++++------- config/locales/fr_CH.yml | 14 +++++++------- config/locales/fr_CM.yml | 14 +++++++------- config/locales/hi.yml | 14 +++++++------- config/locales/hu.yml | 14 +++++++------- config/locales/it.yml | 14 +++++++------- config/locales/it_CH.yml | 14 +++++++------- config/locales/ko.yml | 14 +++++++------- config/locales/ml.yml | 14 +++++++------- config/locales/mr.yml | 13 ++++++------- config/locales/nb.yml | 14 +++++++------- config/locales/pa.yml | 14 +++++++------- config/locales/pt_BR.yml | 14 +++++++------- config/locales/ru.yml | 14 +++++++------- config/locales/sr.yml | 7 ------- config/locales/tr.yml | 14 +++++++------- config/locales/uk.yml | 14 +++++++------- 35 files changed, 237 insertions(+), 245 deletions(-) diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 88e5d7a755..78a5d33045 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -273,6 +273,13 @@ ar: join_community: "انظم إلى المجتمع" invite_manager: subject: "تلقيت دعوة من %{enterprise} لتصبح مديرًا" + payment_mailer: + authorize_payment: + subject: "يرجى تفويض الدفع الخاص بك إلى %{distributor} على OFN" + instructions: "يتطلب الدفع الخاص بك من %{amount} إلى %{distributor} مصادقة إضافية. الرجاء زيارة URL التالي لتفويض الدفع الخاص بك:" + authorization_required: + subject: "يتطلب الدفع إذنًا من العميل" + message: "يتطلب الدفع للطلب %{order_number} تفويضًا إضافيًا من العميل. تم إخطار العميل عبر البريد الإلكتروني وسيظهر الدفع على أنه معلق حتى يتم التصريح به." producer_mailer: order_cycle: subject: "تقرير دورة الطلبية لـ %{producer}" @@ -4289,13 +4296,6 @@ ar: subject: "تعليمات إعادة تعيين كلمة المرور" confirmation_instructions: subject: "يرجى تأكيد حسابك OFN" - payment_mailer: - authorize_payment: - subject: "يرجى تفويض الدفع الخاص بك إلى %{distributor} على OFN" - instructions: "يتطلب الدفع الخاص بك من %{amount} إلى %{distributor} مصادقة إضافية. الرجاء زيارة URL التالي لتفويض الدفع الخاص بك:" - authorization_required: - subject: "يتطلب الدفع إذنًا من العميل" - message: "يتطلب الدفع للطلب %{order_number} تفويضًا إضافيًا من العميل. تم إخطار العميل عبر البريد الإلكتروني وسيظهر الدفع على أنه معلق حتى يتم التصريح به." shipment_mailer: shipped_email: dear_customer: "عزيزي العميل،" diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 8e2e8a868e..0e68e03502 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -283,6 +283,13 @@ ca: join_community: "Uneix-te a la comunitat" invite_manager: subject: "%{enterprise} t'ha convidat a ser administrador" + payment_mailer: + authorize_payment: + subject: "Autoritzeu el vostre pagament a %{distributor} a OFN" + instructions: "El vostre pagament de %{amount} a %{distributor} requereix una autenticació addicional. Visiteu l’URL següent per autoritzar el vostre pagament:" + authorization_required: + subject: "Un pagament requereix l’autorització del client" + message: "El pagament de la comanda %{order_number} requereix una autorització addicional del client. El client ha rebut una notificació per correu electrònic i el pagament apareixerà pendent fins que no s’autoritzi." producer_mailer: order_cycle: subject: "Informe del cicle de comanda per %{producer}" @@ -4170,13 +4177,6 @@ ca: subject: "Instruccions per restablir la contrasenya" confirmation_instructions: subject: "Si us plau confirma el teu compte d'OFN" - payment_mailer: - authorize_payment: - subject: "Autoritzeu el vostre pagament a %{distributor} a OFN" - instructions: "El vostre pagament de %{amount} a %{distributor} requereix una autenticació addicional. Visiteu l’URL següent per autoritzar el vostre pagament:" - authorization_required: - subject: "Un pagament requereix l’autorització del client" - message: "El pagament de la comanda %{order_number} requereix una autorització addicional del client. El client ha rebut una notificació per correu electrònic i el pagament apareixerà pendent fins que no s’autoritzi." shipment_mailer: shipped_email: dear_customer: "Benvolguda consumidora:" diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 185dc55bf7..46d7e4b6f6 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -348,6 +348,13 @@ cy: join_community: "Ymunwch â'r gymuned" invite_manager: subject: "mae %{enterprise} wedi eich gwahodd i fod yn rheolwr" + payment_mailer: + authorize_payment: + subject: "Gofynnir ichi awdurdodi eich taliad i %{distributor} ar y Open Food Network" + instructions: "Mae angen dilysu ychwanegol ar gyfer eich taliad o %{amount} i %{distributor} . Dilynwch yr URL canlynol i awdurdodi eich taliad." + authorization_required: + subject: "Mae angen i gwsmer awdurdodi taliad." + message: "Mae angen awdurdod ychwanegol gan y cwsmer i dalu am archeb %{order_number} Hysbyswyd y cwsmer trwy ebost a bydd y taliad yn ymddangos fel taliad yn yr arfaeth nes ei awdurdodi." producer_mailer: order_cycle: subject: "Adroddiad cylch archebu ar gyfer %{producer}" @@ -4669,13 +4676,6 @@ cy: subject: "Cyfarwyddiadau ailosod cyfrinair" confirmation_instructions: subject: "Gofynnir ichi gadarnhau eich cyfrif y Open Food Network os gwelwch yn dda" - payment_mailer: - authorize_payment: - subject: "Gofynnir ichi awdurdodi eich taliad i %{distributor} ar y Open Food Network" - instructions: "Mae angen dilysu ychwanegol ar gyfer eich taliad o %{amount} i %{distributor} . Dilynwch yr URL canlynol i awdurdodi eich taliad." - authorization_required: - subject: "Mae angen i gwsmer awdurdodi taliad." - message: "Mae angen awdurdod ychwanegol gan y cwsmer i dalu am archeb %{order_number} Hysbyswyd y cwsmer trwy ebost a bydd y taliad yn ymddangos fel taliad yn yr arfaeth nes ei awdurdodi." shipment_mailer: shipped_email: dear_customer: "Annwyl Gwsmer," diff --git a/config/locales/de_CH.yml b/config/locales/de_CH.yml index ce893135b4..437899d3d0 100644 --- a/config/locales/de_CH.yml +++ b/config/locales/de_CH.yml @@ -273,6 +273,13 @@ de_CH: join_community: "Jetzt Teil der Community werden!" invite_manager: subject: "%{enterprise} hat Sie eingeladen, ein Manager zu sein" + payment_mailer: + authorize_payment: + subject: "Bitte autorisieren Sie Ihre Zahlung an %{distributor} im Open Food Network" + instructions: "Ihre Zahlung in Höhe von %{amount} an %{distributor} erfordert Ihre zusätzliche Autorisierung. Bitte klicken Sie auf den folgenden Link, um Ihre Zahlung zu bestätigen:" + authorization_required: + subject: "Eine Zahlung muss durch den Kunden autorisiert werden" + message: "Die Zahlung der Bestellung %{order_number} erfordert eine zusätzliche Autorisierung durch den Kunden. Der Kunde wurde per E-Mail benachrichtigt und die Zahlung wird bis zur Bestätigung als ausstehend angezeigt." producer_mailer: order_cycle: subject: "Bestellzyklusbericht für %{producer}" @@ -4196,13 +4203,6 @@ de_CH: subject: "Anweisungen zum Zurücksetzen des Passworts" confirmation_instructions: subject: "Bitte bestätigen Sie Ihre Registrierung im Open Food Network" - payment_mailer: - authorize_payment: - subject: "Bitte autorisieren Sie Ihre Zahlung an %{distributor} im Open Food Network" - instructions: "Ihre Zahlung in Höhe von %{amount} an %{distributor} erfordert Ihre zusätzliche Autorisierung. Bitte klicken Sie auf den folgenden Link, um Ihre Zahlung zu bestätigen:" - authorization_required: - subject: "Eine Zahlung muss durch den Kunden autorisiert werden" - message: "Die Zahlung der Bestellung %{order_number} erfordert eine zusätzliche Autorisierung durch den Kunden. Der Kunde wurde per E-Mail benachrichtigt und die Zahlung wird bis zur Bestätigung als ausstehend angezeigt." shipment_mailer: shipped_email: dear_customer: "Liebe Kundin, lieber Kunde," diff --git a/config/locales/de_DE.yml b/config/locales/de_DE.yml index f1b24c519a..52558b8621 100644 --- a/config/locales/de_DE.yml +++ b/config/locales/de_DE.yml @@ -297,6 +297,13 @@ de_DE: join_community: "Jetzt Teil der Community werden!" invite_manager: subject: "%{enterprise} hat Sie eingeladen, ein Manager zu sein" + payment_mailer: + authorize_payment: + subject: "Bitte autorisieren Sie Ihre Zahlung an %{distributor} im Open Food Network" + instructions: "Ihre Zahlung in Höhe von %{amount} an %{distributor} erfordert Ihre zusätzliche Autorisierung. Bitte klicken Sie auf den folgenden Link, um Ihre Zahlung zu bestätigen:" + authorization_required: + subject: "Eine Zahlung muss durch den Kunden autorisiert werden" + message: "Die Zahlung der Bestellung %{order_number} erfordert eine zusätzliche Autorisierung durch den Kunden. Der Kunde wurde per E-Mail benachrichtigt und die Zahlung wird bis zur Bestätigung als ausstehend angezeigt." producer_mailer: order_cycle: subject: "Bestellzyklusbericht für %{producer}" @@ -4419,13 +4426,6 @@ de_DE: subject: "Anweisungen zum Zurücksetzen des Passworts" confirmation_instructions: subject: "Bitte bestätigen Sie Ihre Registrierung im Open Food Network" - payment_mailer: - authorize_payment: - subject: "Bitte autorisieren Sie Ihre Zahlung an %{distributor} im Open Food Network" - instructions: "Ihre Zahlung in Höhe von %{amount} an %{distributor} erfordert Ihre zusätzliche Autorisierung. Bitte klicken Sie auf den folgenden Link, um Ihre Zahlung zu bestätigen:" - authorization_required: - subject: "Eine Zahlung muss durch den Kunden autorisiert werden" - message: "Die Zahlung der Bestellung %{order_number} erfordert eine zusätzliche Autorisierung durch den Kunden. Der Kunde wurde per E-Mail benachrichtigt und die Zahlung wird bis zur Bestätigung als ausstehend angezeigt." shipment_mailer: shipped_email: dear_customer: "Liebe Kundin, lieber Kunde," diff --git a/config/locales/el.yml b/config/locales/el.yml index 0324d2d00c..40017aaa95 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -307,6 +307,13 @@ el: join_community: "Συμμετοχή στην κοινότητα" invite_manager: subject: "%{enterprise}σας έχει προσκαλέσει με τον ρόλο του manager." + payment_mailer: + authorize_payment: + subject: "Εξουσιοδοτήστε την πληρωμή σας στο %{distributor} στο OFN" + instructions: "Η πληρωμή σας από %{amount} σε %{distributor} απαιτεί επιπλέον έλεγχο ταυτότητας. Επισκεφτείτε την ακόλουθη διεύθυνση URL για να εξουσιοδοτήσετε την πληρωμή σας:" + authorization_required: + subject: "Μια πληρωμή απαιτεί εξουσιοδότηση από τον πελάτη" + message: "Για την πληρωμή της παραγγελίας %{order_number} απαιτείται επιπλέον εξουσιοδότηση από τον πελάτη. Ο πελάτης έχει ειδοποιηθεί μέσω ηλεκτρονικού ταχυδρομείου και η πληρωμή θα εμφανιστεί σε εκκρεμότητα έως ότου εξουσιοδοτηθεί." producer_mailer: order_cycle: subject: "Καταγραφή κύκλων παραγγελιών για %{producer}" @@ -4424,13 +4431,6 @@ el: subject: "Επαναφορά οδηγιών κωδικού πρόσβασης" confirmation_instructions: subject: "Επιβεβαιώστε τον λογαριασμό σας OFN" - payment_mailer: - authorize_payment: - subject: "Εξουσιοδοτήστε την πληρωμή σας στο %{distributor} στο OFN" - instructions: "Η πληρωμή σας από %{amount} σε %{distributor} απαιτεί επιπλέον έλεγχο ταυτότητας. Επισκεφτείτε την ακόλουθη διεύθυνση URL για να εξουσιοδοτήσετε την πληρωμή σας:" - authorization_required: - subject: "Μια πληρωμή απαιτεί εξουσιοδότηση από τον πελάτη" - message: "Για την πληρωμή της παραγγελίας %{order_number} απαιτείται επιπλέον εξουσιοδότηση από τον πελάτη. Ο πελάτης έχει ειδοποιηθεί μέσω ηλεκτρονικού ταχυδρομείου και η πληρωμή θα εμφανιστεί σε εκκρεμότητα έως ότου εξουσιοδοτηθεί." shipment_mailer: shipped_email: dear_customer: "Αγαπητέ Πελάτη," diff --git a/config/locales/en_CA.yml b/config/locales/en_CA.yml index 75497933d8..71885ac642 100644 --- a/config/locales/en_CA.yml +++ b/config/locales/en_CA.yml @@ -414,6 +414,13 @@ en_CA: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4743,13 +4750,6 @@ en_CA: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." shipment_mailer: shipped_email: dear_customer: "Dear Customer, " diff --git a/config/locales/en_FR.yml b/config/locales/en_FR.yml index a8594a2a66..84f2a833a3 100644 --- a/config/locales/en_FR.yml +++ b/config/locales/en_FR.yml @@ -414,6 +414,13 @@ en_FR: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on CoopCircuits" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4744,13 +4751,6 @@ en_FR: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on CoopCircuits" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/config/locales/en_GB.yml b/config/locales/en_GB.yml index 0da524688a..01c13f2a6d 100644 --- a/config/locales/en_GB.yml +++ b/config/locales/en_GB.yml @@ -414,6 +414,13 @@ en_GB: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorise your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorise your payment:" + authorization_required: + subject: "A payment requires authorisation from the customer" + message: "A payment for order %{order_number} requires additional authorisation from the customer. The customer has been notified via email and the payment will appear as pending until it is authorised." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4750,13 +4757,6 @@ en_GB: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorise your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorise your payment:" - authorization_required: - subject: "A payment requires authorisation from the customer" - message: "A payment for order %{order_number} requires additional authorisation from the customer. The customer has been notified via email and the payment will appear as pending until it is authorised." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/config/locales/en_IE.yml b/config/locales/en_IE.yml index 3002b24281..82cd3ab577 100644 --- a/config/locales/en_IE.yml +++ b/config/locales/en_IE.yml @@ -343,6 +343,13 @@ en_IE: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4532,13 +4539,6 @@ en_IE: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/config/locales/en_NZ.yml b/config/locales/en_NZ.yml index 7ec5f2e79f..be545e81f8 100644 --- a/config/locales/en_NZ.yml +++ b/config/locales/en_NZ.yml @@ -246,6 +246,13 @@ en_NZ: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -3966,13 +3973,6 @@ en_NZ: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/config/locales/en_US.yml b/config/locales/en_US.yml index 9e2a612d4d..19eea30904 100644 --- a/config/locales/en_US.yml +++ b/config/locales/en_US.yml @@ -247,6 +247,13 @@ en_US: join_community: "Join the community" invite_manager: subject: "%{enterprise} has invited you to be a manager" + payment_mailer: + authorize_payment: + subject: "Please authorize your payment to %{distributor} on OFN" + instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" + authorization_required: + subject: "A payment requires authorization from the customer" + message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." producer_mailer: order_cycle: subject: "Order cycle report for %{producer}" @@ -4005,13 +4012,6 @@ en_US: subject: "Reset password instructions" confirmation_instructions: subject: "Please confirm your OFN account" - payment_mailer: - authorize_payment: - subject: "Please authorize your payment to %{distributor} on OFN" - instructions: "Your payment of %{amount} to %{distributor} requires additional authentication. Please visit the following URL to authorize your payment:" - authorization_required: - subject: "A payment requires authorization from the customer" - message: "A payment for order %{order_number} requires additional authorization from the customer. The customer has been notified via email and the payment will appear as pending until it is authorized." shipment_mailer: shipped_email: dear_customer: "Dear Customer," diff --git a/config/locales/es.yml b/config/locales/es.yml index 6dfd4aca80..d2bfd6c905 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -350,6 +350,13 @@ es: join_community: "Unirse a la comunidad" invite_manager: subject: "%{enterprise} te ha invitado a ser administrador" + payment_mailer: + authorize_payment: + subject: "Autorice su pago a %{distributor} en OFN" + instructions: "Su pago de %{amount} a %{distributor} requiere autenticación adicional. Visite la siguiente URL para autorizar su pago:" + authorization_required: + subject: "Un pago requiere autorización del cliente" + message: "El pago del pedido %{order_number} requiere una autorización adicional del cliente. El cliente ha sido notificado vía email y el pago aparecerá como pendiente hasta que sea autorizado." producer_mailer: order_cycle: subject: "Informe Ciclo de Pedido para %{producer}" @@ -4531,13 +4538,6 @@ es: subject: "Instrucciones para restablecer la contraseña" confirmation_instructions: subject: "Por favor, confirma tu cuenta de OFN" - payment_mailer: - authorize_payment: - subject: "Autorice su pago a %{distributor} en OFN" - instructions: "Su pago de %{amount} a %{distributor} requiere autenticación adicional. Visite la siguiente URL para autorizar su pago:" - authorization_required: - subject: "Un pago requiere autorización del cliente" - message: "El pago del pedido %{order_number} requiere una autorización adicional del cliente. El cliente ha sido notificado vía email y el pago aparecerá como pendiente hasta que sea autorizado." shipment_mailer: shipped_email: dear_customer: "Estimada consumidora," diff --git a/config/locales/es_US.yml b/config/locales/es_US.yml index 4fcb548eab..30842dc998 100644 --- a/config/locales/es_US.yml +++ b/config/locales/es_US.yml @@ -243,6 +243,13 @@ es_US: join_community: "Unirse a la comunidad" invite_manager: subject: "%{enterprise} te ha invitado a ser administrador" + payment_mailer: + authorize_payment: + subject: "Autorice su pago a %{distributor} en OFN" + instructions: "Su pago de %{amount} a %{distributor} requiere autenticación adicional. Visite la siguiente URL para autorizar su pago:" + authorization_required: + subject: "Un pago requiere autorización del cliente" + message: "El pago del pedido %{order_number} requiere una autorización adicional del cliente. El cliente ha sido notificado vía email y el pago aparecerá como pendiente hasta que sea autorizado." producer_mailer: order_cycle: subject: "Informe Ciclo de Pedido para %{producer}" @@ -3952,13 +3959,6 @@ es_US: subject: "Instrucciones para restablecer la contraseña" confirmation_instructions: subject: "Por favor, confirma tu cuenta de OFN" - payment_mailer: - authorize_payment: - subject: "Autorice su pago a %{distributor} en OFN" - instructions: "Su pago de %{amount} a %{distributor} requiere autenticación adicional. Visite la siguiente URL para autorizar su pago:" - authorization_required: - subject: "Un pago requiere autorización del cliente" - message: "El pago del pedido %{order_number} requiere una autorización adicional del cliente. El cliente ha sido notificado vía email y el pago aparecerá como pendiente hasta que sea autorizado." shipment_mailer: shipped_email: dear_customer: "Estimada consumidora," diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 23ba813ca1..6e4aad35ad 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -336,6 +336,13 @@ eu: join_community: "Komunitatearekin bat egin" invite_manager: subject: " %{enterprise} administratzaile izatera gonbidatu zaitu" + payment_mailer: + authorize_payment: + subject: "Baimena eman OFNn %{distributor} ri ordaintzeko" + instructions: " %{amount} tik %{distributor} ra ordaintzeko autentifikazio gehigarria behar da. Bisitatu URL hau ordainketa baimentzeko: " + authorization_required: + subject: "Ordainketa batek bezeroaren baimena behar du" + message: " %{order_number} eskaera ordaintzeko, bezeroaren baimen gehigarria behar da. Bezeroa posta elektronikoz jakinarazi da, eta ordainketa egiteke agertuko da baimena eman arte. " producer_mailer: order_cycle: subject: "Eskaera-zikloaren txostena %-rako {producer}" @@ -4306,13 +4313,6 @@ eu: subject: "Pasahitza berrezartzeko jarraibideak" confirmation_instructions: subject: "Mesedez, berretsi zure OFN kontua" - payment_mailer: - authorize_payment: - subject: "Baimena eman OFNn %{distributor} ri ordaintzeko" - instructions: " %{amount} tik %{distributor} ra ordaintzeko autentifikazio gehigarria behar da. Bisitatu URL hau ordainketa baimentzeko: " - authorization_required: - subject: "Ordainketa batek bezeroaren baimena behar du" - message: " %{order_number} eskaera ordaintzeko, bezeroaren baimen gehigarria behar da. Bezeroa posta elektronikoz jakinarazi da, eta ordainketa egiteke agertuko da baimena eman arte. " shipment_mailer: shipped_email: dear_customer: "Kontsumitzaile estimatua," diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 57362a09d0..eaefa83580 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -412,6 +412,13 @@ fi: join_community: "Liity yhteisöön" invite_manager: subject: "%{enterprise} on kutsunut sinut hallinnoijaksi" + payment_mailer: + authorize_payment: + subject: "Valtuuta maksusi käyttäjälle %{distributor} OFN-palvelussa" + instructions: "Maksusi summalle %{amount} maksuun %{distributor} vaatii lisätunnistuksen. Valtuuta maksusi seuraavasta URL-osoitteesta:" + authorization_required: + subject: "Maksu vaatii asiakkaan valtuutuksen" + message: "Tilauksen %{order_number} maksu vaatii asiakkaalta lisävaltuutuksen. Asiakkaalle on ilmoitettu sähköpostitse, ja maksu näkyy odottavana, kunnes se on hyväksytty." producer_mailer: order_cycle: subject: "Tilausjakson raportti tuottajalle %{producer}" @@ -4744,13 +4751,6 @@ fi: subject: "Salasanan palauttamisen ohjeet" confirmation_instructions: subject: "Vahvista OFN-tilisi" - payment_mailer: - authorize_payment: - subject: "Valtuuta maksusi käyttäjälle %{distributor} OFN-palvelussa" - instructions: "Maksusi summalle %{amount} maksuun %{distributor} vaatii lisätunnistuksen. Valtuuta maksusi seuraavasta URL-osoitteesta:" - authorization_required: - subject: "Maksu vaatii asiakkaan valtuutuksen" - message: "Tilauksen %{order_number} maksu vaatii asiakkaalta lisävaltuutuksen. Asiakkaalle on ilmoitettu sähköpostitse, ja maksu näkyy odottavana, kunnes se on hyväksytty." shipment_mailer: shipped_email: dear_customer: "Hyvät asiakas ," diff --git a/config/locales/fr.yml b/config/locales/fr.yml index c3ec8fef5f..5badf0c937 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -415,6 +415,13 @@ fr: join_community: "Accéder au forum" invite_manager: subject: "%{enterprise} vous a invité comme gestionnaire" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} sur CoopCircuits." + instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." producer_mailer: order_cycle: subject: "Rapport de cycle de vente pour %{producer}" @@ -4816,13 +4823,6 @@ fr: subject: "Instructions de mise à jour du mot de passe" confirmation_instructions: subject: "Veuillez confirmer votre compte" - payment_mailer: - authorize_payment: - subject: "Veuillez autoriser votre paiement à %{distributor} sur CoopCircuits." - instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" - authorization_required: - subject: "Un paiement nécessite une autorisation de l'acheteur" - message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." shipment_mailer: shipped_email: dear_customer: "Cher Acheteur," diff --git a/config/locales/fr_BE.yml b/config/locales/fr_BE.yml index b02cb428d5..88865a60f3 100644 --- a/config/locales/fr_BE.yml +++ b/config/locales/fr_BE.yml @@ -408,6 +408,13 @@ fr_BE: join_community: "Rejoindre la communauté" invite_manager: subject: "%{enterprise} vous a invité comme manager" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} sur OFN." + instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que le paiement soit autorisé." producer_mailer: order_cycle: subject: "Rapport de cycle de vente pour %{producer}" @@ -4770,13 +4777,6 @@ fr_BE: subject: "Instructions de réinitialisation du mot de passe" confirmation_instructions: subject: "Veuillez confirmer votre compte" - payment_mailer: - authorize_payment: - subject: "Veuillez autoriser votre paiement à %{distributor} sur OFN." - instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" - authorization_required: - subject: "Un paiement nécessite une autorisation de l'acheteur" - message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que le paiement soit autorisé." shipment_mailer: shipped_email: dear_customer: "Cher Client," diff --git a/config/locales/fr_CA.yml b/config/locales/fr_CA.yml index 6c53308828..4db4fb238a 100644 --- a/config/locales/fr_CA.yml +++ b/config/locales/fr_CA.yml @@ -416,6 +416,13 @@ fr_CA: join_community: "Rejoindre la communauté" invite_manager: subject: "%{enterprise} vous a invité comme manager" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} on OFN." + instructions: "Votre paiement de %{amount} to %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement:" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." producer_mailer: order_cycle: subject: "Rapport de cycle de vente pour %{producer}" @@ -4802,13 +4809,6 @@ fr_CA: subject: "Reprendre" confirmation_instructions: subject: "Veuillez confirmer votre compte" - payment_mailer: - authorize_payment: - subject: "Veuillez autoriser votre paiement à %{distributor} on OFN." - instructions: "Votre paiement de %{amount} to %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement:" - authorization_required: - subject: "Un paiement nécessite une autorisation de l'acheteur" - message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." shipment_mailer: shipped_email: dear_customer: "Cher Acheteur," diff --git a/config/locales/fr_CH.yml b/config/locales/fr_CH.yml index 971db2c6c3..eaf4c81aa6 100644 --- a/config/locales/fr_CH.yml +++ b/config/locales/fr_CH.yml @@ -248,6 +248,13 @@ fr_CH: join_community: "Accéder au forum" invite_manager: subject: "%{enterprise} vous a invité comme gestionnaire" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} sur Open Food Suisse." + instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." producer_mailer: order_cycle: subject: "Rapport de cycle de vente pour %{producer}" @@ -4092,13 +4099,6 @@ fr_CH: subject: "Instructions de mise à jour du mot de passe" confirmation_instructions: subject: "Veuillez confirmer votre compte" - payment_mailer: - authorize_payment: - subject: "Veuillez autoriser votre paiement à %{distributor} sur Open Food Suisse." - instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" - authorization_required: - subject: "Un paiement nécessite une autorisation de l'acheteur" - message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." shipment_mailer: shipped_email: dear_customer: "Cher Acheteur," diff --git a/config/locales/fr_CM.yml b/config/locales/fr_CM.yml index 0ecd689450..2976e9fcdf 100644 --- a/config/locales/fr_CM.yml +++ b/config/locales/fr_CM.yml @@ -202,6 +202,13 @@ fr_CM: join_community: "Accéder au forum" invite_manager: subject: "%{enterprise} vous a invité comme gestionnaire" + payment_mailer: + authorize_payment: + subject: "Veuillez autoriser votre paiement à %{distributor} sur CoopCircuits." + instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" + authorization_required: + subject: "Un paiement nécessite une autorisation de l'acheteur" + message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." producer_mailer: order_cycle: subject: "Rapport de cycle de vente pour %{producer}" @@ -4002,13 +4009,6 @@ fr_CM: subject: "Instructions de mise à jour du mot de passe" confirmation_instructions: subject: "Veuillez confirmer votre compte" - payment_mailer: - authorize_payment: - subject: "Veuillez autoriser votre paiement à %{distributor} sur CoopCircuits." - instructions: "Votre paiement de %{amount} à %{distributor} demande une autorisation additionnelle. Veuillez suivre ce lien afin d'autoriser votre paiement :" - authorization_required: - subject: "Un paiement nécessite une autorisation de l'acheteur" - message: "Un paiement pour la commande %{order_number} nécessite une autorisation supplémentaire de la part de l'acheteur. L'acheteur a reçu un email et le statut du paiement restera en attente jusqu'à ce que l'autorisation soit attribuée." shipment_mailer: shipped_email: dear_customer: "Cher Acheteur," diff --git a/config/locales/hi.yml b/config/locales/hi.yml index 8fb6623820..980b0403aa 100644 --- a/config/locales/hi.yml +++ b/config/locales/hi.yml @@ -297,6 +297,13 @@ hi: join_community: "कम्यूनिटी को जॉइन करें" invite_manager: subject: "%{enterprise} ने आपको प्रबंधक बनने के लिए आमंत्रित किया है" + payment_mailer: + authorize_payment: + subject: "कृपया OFN पर %{distributor} के लिए अपने भुगतान को अधिकृत करें" + instructions: "%{amount} से %{distributor} के आपके भुगतान के लिए अतिरिक्त प्रमाणीकरण की आवश्यकता होती है। अपने भुगतान को अधिकृत करने के लिए कृपया निम्नलिखित URL पर जाएं:" + authorization_required: + subject: "भुगतान के लिए ग्राहक से प्राधिकरण की आवश्यकता होती है" + message: "ऑर्डर %{order_number} के लिए भुगतान के लिए ग्राहक से अतिरिक्त प्राधिकरण की आवश्यकता होती है। ग्राहक को ईमेल के माध्यम से सूचित किया गया है और भुगतान अधिकृत होने तक पेंडिंग दिखाई देगा।" producer_mailer: order_cycle: subject: "%{producer} के लिए साइकल रिपोर्ट ऑर्डर करें" @@ -4322,13 +4329,6 @@ hi: subject: "पासवर्ड निर्देश रिसेट करें" confirmation_instructions: subject: "कृपया अपने OFN अकाउंट की पुष्टि करें" - payment_mailer: - authorize_payment: - subject: "कृपया OFN पर %{distributor} के लिए अपने भुगतान को अधिकृत करें" - instructions: "%{amount} से %{distributor} के आपके भुगतान के लिए अतिरिक्त प्रमाणीकरण की आवश्यकता होती है। अपने भुगतान को अधिकृत करने के लिए कृपया निम्नलिखित URL पर जाएं:" - authorization_required: - subject: "भुगतान के लिए ग्राहक से प्राधिकरण की आवश्यकता होती है" - message: "ऑर्डर %{order_number} के लिए भुगतान के लिए ग्राहक से अतिरिक्त प्राधिकरण की आवश्यकता होती है। ग्राहक को ईमेल के माध्यम से सूचित किया गया है और भुगतान अधिकृत होने तक पेंडिंग दिखाई देगा।" shipment_mailer: shipped_email: dear_customer: "प्रिय ग्राहक," diff --git a/config/locales/hu.yml b/config/locales/hu.yml index d9e5eb0377..7d4b1074b4 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -326,6 +326,13 @@ hu: join_community: "Csatlakozz a közösséghez" invite_manager: subject: "%{enterprise} meghívott téged menedzsernek" + payment_mailer: + authorize_payment: + subject: "Kérjük, engedélyezd a fizetést %{distributor} részére az Open Food-on" + instructions: "%{amount} összegű befizetésed %{distributor} részére további hitelesítést igényel. Kérjük, keresd fel a következő URL-t a fizetés engedélyezéséhez:" + authorization_required: + subject: "A fizetéshez az ügyfél engedélye szükséges" + message: "A(z) %{order_number} rendelés kifizetéséhez további engedély szükséges az ügyféltől. Az ügyfelet e-mailben értesítették, és a fizetés függőben lévőként jelenik meg az engedélyezésig." producer_mailer: order_cycle: subject: "Rendelési ciklus jelentés a következőhöz: %{producer}" @@ -4565,13 +4572,6 @@ hu: subject: "Jelszó visszaállítási utasítások" confirmation_instructions: subject: "Kérjük, erősítsd meg Open Food fiókod" - payment_mailer: - authorize_payment: - subject: "Kérjük, engedélyezd a fizetést %{distributor} részére az Open Food-on" - instructions: "%{amount} összegű befizetésed %{distributor} részére további hitelesítést igényel. Kérjük, keresd fel a következő URL-t a fizetés engedélyezéséhez:" - authorization_required: - subject: "A fizetéshez az ügyfél engedélye szükséges" - message: "A(z) %{order_number} rendelés kifizetéséhez további engedély szükséges az ügyféltől. Az ügyfelet e-mailben értesítették, és a fizetés függőben lévőként jelenik meg az engedélyezésig." shipment_mailer: shipped_email: dear_customer: "Kedves Ügyfelünk," diff --git a/config/locales/it.yml b/config/locales/it.yml index 07c2a17ad4..0eacc20c32 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -273,6 +273,13 @@ it: join_community: "Unisciti alla community" invite_manager: subject: "%{enterprise} ti a invitato ad essere un referente" + payment_mailer: + authorize_payment: + subject: "Per favore autorizza il tuo pagamento a %{distributor} su OFN" + instructions: "Il tuo pagamento di %{amount} a %{distributor} richiede ulteriore autentificazione. Per favore visita il seguente URL per autorizzare il tuo pagamento: " + authorization_required: + subject: "Un pagamento richiede l'autorizzazione del cliente" + message: "Un pagamento per l'ordine %{order_number} richiede una ulteriore autorizzazione da parte del cliente. Il cliente è stato avvisato tramite e-mail e il pagamento apparirà come in sospeso fino a quando non sarà autorizzato." producer_mailer: order_cycle: subject: "Resoconto degli ordini per %{producer}" @@ -4177,13 +4184,6 @@ it: subject: "Istruzioni per il reset della password" confirmation_instructions: subject: "Per favore conferma il tuo account OFN" - payment_mailer: - authorize_payment: - subject: "Per favore autorizza il tuo pagamento a %{distributor} su OFN" - instructions: "Il tuo pagamento di %{amount} a %{distributor} richiede ulteriore autentificazione. Per favore visita il seguente URL per autorizzare il tuo pagamento: " - authorization_required: - subject: "Un pagamento richiede l'autorizzazione del cliente" - message: "Un pagamento per l'ordine %{order_number} richiede una ulteriore autorizzazione da parte del cliente. Il cliente è stato avvisato tramite e-mail e il pagamento apparirà come in sospeso fino a quando non sarà autorizzato." shipment_mailer: shipped_email: dear_customer: "Caro Cliente," diff --git a/config/locales/it_CH.yml b/config/locales/it_CH.yml index 71bcffe281..e267b218c5 100644 --- a/config/locales/it_CH.yml +++ b/config/locales/it_CH.yml @@ -243,6 +243,13 @@ it_CH: join_community: "Unisciti alla community" invite_manager: subject: "%{enterprise} ti a invitato ad essere un referente" + payment_mailer: + authorize_payment: + subject: "Per favore autorizza il tuo pagamento a %{distributor} su OFN" + instructions: "Il tuo pagamento di %{amount} a %{distributor} richiede ulteriore autentificazione. Per favore visita il seguente URL per autorizzare il tuo pagamento: " + authorization_required: + subject: "Un pagamento richiede l'autorizzazione del cliente" + message: "Un pagamento per l'ordine %{order_number} richiede una ulteriore autorizzazione da parte del cliente. Il cliente è stato avvisato tramite e-mail e il pagamento apparirà come in sospeso fino a quando non sarà autorizzato." producer_mailer: order_cycle: subject: "Resoconto degli ordini per %{producer}" @@ -4036,13 +4043,6 @@ it_CH: subject: "Istruzioni per il reset della password" confirmation_instructions: subject: "Per favore conferma il tuo account OFN" - payment_mailer: - authorize_payment: - subject: "Per favore autorizza il tuo pagamento a %{distributor} su OFN" - instructions: "Il tuo pagamento di %{amount} a %{distributor} richiede ulteriore autentificazione. Per favore visita il seguente URL per autorizzare il tuo pagamento: " - authorization_required: - subject: "Un pagamento richiede l'autorizzazione del cliente" - message: "Un pagamento per l'ordine %{order_number} richiede una ulteriore autorizzazione da parte del cliente. Il cliente è stato avvisato tramite e-mail e il pagamento apparirà come in sospeso fino a quando non sarà autorizzato." shipment_mailer: shipped_email: dear_customer: "Caro Cliente," diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 1fda2a412e..3d1a0b9e72 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -244,6 +244,13 @@ ko: join_community: "커뮤니티에 참여하세요" invite_manager: subject: "%{enterprise}가 당신을 매니저로 초대합니다." + payment_mailer: + authorize_payment: + subject: "OFN으로 %{distributor}에게 지불을 승인하십시오." + instructions: "%{distributor}에게 %{amount}를 지불하시려면 추가 인증이 필요합니다. 결제를 승인하려면 다음 URL을 방문하십시오." + authorization_required: + subject: "결제를 수행하려면 고객의 승인이 필요합니다." + message: "주문 %{order_number}에 대한 결제는 고객의 추가 승인이 필요합니다. 고객에게 이메일을 통해 통보되었으며 결제가 승인될 때까지 보류 중인 것으로 표시됩니다." producer_mailer: order_cycle: subject: "%{producer}의 주문 사이클 기록" @@ -3981,13 +3988,6 @@ ko: subject: "비밀번호 지침 초기화" confirmation_instructions: subject: "OFN 계정을 확인하세요." - payment_mailer: - authorize_payment: - subject: "OFN으로 %{distributor}에게 지불을 승인하십시오." - instructions: "%{distributor}에게 %{amount}를 지불하시려면 추가 인증이 필요합니다. 결제를 승인하려면 다음 URL을 방문하십시오." - authorization_required: - subject: "결제를 수행하려면 고객의 승인이 필요합니다." - message: "주문 %{order_number}에 대한 결제는 고객의 추가 승인이 필요합니다. 고객에게 이메일을 통해 통보되었으며 결제가 승인될 때까지 보류 중인 것으로 표시됩니다." shipment_mailer: shipped_email: dear_customer: "고객님 에게," diff --git a/config/locales/ml.yml b/config/locales/ml.yml index c8558ec5df..2c0bb067e9 100644 --- a/config/locales/ml.yml +++ b/config/locales/ml.yml @@ -297,6 +297,13 @@ ml: join_community: "കമ്മ്യൂണിറ്റിയിൽ ചേരുക" invite_manager: subject: "%{enterprise} നിങ്ങളെ മാനേജരാകാൻ ക്ഷണിച്ചു" + payment_mailer: + authorize_payment: + subject: "ഓഎഫ്എൻ-ൽ %{distributor} -ലേക്കുള്ള നിങ്ങളുടെ പേയ്‌മെന്റ് അംഗീകരിക്കുക" + instructions: "%{distributor} -ക്കുള്ള നിങ്ങളുടെ %{amount}പേയ്‌മെന്റിന് അധിക പ്രാമാണീകരണം ആവശ്യമാണ്. നിങ്ങളുടെ പേയ്‌മെന്റ് അംഗീകരിക്കുന്നതിന് ഇനിപ്പറയുന്ന യുആർഎൽ സന്ദർശിക്കുക:" + authorization_required: + subject: "ഒരു പേയ്‌മെന്റിന് ഉപഭോക്താവിന്റെ അനുമതി ആവശ്യമാണ്" + message: "%{order_number} എന്ന ഓർഡറിന്റെ പേയ്‌മെന്റിന് ഉപഭോക്താവിൽ നിന്ന് അധിക അനുമതി ആവശ്യമാണ്. ഉപഭോക്താവിന് ഇമെയിൽ വഴി അറിയിപ്പ് ലഭിച്ചു, അത് അംഗീകരിക്കപ്പെടുന്നതുവരെ പേയ്‌മെന്റ് തീർച്ചപ്പെടുത്തിയിട്ടില്ലെന്ന് ദൃശ്യമാകും." producer_mailer: order_cycle: subject: "%{producer}-നുള്ള ഓർഡർ സൈക്കിൾ റിപ്പോർട്ട് " @@ -4349,13 +4356,6 @@ ml: subject: "പാസ്‌വേഡ് പുനഃസജ്ജമാക്കുന്നതിനുള്ള നിർദ്ദേശങ്ങൾ " confirmation_instructions: subject: "നിങ്ങളുടെ ഓഎഫ്എൻ അക്കൗണ്ട് സ്ഥിരീകരിക്കുക" - payment_mailer: - authorize_payment: - subject: "ഓഎഫ്എൻ-ൽ %{distributor} -ലേക്കുള്ള നിങ്ങളുടെ പേയ്‌മെന്റ് അംഗീകരിക്കുക" - instructions: "%{distributor} -ക്കുള്ള നിങ്ങളുടെ %{amount}പേയ്‌മെന്റിന് അധിക പ്രാമാണീകരണം ആവശ്യമാണ്. നിങ്ങളുടെ പേയ്‌മെന്റ് അംഗീകരിക്കുന്നതിന് ഇനിപ്പറയുന്ന യുആർഎൽ സന്ദർശിക്കുക:" - authorization_required: - subject: "ഒരു പേയ്‌മെന്റിന് ഉപഭോക്താവിന്റെ അനുമതി ആവശ്യമാണ്" - message: "%{order_number} എന്ന ഓർഡറിന്റെ പേയ്‌മെന്റിന് ഉപഭോക്താവിൽ നിന്ന് അധിക അനുമതി ആവശ്യമാണ്. ഉപഭോക്താവിന് ഇമെയിൽ വഴി അറിയിപ്പ് ലഭിച്ചു, അത് അംഗീകരിക്കപ്പെടുന്നതുവരെ പേയ്‌മെന്റ് തീർച്ചപ്പെടുത്തിയിട്ടില്ലെന്ന് ദൃശ്യമാകും." shipment_mailer: shipped_email: dear_customer: "പ്രിയ ഉപഭോക്താവേ," diff --git a/config/locales/mr.yml b/config/locales/mr.yml index 221c5ab168..569e936705 100644 --- a/config/locales/mr.yml +++ b/config/locales/mr.yml @@ -297,6 +297,12 @@ mr: join_community: "समुदायात सामील व्हा" invite_manager: subject: "%{enterprise} ने तुम्हाला व्यवस्थापक होण्यासाठी आमंत्रित केले आहे" + payment_mailer: + authorize_payment: + instructions: "तुमच्या %{amount} ते %{distributor} च्या पेमेंटसाठी अतिरिक्त प्रमाणीकरण आवश्यक आहे. तुमचे पेमेंट अधिकृत करण्यासाठी कृपया खालील URL ला भेट द्या:" + authorization_required: + subject: "पेमेंटसाठी ग्राहकाकडून प्रमाणीकरण आवश्यक आहे" + message: "ऑर्डर %{order_number} साठी पेमेंटसाठी ग्राहकाकडून अतिरिक्त प्रमाणीकरण आवश्यक आहे. ग्राहकाला ईमेलद्वारे सूचित केले गेले आहे आणि ते अधिकृत होईपर्यंत पेमेंट प्रलंबित म्हणून दिसून येईल." producer_mailer: order_cycle: subject: "%{producer} साठी सायकल अहवाल ऑर्डर करा" @@ -4217,13 +4223,6 @@ mr: subject: "पासवर्ड सूचना रीसेट करा" confirmation_instructions: subject: "कृपया तुमच्या OFN खात्याची पुष्टी करा" - payment_mailer: - authorize_payment: - subject: "कृपया तुमचे पेमेंट OFN वर %{distributor} वर अधिकृत करा" - instructions: "तुमच्या %{amount} ते %{distributor} च्या पेमेंटसाठी अतिरिक्त प्रमाणीकरण आवश्यक आहे. तुमचे पेमेंट अधिकृत करण्यासाठी कृपया खालील URL ला भेट द्या:" - authorization_required: - subject: "पेमेंटसाठी ग्राहकाकडून प्रमाणीकरण आवश्यक आहे" - message: "ऑर्डर %{order_number} साठी पेमेंटसाठी ग्राहकाकडून अतिरिक्त प्रमाणीकरण आवश्यक आहे. ग्राहकाला ईमेलद्वारे सूचित केले गेले आहे आणि ते अधिकृत होईपर्यंत पेमेंट प्रलंबित म्हणून दिसून येईल." shipment_mailer: shipped_email: dear_customer: "प्रिय ग्राहक," diff --git a/config/locales/nb.yml b/config/locales/nb.yml index 46db40815f..16ba7d558a 100644 --- a/config/locales/nb.yml +++ b/config/locales/nb.yml @@ -350,6 +350,13 @@ nb: join_community: "Bli med" invite_manager: subject: "%{enterprise} har invitert deg til å være en administrator" + payment_mailer: + authorize_payment: + subject: "Vennligst autoriser betalingen din til %{distributor} på OFN" + instructions: "Din betaling av %{amount} til %{distributor} krever ytterligere godkjenning. Gå til følgende URL for å godkjenne betalingen din:" + authorization_required: + subject: "En betaling krever autorisasjon fra kunden" + message: "En betaling for bestilling %{order_number} krever ytterligere autorisasjon fra kunden. Kunden har fått beskjed via epost og betalingen vil fremstå som ventende til den er autorisert." producer_mailer: order_cycle: subject: "Bestillingsrunderapport for %{producer}" @@ -4574,13 +4581,6 @@ nb: subject: "Tilbakestill passordinstruksjonene" confirmation_instructions: subject: "Vennligst bekreft OFN-kontoen din" - payment_mailer: - authorize_payment: - subject: "Vennligst autoriser betalingen din til %{distributor} på OFN" - instructions: "Din betaling av %{amount} til %{distributor} krever ytterligere godkjenning. Gå til følgende URL for å godkjenne betalingen din:" - authorization_required: - subject: "En betaling krever autorisasjon fra kunden" - message: "En betaling for bestilling %{order_number} krever ytterligere autorisasjon fra kunden. Kunden har fått beskjed via epost og betalingen vil fremstå som ventende til den er autorisert." shipment_mailer: shipped_email: dear_customer: "Kjære Kunde," diff --git a/config/locales/pa.yml b/config/locales/pa.yml index 9b07c1461c..b5d9ef90ff 100644 --- a/config/locales/pa.yml +++ b/config/locales/pa.yml @@ -290,6 +290,13 @@ pa: join_community: "ਭਾਈਚਾਰੇ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ" invite_manager: subject: "%{enterprise} ਨੇ ਤੁਹਾਨੂੰ ਪ੍ਰਬੰਧਕ ਬਣਨ ਲਈ ਸੱਦਾ ਦਿੱਤਾ ਹੈ" + payment_mailer: + authorize_payment: + subject: "ਕਿਰਪਾ ਕਰਕੇ OFN ਤੇ %{distributor} ਨੂੰ ਆਪਣਾ ਭੁਗਤਾਨ ਅਧਿਕਾਰਤ ਕਰੋ" + instructions: "%{distributor} ਨੂੰ %{amount} ਦੇ ਤੁਹਾਡੇ ਭੁਗਤਾਨ ਲਈ ਵਾਧੂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਲੋੜ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਭੁਗਤਾਨ ਨੂੰ ਅਧਿਕਾਰਤ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ URL ਉਤੇ ਜਾਓ:" + authorization_required: + subject: "ਭੁਗਤਾਨ ਲਈ ਗਾਹਕ ਤੋਂ ਅਧਿਕਾਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ" + message: "ਆਰਡਰ %{order_number} ਦੇ ਭੁਗਤਾਨ ਲਈ ਗਾਹਕ ਤੋਂ ਵਾਧੂ ਅਧਿਕਾਰ ਦੀ ਲੋੜ ਹੈ। ਗਾਹਕ ਨੂੰ ਈਮੇਲ ਰਾਹੀਂ ਸੂਚਿਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਜਦੋਂ ਤੱਕ ਇਹ ਅਧਿਕਾਰਤ ਨਹੀਂ ਹੋ ਜਾਂਦਾ, ਭੁਗਤਾਨ ਬਕਾਏ ਵਜੋਂ ਵਿਖਾਈ ਦੇਵੇਗਾ।" producer_mailer: order_cycle: subject: "%{producer} ਲਈ ਆਰਡਰ ਸਾਈਕਲ ਰਿਪੋਰਟ" @@ -4216,13 +4223,6 @@ pa: subject: "ਪਾਸਵਰਡ ਰੀਸੈਟ ਕਰਨ ਦੀਆਂ ਹਦਾਇਤਾਂ" confirmation_instructions: subject: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ OFN ਖਾਤੇ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ" - payment_mailer: - authorize_payment: - subject: "ਕਿਰਪਾ ਕਰਕੇ OFN ਤੇ %{distributor} ਨੂੰ ਆਪਣਾ ਭੁਗਤਾਨ ਅਧਿਕਾਰਤ ਕਰੋ" - instructions: "%{distributor} ਨੂੰ %{amount} ਦੇ ਤੁਹਾਡੇ ਭੁਗਤਾਨ ਲਈ ਵਾਧੂ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਲੋੜ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਭੁਗਤਾਨ ਨੂੰ ਅਧਿਕਾਰਤ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤੇ URL ਉਤੇ ਜਾਓ:" - authorization_required: - subject: "ਭੁਗਤਾਨ ਲਈ ਗਾਹਕ ਤੋਂ ਅਧਿਕਾਰ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ" - message: "ਆਰਡਰ %{order_number} ਦੇ ਭੁਗਤਾਨ ਲਈ ਗਾਹਕ ਤੋਂ ਵਾਧੂ ਅਧਿਕਾਰ ਦੀ ਲੋੜ ਹੈ। ਗਾਹਕ ਨੂੰ ਈਮੇਲ ਰਾਹੀਂ ਸੂਚਿਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਜਦੋਂ ਤੱਕ ਇਹ ਅਧਿਕਾਰਤ ਨਹੀਂ ਹੋ ਜਾਂਦਾ, ਭੁਗਤਾਨ ਬਕਾਏ ਵਜੋਂ ਵਿਖਾਈ ਦੇਵੇਗਾ।" shipment_mailer: shipped_email: dear_customer: "ਪਿਆਰੇ ਗਾਹਕ," diff --git a/config/locales/pt_BR.yml b/config/locales/pt_BR.yml index feb00a849b..0a4b79bdb5 100644 --- a/config/locales/pt_BR.yml +++ b/config/locales/pt_BR.yml @@ -186,6 +186,13 @@ pt_BR: join_community: "Faça parte da comunidade" invite_manager: subject: "%{enterprise}convidou você para ser um gerente" + payment_mailer: + authorize_payment: + subject: "Favor autorizar seu pagamento para %{distributor}na Ajunta" + instructions: "Seu pagamento de %{amount}para %{distributor}necessita uma autenticação adicional. Favor visitar o seguinte endereço URL para autorizar o seu pagamento:" + authorization_required: + subject: "Um pagamento requer autorização do comprador" + message: "Um pagamento para o pedido %{order_number}requer uma autorização adicional por parte do comprador. O comprador foi notificado via email e o pagamento irá aparecer como pendente até que seja autorizado. " producer_mailer: order_cycle: subject: "Relatório de ciclo de pedidos para%{producer}" @@ -3862,13 +3869,6 @@ pt_BR: subject: "Instruções para redefinição de senha" confirmation_instructions: subject: "Confirme sua conta na Ajunta" - payment_mailer: - authorize_payment: - subject: "Favor autorizar seu pagamento para %{distributor}na Ajunta" - instructions: "Seu pagamento de %{amount}para %{distributor}necessita uma autenticação adicional. Favor visitar o seguinte endereço URL para autorizar o seu pagamento:" - authorization_required: - subject: "Um pagamento requer autorização do comprador" - message: "Um pagamento para o pedido %{order_number}requer uma autorização adicional por parte do comprador. O comprador foi notificado via email e o pagamento irá aparecer como pendente até que seja autorizado. " shipment_mailer: shipped_email: dear_customer: "Estimado cliente," diff --git a/config/locales/ru.yml b/config/locales/ru.yml index e0b2e1a2e7..b76cbe2b93 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -302,6 +302,13 @@ ru: join_community: "Присоединяйтесь к сообществу" invite_manager: subject: "%{enterprise} пригласил Вас стать менеджером" + payment_mailer: + authorize_payment: + subject: "Авторизуйте платеж на адрес %{distributor} в ОСП" + instructions: "Ваш платеж %{amount} на %{distributor} требует дополнительной аутентификации. Перейдите по следующему URL-адресу, чтобы авторизовать платеж:" + authorization_required: + subject: "Платеж требует согласия клиента" + message: "Для оплаты заказа %{order_number} требуется дополнительное согласие со стороны покупателя. Клиент был уведомлен по электронной почте и платеж будет отображаться как ожидающий, пока он не будет подтвержден." producer_mailer: order_cycle: subject: "Отчет по Циклу Заказа для %{producer}" @@ -4462,13 +4469,6 @@ ru: subject: "Инструкции по сбросу пароля" confirmation_instructions: subject: "Пожалуйста, подтвердите Вашу ОСП учетную запись" - payment_mailer: - authorize_payment: - subject: "Авторизуйте платеж на адрес %{distributor} в ОСП" - instructions: "Ваш платеж %{amount} на %{distributor} требует дополнительной аутентификации. Перейдите по следующему URL-адресу, чтобы авторизовать платеж:" - authorization_required: - subject: "Платеж требует согласия клиента" - message: "Для оплаты заказа %{order_number} требуется дополнительное согласие со стороны покупателя. Клиент был уведомлен по электронной почте и платеж будет отображаться как ожидающий, пока он не будет подтвержден." shipment_mailer: shipped_email: dear_customer: "Уважаемый Клиент," diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 5a354c3104..658e90c50d 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -4510,13 +4510,6 @@ sr: subject: "Ресетујте упутства за лозинку" confirmation_instructions: subject: "Потврдите свој ОФН налог" - payment_mailer: - authorize_payment: - subject: "Овластите своју уплату на %{distributor} на ОФН-у" - instructions: "Ваша уплата %{amount} за %{distributor} захтева додатну аутентификацију. Посетите следећу УРЛ адресу да бисте ауторизовали своју уплату:" - authorization_required: - subject: "За плаћање је потребно овлашћење купца" - message: "За плаћање наруџбе %{order_number} потребно је додатно овлашћење купца. Купац је обавештен путем е-поште и плаћање ће се појавити као на чекању док се не овласти." shipment_mailer: shipped_email: dear_customer: "Драги купац," diff --git a/config/locales/tr.yml b/config/locales/tr.yml index dde545e16f..c9daf42de4 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -185,6 +185,13 @@ tr: join_community: "Topluluğa katılın !" invite_manager: subject: "%{enterprise} sizi yönetici olmaya davet etti" + payment_mailer: + authorize_payment: + subject: "Lütfen ödemenizi AGA'da %{distributor}dağıtımcısına yetkilendirin." + instructions: "%{distributor}Dağıtımcısına olan %{amount}ödemeniz detaylandırma gerektiriyor. Lütfen ödemenizi yetkilendirmek için bu URL'ye gidin:" + authorization_required: + subject: "Ödeme için müşterinin yetkilendirmesi gerekiyor. " + message: "%{order_number}siparişinin ödemesi için müşterinin ek yetkilendirmesi gerekiyor. Müşteri maille bilgilendirildi, ödeme yetkilendirilene kadar 'bekliyor' olarak görünecek. " producer_mailer: order_cycle: subject: "%{producer} için sipariş dönemi raporu" @@ -3892,13 +3899,6 @@ tr: subject: "Şifre talimatlarını sıfırla" confirmation_instructions: subject: "Lütfen AGA hesabınızı onaylayın" - payment_mailer: - authorize_payment: - subject: "Lütfen ödemenizi AGA'da %{distributor}dağıtımcısına yetkilendirin." - instructions: "%{distributor}Dağıtımcısına olan %{amount}ödemeniz detaylandırma gerektiriyor. Lütfen ödemenizi yetkilendirmek için bu URL'ye gidin:" - authorization_required: - subject: "Ödeme için müşterinin yetkilendirmesi gerekiyor. " - message: "%{order_number}siparişinin ödemesi için müşterinin ek yetkilendirmesi gerekiyor. Müşteri maille bilgilendirildi, ödeme yetkilendirilene kadar 'bekliyor' olarak görünecek. " shipment_mailer: shipped_email: dear_customer: "Değerli Müşterimiz," diff --git a/config/locales/uk.yml b/config/locales/uk.yml index f46c534e9f..1377230fda 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -246,6 +246,13 @@ uk: join_community: "Приєднуйтесь до спільноти" invite_manager: subject: "%{enterprise} запросив вас стати менеджером" + payment_mailer: + authorize_payment: + subject: "Авторизуйте свій платіж на %{distributor} на OFN" + instructions: "Ваш платіж %{amount} на адресу %{distributor} вимагає додаткової автентифікації. Перейдіть за такою URL-адресою, щоб авторизувати свій платіж:" + authorization_required: + subject: "Платіж потребує авторизації клієнта" + message: "Оплата замовлення %{order_number} потребує додаткової авторизації від клієнта. Клієнта було сповіщено електронною поштою, і платіж відображатиметься як очікуваний, доки його не буде авторизовано." producer_mailer: order_cycle: subject: "Замовити циклічний звіт для %{producer}" @@ -4106,13 +4113,6 @@ uk: subject: "Інструкції щодо скидання пароля" confirmation_instructions: subject: "Будь ласка, підтвердьте свій обліковий запис OFN" - payment_mailer: - authorize_payment: - subject: "Авторизуйте свій платіж на %{distributor} на OFN" - instructions: "Ваш платіж %{amount} на адресу %{distributor} вимагає додаткової автентифікації. Перейдіть за такою URL-адресою, щоб авторизувати свій платіж:" - authorization_required: - subject: "Платіж потребує авторизації клієнта" - message: "Оплата замовлення %{order_number} потребує додаткової авторизації від клієнта. Клієнта було сповіщено електронною поштою, і платіж відображатиметься як очікуваний, доки його не буде авторизовано." shipment_mailer: shipped_email: dear_customer: "Дорогий клієнт," From 708dbb22709e22cb2ceeb69a6ac615e818128dc5 Mon Sep 17 00:00:00 2001 From: David Thomas Date: Thu, 26 Feb 2026 15:33:37 -0500 Subject: [PATCH 266/270] Regenerate Rubocop's TODO file --- .rubocop_todo.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 130d414236..e2d6ddbe75 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400 --no-auto-gen-timestamp` -# using RuboCop version 1.81.7. +# using RuboCop version 1.84.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -35,6 +35,7 @@ Lint/UselessConstantScoping: - 'lib/reporting/report_metadata_builder.rb' # Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). Lint/UselessOr: Exclude: - 'app/models/product_import/entry_validator.rb' @@ -62,14 +63,13 @@ Metrics/AbcSize: - 'lib/spree/core/controller_helpers/order.rb' - 'spec/services/orders/checkout_restart_service_spec.rb' -# Offense count: 9 +# Offense count: 7 # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode. # AllowedMethods: refine Metrics/BlockLength: Exclude: - 'app/models/spree/order/checkout.rb' - 'app/models/spree/payment.rb' - - 'app/models/spree/payment/processing.rb' - 'app/models/spree/shipment.rb' - 'lib/spree/core/controller_helpers/common.rb' - 'lib/tasks/data.rake' @@ -168,7 +168,7 @@ Metrics/CyclomaticComplexity: - 'lib/spree/localized_number.rb' - 'spec/models/product_importer_spec.rb' -# Offense count: 22 +# Offense count: 20 # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Exclude: @@ -178,7 +178,6 @@ Metrics/MethodLength: - 'app/models/spree/ability.rb' - 'app/models/spree/gateway/pay_pal_express.rb' - 'app/models/spree/order/checkout.rb' - - 'app/models/spree/payment/processing.rb' - 'app/models/spree/preferences/preferable_class_methods.rb' - 'lib/open_food_network/order_cycle_form_applicator.rb' - 'lib/open_food_network/order_cycle_permissions.rb' @@ -238,7 +237,7 @@ Naming/MethodParameterName: # Offense count: 60 # Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates. # AllowedMethods: call -# WaywardPredicates: nonzero? +# WaywardPredicates: infinite?, nonzero? Naming/PredicateMethod: Exclude: - 'app/controllers/admin/product_import_controller.rb' @@ -345,7 +344,6 @@ Rails/Presence: # Offense count: 6 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Severity. Rails/RedirectBackOrTo: Exclude: - 'app/controllers/admin/order_cycles_controller.rb' From 18869979db93636abc3035ec04aacec25f7c8a69 Mon Sep 17 00:00:00 2001 From: David Thomas Date: Thu, 26 Feb 2026 15:34:45 -0500 Subject: [PATCH 267/270] Safely autocorrect Rails/Presence Inspecting 1721 files ...................................C.................................................................................................................................................................................................................................................................................................................................................C................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Offenses: app/controllers/admin/enterprises_controller.rb:180:7: C: [Corrected] Rails/Presence: Use @object.custom_tab.presence&.destroy instead of @object.custom_tab.destroy if @object.custom_tab.present?. @object.custom_tab.destroy if @object.custom_tab.present? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/controllers/admin/enterprises_controller.rb:243:9: C: [Corrected] Rails/Presence: Use (enterprises.presence&.includes(supplied_products: [:variants, :image])) instead of if enterprises.present? ... end. if enterprises.present? ... ^^^^^^^^^^^^^^^^^^^^^^^ app/controllers/admin/enterprises_controller.rb:243:9: C: [Corrected] Style/RedundantParentheses: Don't use parentheses around a method call. (enterprises.presence&.includes(supplied_products: [:variants, :image])) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/spree/product.rb:298:7: C: [Corrected] Rails/Presence: Use (first_variant.supplier.presence&.touch) instead of first_variant.supplier.touch if first_variant.supplier.present?. first_variant.supplier.touch if first_variant.supplier.present? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/spree/product.rb:298:7: C: [Corrected] Style/RedundantParentheses: Don't use parentheses around a method call. (first_variant.supplier.presence&.touch) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1721 files inspected, 5 offenses detected, 5 offenses corrected --- .rubocop_todo.yml | 7 ------- app/controllers/admin/enterprises_controller.rb | 6 ++---- app/models/spree/product.rb | 2 +- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index e2d6ddbe75..e41f3f6231 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -335,13 +335,6 @@ Rails/OrderArguments: - 'spec/services/orders/generate_invoice_service_spec.rb' - 'spec/system/admin/order_cycles/simple_spec.rb' -# Offense count: 3 -# This cop supports safe autocorrection (--autocorrect). -Rails/Presence: - Exclude: - - 'app/controllers/admin/enterprises_controller.rb' - - 'app/models/spree/product.rb' - # Offense count: 6 # This cop supports safe autocorrection (--autocorrect). Rails/RedirectBackOrTo: diff --git a/app/controllers/admin/enterprises_controller.rb b/app/controllers/admin/enterprises_controller.rb index de96364445..5d13ec0883 100644 --- a/app/controllers/admin/enterprises_controller.rb +++ b/app/controllers/admin/enterprises_controller.rb @@ -177,7 +177,7 @@ module Admin protected def delete_custom_tab - @object.custom_tab.destroy if @object.custom_tab.present? + @object.custom_tab.presence&.destroy enterprise_params.delete(:custom_tab_attributes) end @@ -240,9 +240,7 @@ module Admin enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, @order_cycle) .visible_enterprises - if enterprises.present? - enterprises.includes(supplied_products: [:variants, :image]) - end + enterprises.presence&.includes(supplied_products: [:variants, :image]) when :index if spree_current_user.admin? OpenFoodNetwork::Permissions.new(spree_current_user). diff --git a/app/models/spree/product.rb b/app/models/spree/product.rb index e077af407b..f3cf46aeda 100755 --- a/app/models/spree/product.rb +++ b/app/models/spree/product.rb @@ -295,7 +295,7 @@ module Spree # The variant is invalid if no supplier is present, but this method can be triggered when # importing product. In this scenario the variant has not been updated with the supplier yet # hence the check. - first_variant.supplier.touch if first_variant.supplier.present? + first_variant.supplier.presence&.touch end def validate_image From 2808a41f0d95c01e470deb65d0750e0a40ca23ca Mon Sep 17 00:00:00 2001 From: David Thomas Date: Thu, 26 Feb 2026 15:35:55 -0500 Subject: [PATCH 268/270] Safely autocorrect Rails/RedirectBackOrTo Inspecting 1721 files ........................................W...................................................................W................W..W.......W................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ Offenses: app/controllers/admin/order_cycles_controller.rb:212:9: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. redirect_back(fallback_location: root_path) ^^^^^^^^^^^^^ app/controllers/locales_controller.rb:6:5: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. redirect_back fallback_location: main_app.root_url ^^^^^^^^^^^^^ app/controllers/spree/admin/invoices_controller.rb:31:9: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. redirect_back(fallback_location: spree.admin_dashboard_path) ^^^^^^^^^^^^^ app/controllers/spree/admin/orders_controller.rb:83:9: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. redirect_back fallback_location: spree.admin_dashboard_path ^^^^^^^^^^^^^ app/controllers/spree/admin/orders_controller.rb:91:25: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. format.html { redirect_back(fallback_location: spree.admin_dashboard_path) } ^^^^^^^^^^^^^ app/controllers/spree/admin/return_authorizations_controller.rb:13:9: W: [Corrected] Rails/RedirectBackOrTo: Use redirect_back_or_to instead of redirect_back with :fallback_location keyword argument. redirect_back fallback_location: spree.admin_dashboard_path ^^^^^^^^^^^^^ 1721 files inspected, 6 offenses detected, 6 offenses corrected --- .rubocop_todo.yml | 10 ---------- app/controllers/admin/order_cycles_controller.rb | 2 +- app/controllers/locales_controller.rb | 2 +- app/controllers/spree/admin/invoices_controller.rb | 2 +- app/controllers/spree/admin/orders_controller.rb | 4 ++-- .../spree/admin/return_authorizations_controller.rb | 2 +- 6 files changed, 6 insertions(+), 16 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index e41f3f6231..5acf4e85e0 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -335,16 +335,6 @@ Rails/OrderArguments: - 'spec/services/orders/generate_invoice_service_spec.rb' - 'spec/system/admin/order_cycles/simple_spec.rb' -# Offense count: 6 -# This cop supports safe autocorrection (--autocorrect). -Rails/RedirectBackOrTo: - Exclude: - - 'app/controllers/admin/order_cycles_controller.rb' - - 'app/controllers/locales_controller.rb' - - 'app/controllers/spree/admin/invoices_controller.rb' - - 'app/controllers/spree/admin/orders_controller.rb' - - 'app/controllers/spree/admin/return_authorizations_controller.rb' - # Offense count: 1 # Configuration parameters: TransactionMethods. Rails/TransactionExitStatement: diff --git a/app/controllers/admin/order_cycles_controller.rb b/app/controllers/admin/order_cycles_controller.rb index 12a3a9fe5c..cec001aa4e 100644 --- a/app/controllers/admin/order_cycles_controller.rb +++ b/app/controllers/admin/order_cycles_controller.rb @@ -209,7 +209,7 @@ module Admin elsif params[:context] == "checkout_options" && params[:save_and_back_to_list] redirect_to main_app.admin_order_cycles_path else - redirect_back(fallback_location: root_path) + redirect_back_or_to(root_path) end end diff --git a/app/controllers/locales_controller.rb b/app/controllers/locales_controller.rb index bb18748a5d..238ef068c9 100644 --- a/app/controllers/locales_controller.rb +++ b/app/controllers/locales_controller.rb @@ -3,6 +3,6 @@ class LocalesController < BaseController def show UserLocaleSetter.new(spree_current_user, params[:id], cookies).set_locale - redirect_back fallback_location: main_app.root_url + redirect_back_or_to(main_app.root_url) end end diff --git a/app/controllers/spree/admin/invoices_controller.rb b/app/controllers/spree/admin/invoices_controller.rb index 91d637affd..ff3762f163 100644 --- a/app/controllers/spree/admin/invoices_controller.rb +++ b/app/controllers/spree/admin/invoices_controller.rb @@ -28,7 +28,7 @@ module Spree flash[:error] = t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) end - redirect_back(fallback_location: spree.admin_dashboard_path) + redirect_back_or_to(spree.admin_dashboard_path) end private diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index b02ff61825..c7ef293d87 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -80,7 +80,7 @@ module Spree rescue Spree::Core::GatewayError => e flash[:error] = e.message.to_s ensure - redirect_back fallback_location: spree.admin_dashboard_path + redirect_back_or_to(spree.admin_dashboard_path) end def resend @@ -88,7 +88,7 @@ module Spree flash[:success] = t('admin.orders.order_email_resent') respond_with(@order) do |format| - format.html { redirect_back(fallback_location: spree.admin_dashboard_path) } + format.html { redirect_back_or_to(spree.admin_dashboard_path) } end end diff --git a/app/controllers/spree/admin/return_authorizations_controller.rb b/app/controllers/spree/admin/return_authorizations_controller.rb index 9e1d241559..6e462a23ec 100644 --- a/app/controllers/spree/admin/return_authorizations_controller.rb +++ b/app/controllers/spree/admin/return_authorizations_controller.rb @@ -10,7 +10,7 @@ module Spree def fire @return_authorization.public_send("#{params[:e]}!") flash[:success] = Spree.t(:return_authorization_updated) - redirect_back fallback_location: spree.admin_dashboard_path + redirect_back_or_to(spree.admin_dashboard_path) end protected From 7922bf7b65ed43df253eaa883e8cb1bb7abbda86 Mon Sep 17 00:00:00 2001 From: David-OFN-CA <81435133+David-OFN-CA@users.noreply.github.com> Date: Thu, 26 Feb 2026 17:04:21 -0500 Subject: [PATCH 269/270] Revert "Fix 9 Rubocop violations (Rails/Presence and Rails/RedirectBackOrTo)Fix rubocop violations" --- .rubocop_todo.yml | 29 +++++++++++++++---- .../admin/enterprises_controller.rb | 6 ++-- .../admin/order_cycles_controller.rb | 2 +- app/controllers/locales_controller.rb | 2 +- .../spree/admin/invoices_controller.rb | 2 +- .../spree/admin/orders_controller.rb | 4 +-- .../admin/return_authorizations_controller.rb | 2 +- app/models/spree/product.rb | 2 +- 8 files changed, 35 insertions(+), 14 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 5acf4e85e0..130d414236 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400 --no-auto-gen-timestamp` -# using RuboCop version 1.84.2. +# using RuboCop version 1.81.7. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -35,7 +35,6 @@ Lint/UselessConstantScoping: - 'lib/reporting/report_metadata_builder.rb' # Offense count: 1 -# This cop supports unsafe autocorrection (--autocorrect-all). Lint/UselessOr: Exclude: - 'app/models/product_import/entry_validator.rb' @@ -63,13 +62,14 @@ Metrics/AbcSize: - 'lib/spree/core/controller_helpers/order.rb' - 'spec/services/orders/checkout_restart_service_spec.rb' -# Offense count: 7 +# Offense count: 9 # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode. # AllowedMethods: refine Metrics/BlockLength: Exclude: - 'app/models/spree/order/checkout.rb' - 'app/models/spree/payment.rb' + - 'app/models/spree/payment/processing.rb' - 'app/models/spree/shipment.rb' - 'lib/spree/core/controller_helpers/common.rb' - 'lib/tasks/data.rake' @@ -168,7 +168,7 @@ Metrics/CyclomaticComplexity: - 'lib/spree/localized_number.rb' - 'spec/models/product_importer_spec.rb' -# Offense count: 20 +# Offense count: 22 # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Exclude: @@ -178,6 +178,7 @@ Metrics/MethodLength: - 'app/models/spree/ability.rb' - 'app/models/spree/gateway/pay_pal_express.rb' - 'app/models/spree/order/checkout.rb' + - 'app/models/spree/payment/processing.rb' - 'app/models/spree/preferences/preferable_class_methods.rb' - 'lib/open_food_network/order_cycle_form_applicator.rb' - 'lib/open_food_network/order_cycle_permissions.rb' @@ -237,7 +238,7 @@ Naming/MethodParameterName: # Offense count: 60 # Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates. # AllowedMethods: call -# WaywardPredicates: infinite?, nonzero? +# WaywardPredicates: nonzero? Naming/PredicateMethod: Exclude: - 'app/controllers/admin/product_import_controller.rb' @@ -335,6 +336,24 @@ Rails/OrderArguments: - 'spec/services/orders/generate_invoice_service_spec.rb' - 'spec/system/admin/order_cycles/simple_spec.rb' +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +Rails/Presence: + Exclude: + - 'app/controllers/admin/enterprises_controller.rb' + - 'app/models/spree/product.rb' + +# Offense count: 6 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: Severity. +Rails/RedirectBackOrTo: + Exclude: + - 'app/controllers/admin/order_cycles_controller.rb' + - 'app/controllers/locales_controller.rb' + - 'app/controllers/spree/admin/invoices_controller.rb' + - 'app/controllers/spree/admin/orders_controller.rb' + - 'app/controllers/spree/admin/return_authorizations_controller.rb' + # Offense count: 1 # Configuration parameters: TransactionMethods. Rails/TransactionExitStatement: diff --git a/app/controllers/admin/enterprises_controller.rb b/app/controllers/admin/enterprises_controller.rb index 5d13ec0883..de96364445 100644 --- a/app/controllers/admin/enterprises_controller.rb +++ b/app/controllers/admin/enterprises_controller.rb @@ -177,7 +177,7 @@ module Admin protected def delete_custom_tab - @object.custom_tab.presence&.destroy + @object.custom_tab.destroy if @object.custom_tab.present? enterprise_params.delete(:custom_tab_attributes) end @@ -240,7 +240,9 @@ module Admin enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, @order_cycle) .visible_enterprises - enterprises.presence&.includes(supplied_products: [:variants, :image]) + if enterprises.present? + enterprises.includes(supplied_products: [:variants, :image]) + end when :index if spree_current_user.admin? OpenFoodNetwork::Permissions.new(spree_current_user). diff --git a/app/controllers/admin/order_cycles_controller.rb b/app/controllers/admin/order_cycles_controller.rb index cec001aa4e..12a3a9fe5c 100644 --- a/app/controllers/admin/order_cycles_controller.rb +++ b/app/controllers/admin/order_cycles_controller.rb @@ -209,7 +209,7 @@ module Admin elsif params[:context] == "checkout_options" && params[:save_and_back_to_list] redirect_to main_app.admin_order_cycles_path else - redirect_back_or_to(root_path) + redirect_back(fallback_location: root_path) end end diff --git a/app/controllers/locales_controller.rb b/app/controllers/locales_controller.rb index 238ef068c9..bb18748a5d 100644 --- a/app/controllers/locales_controller.rb +++ b/app/controllers/locales_controller.rb @@ -3,6 +3,6 @@ class LocalesController < BaseController def show UserLocaleSetter.new(spree_current_user, params[:id], cookies).set_locale - redirect_back_or_to(main_app.root_url) + redirect_back fallback_location: main_app.root_url end end diff --git a/app/controllers/spree/admin/invoices_controller.rb b/app/controllers/spree/admin/invoices_controller.rb index ff3762f163..91d637affd 100644 --- a/app/controllers/spree/admin/invoices_controller.rb +++ b/app/controllers/spree/admin/invoices_controller.rb @@ -28,7 +28,7 @@ module Spree flash[:error] = t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) end - redirect_back_or_to(spree.admin_dashboard_path) + redirect_back(fallback_location: spree.admin_dashboard_path) end private diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index c7ef293d87..b02ff61825 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -80,7 +80,7 @@ module Spree rescue Spree::Core::GatewayError => e flash[:error] = e.message.to_s ensure - redirect_back_or_to(spree.admin_dashboard_path) + redirect_back fallback_location: spree.admin_dashboard_path end def resend @@ -88,7 +88,7 @@ module Spree flash[:success] = t('admin.orders.order_email_resent') respond_with(@order) do |format| - format.html { redirect_back_or_to(spree.admin_dashboard_path) } + format.html { redirect_back(fallback_location: spree.admin_dashboard_path) } end end diff --git a/app/controllers/spree/admin/return_authorizations_controller.rb b/app/controllers/spree/admin/return_authorizations_controller.rb index 6e462a23ec..9e1d241559 100644 --- a/app/controllers/spree/admin/return_authorizations_controller.rb +++ b/app/controllers/spree/admin/return_authorizations_controller.rb @@ -10,7 +10,7 @@ module Spree def fire @return_authorization.public_send("#{params[:e]}!") flash[:success] = Spree.t(:return_authorization_updated) - redirect_back_or_to(spree.admin_dashboard_path) + redirect_back fallback_location: spree.admin_dashboard_path end protected diff --git a/app/models/spree/product.rb b/app/models/spree/product.rb index f3cf46aeda..e077af407b 100755 --- a/app/models/spree/product.rb +++ b/app/models/spree/product.rb @@ -295,7 +295,7 @@ module Spree # The variant is invalid if no supplier is present, but this method can be triggered when # importing product. In this scenario the variant has not been updated with the supplier yet # hence the check. - first_variant.supplier.presence&.touch + first_variant.supplier.touch if first_variant.supplier.present? end def validate_image From ef7bd083edfdc62d72f493d751f55317d1ff9ef2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:02:06 +0000 Subject: [PATCH 270/270] Bump minimatch from 3.1.2 to 3.1.5 Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5. - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5) --- updated-dependencies: - dependency-name: minimatch dependency-version: 3.1.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index bdfbd59404..c9f68d100f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2763,7 +2763,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: +brace-expansion@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== @@ -5138,18 +5138,18 @@ minimalistic-assert@^1.0.0: integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^2.0.2" minimist@^1.2.6: version "1.2.8"