diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93d789e3709..09301382d73 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -62,6 +62,10 @@ jobs: timeout-minutes: 20 env: RUBY_YJIT_ENABLE: "1" + API_BASEROW_URL: "https://api.baserow.io" + API_BASEROW_TOKEN: ${{ secrets.API_BASEROW_TOKEN }} + API_BASEROW_USER: ${{ secrets.API_BASEROW_USER }} + API_BASEROW_CONFIG_TABLE: "202600" services: postgres: image: postgis/postgis:14-3.3 @@ -125,6 +129,10 @@ jobs: timeout-minutes: 20 env: RUBY_YJIT_ENABLE: "1" + API_BASEROW_URL: "https://api.baserow.io" + API_BASEROW_TOKEN: ${{ secrets.API_BASEROW_TOKEN }} + API_BASEROW_USER: ${{ secrets.API_BASEROW_USER }} + API_BASEROW_CONFIG_TABLE: "202600" services: postgres: image: postgis/postgis:14-3.3 diff --git a/Dockerfile b/Dockerfile index bb95567f1c9..3f0950c8a85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -203,7 +203,9 @@ ENV \ WATERMARK_FILE="watermark_pf.png"\ WEASYPRINT_URL="http://weasyprint:5000/pdf"\ YAHOO_CLIENT_ID=""\ - YAHOO_CLIENT_SECRET="" + YAHOO_CLIENT_SECRET=""\ + API_BASEROW_URL="https://api.baserow.io"\ + API_BASEROW_CONFIG_TABLE="202600" COPY --chown=userapp:userapp . ${APP_PATH} RUN rm -fr .git diff --git a/app/graphql/api/v2/schema.rb b/app/graphql/api/v2/schema.rb index 7ea4970f132..6758dd4ccf1 100644 --- a/app/graphql/api/v2/schema.rb +++ b/app/graphql/api/v2/schema.rb @@ -79,6 +79,7 @@ def self.resolve_type(type_definition, object, ctx) Types::Champs::TextChampType, Types::Champs::TitreIdentiteChampType, Types::Champs::VisaChampType, + Types::Champs::ReferentielDePolynesieChampType, Types::Champs::EngagementJuridiqueChampType, Types::GeoAreas::ParcelleCadastraleType, Types::GeoAreas::SelectionUtilisateurType, @@ -128,6 +129,7 @@ def self.resolve_type(type_definition, object, ctx) Types::Champs::Descriptor::TextChampDescriptorType, Types::Champs::Descriptor::TitreIdentiteChampDescriptorType, Types::Champs::Descriptor::VisaChampDescriptorType, + Types::Champs::Descriptor::ReferentielDePolynesieChampDescriptorType, Types::Champs::Descriptor::YesNoChampDescriptorType, Types::Champs::Descriptor::ExpressionReguliereChampDescriptorType, Types::Champs::Descriptor::EngagementJuridiqueChampDescriptorType diff --git a/app/graphql/schema.graphql b/app/graphql/schema.graphql index 131c8effca3..3fff1bab209 100644 --- a/app/graphql/schema.graphql +++ b/app/graphql/schema.graphql @@ -4187,6 +4187,60 @@ type RNFChampDescriptor implements ChampDescriptor { type: TypeDeChamp! @deprecated(reason: "Utilisez le champ `__typename` à la place.") } +type ReferentielDePolynesieChamp implements Champ { + """ + L'identifiant du champDescriptor de ce champ + """ + champDescriptorId: String! + id: ID! + + """ + Libellé du champ. + """ + label: String! + prefilled: Boolean! + searchField: String + + """ + La valeur du champ sous forme texte. + """ + stringValue: String + tableId: ID + + """ + Date de dernière modification du champ. + """ + updatedAt: ISO8601DateTime! +} + +type ReferentielDePolynesieChampDescriptor implements ChampDescriptor { + """ + Description des champs d’un bloc répétable. + """ + champDescriptors: [ChampDescriptor!] @deprecated(reason: "Utilisez le champ `RepetitionChampDescriptor.champ_descriptors` à la place.") + + """ + Description du champ. + """ + description: String + id: ID! + + """ + Libellé du champ. + """ + label: String! + + """ + Est-ce que le champ est obligatoire ? + """ + required: Boolean! + + """ + Type de la valeur du champ. + """ + type: TypeDeChamp! @deprecated(reason: "Utilisez le champ `__typename` à la place.") +} + type Region { code: String! name: String! @@ -4793,6 +4847,11 @@ enum TypeDeChamp { """ pole_emploi + """ + Référentiel de Polynésie + """ + referentiel_de_polynesie + """ Régions """ diff --git a/app/graphql/types/champ_descriptor_type.rb b/app/graphql/types/champ_descriptor_type.rb index 803ca17d8ac..650883a940b 100644 --- a/app/graphql/types/champ_descriptor_type.rb +++ b/app/graphql/types/champ_descriptor_type.rb @@ -35,6 +35,8 @@ def resolve_type(object, context) Types::Champs::Descriptor::TeFenuaChampDescriptorType when TypeDeChamp.type_champs.fetch(:visa) Types::Champs::Descriptor::VisaChampDescriptorType + when TypeDeChamp.type_champs.fetch(:referentiel_de_polynesie) + Types::Champs::Descriptor::ReferentielDePolynesieChampDescriptorType # ----- DS champs when TypeDeChamp.type_champs.fetch(:engagement_juridique) diff --git a/app/graphql/types/champ_type.rb b/app/graphql/types/champ_type.rb index 642f73c418b..26603a4681b 100644 --- a/app/graphql/types/champ_type.rb +++ b/app/graphql/types/champ_type.rb @@ -90,6 +90,8 @@ def resolve_type(object, context) Types::Champs::TitreIdentiteChampType when ::Champs::VisaChamp Types::Champs::VisaChampType + when ::Champs::ReferentielDePolynesieChamp + Types::Champs::ReferentielDePolynesieChampType when ::Champs::EpciChamp Types::Champs::EpciChampType when ::Champs::RNAChamp diff --git a/app/graphql/types/champs/descriptor/referentiel_de_polynesie_champ_descriptor_type.rb b/app/graphql/types/champs/descriptor/referentiel_de_polynesie_champ_descriptor_type.rb new file mode 100644 index 00000000000..22b3fd07a5f --- /dev/null +++ b/app/graphql/types/champs/descriptor/referentiel_de_polynesie_champ_descriptor_type.rb @@ -0,0 +1,5 @@ +module Types::Champs::Descriptor + class ReferentielDePolynesieChampDescriptorType < Types::BaseObject + implements Types::ChampDescriptorType + end +end diff --git a/app/graphql/types/champs/referentiel_de_polynesie_champ_type.rb b/app/graphql/types/champs/referentiel_de_polynesie_champ_type.rb new file mode 100644 index 00000000000..332d99cdf0b --- /dev/null +++ b/app/graphql/types/champs/referentiel_de_polynesie_champ_type.rb @@ -0,0 +1,8 @@ +module Types::Champs + class ReferentielDePolynesieChampType < Types::BaseObject + implements Types::ChampType + + field :table_id, ID, null: true + field :search_field, String, null: true + end +end diff --git a/app/lib/referentiel_de_polynesie/api.rb b/app/lib/referentiel_de_polynesie/api.rb index 89f78bc9bc0..5fdc6582572 100644 --- a/app/lib/referentiel_de_polynesie/api.rb +++ b/app/lib/referentiel_de_polynesie/api.rb @@ -3,16 +3,16 @@ class ReferentielDePolynesie::API class << self def available_tables - engine&.available_tables + engine&.available_tables || [] end def search(domain_id, term) - engine&.search(domain_id, term) + engine&.search(domain_id, term) || [] end def fetch_row(external_id) table, id = external_id.split(':') - engine.fetch_row(table, id) + engine&.fetch_row(table, id) || {} end def engine diff --git a/app/lib/referentiel_de_polynesie/baserow_api.rb b/app/lib/referentiel_de_polynesie/baserow_api.rb index 7063dd8951b..533d4b3ad15 100644 --- a/app/lib/referentiel_de_polynesie/baserow_api.rb +++ b/app/lib/referentiel_de_polynesie/baserow_api.rb @@ -6,15 +6,24 @@ class << self def search(domain_id, term) config = config(domain_id) + return [] unless config search_field = config['Champ de recherche'] params = { "filter__field_#{search_field}__contains" => term } url = rows_url(config['Table']) - response = Typhoeus.get(url, headers: database_headers(config['Token']), params: params) - pp response - if response.success? - JSON.parse(response.body, symbolize_names: true)[:results].map do - { name: _1[:"field_#{search_field}"], id: _1[:id], domain: domain_id } - end + [{ name: 'Autre', id: 0, domain: domain_id }] + begin + response = Typhoeus.get(url, headers: database_headers(config['Token']), params: params) + pp response + if response.success? + JSON.parse(response.body, symbolize_names: true)[:results].map do |result| + { name: result[:"field_#{search_field}"], id: result[:id], domain: domain_id } + end + [{ name: 'Autre', id: 0, domain: domain_id }] + else + Rails.logger.error("Baserow API error: #{response.code} - #{response.body}") + [] + end + rescue Typhoeus::Errors::TyphoeusError => e + Rails.logger.error("Baserow API error: #{e.message}") + [] end end diff --git a/config/env.example b/config/env.example index 0dd07c471b0..0e39680c051 100644 --- a/config/env.example +++ b/config/env.example @@ -159,3 +159,6 @@ STRICT_EMAIL_VALIDATION_STARTS_ON="2024-02-19" # Weasyprint endpoint generating attestations v2 # See https://github.com/demarches-simplifiees/weasyprint_server WEASYPRINT_URL="http://127.0.0.1:5000/pdf" + +API_BASEROW_URL="https://api.baserow.io" +API_BASEROW_CONFIG_TABLE="202600" diff --git a/config/locales/models/type_de_champ/fr.yml b/config/locales/models/type_de_champ/fr.yml index dc51bdc89b6..f7124206b80 100644 --- a/config/locales/models/type_de_champ/fr.yml +++ b/config/locales/models/type_de_champ/fr.yml @@ -20,6 +20,7 @@ fr: numero_dn: 'Numéro DN' te_fenua: 'Carte de Polynésie' visa: 'Visa' + referentiel_de_polynesie: 'Référentiel de Polynésie' header_section: 'Titre de section' repetition: 'Bloc répétable' dossier_link: 'Lien vers un autre dossier' diff --git a/config/secrets.yml b/config/secrets.yml index 76d4b682be3..2df0177e435 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -136,9 +136,7 @@ defaults: &defaults baserow: url: <%= ENV['API_BASEROW_URL'] %> token: <%= ENV['API_BASEROW_TOKEN'] %> - user: <%= ENV['API_BASEROW_USER'] %> config_table: <%= ENV['API_BASEROW_CONFIG_TABLE'] %> - password: "<%= ENV['API_BASEROW_PASSWORD'] %>" autocomplete: api_geo_url: <%= ENV['API_GEO_URL'] %> api_adresse_url: <%= ENV['API_ADRESSE_URL'] %> diff --git a/spec/vcr_cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml b/spec/fixtures/cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml similarity index 95% rename from spec/vcr_cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml rename to spec/fixtures/cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml index 3a08b085ddc..315a41acf98 100644 --- a/spec/vcr_cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml +++ b/spec/fixtures/cassettes/The_user/fill_a_dossier_with_referentiel_de_polynesie.yml @@ -27,7 +27,7 @@ http_interactions: Cross-Origin-Opener-Policy: - same-origin Date: - - Mon, 21 Oct 2024 18:22:13 GMT + - Wed, 23 Oct 2024 09:19:45 GMT Referrer-Policy: - same-origin Server: @@ -45,7 +45,7 @@ http_interactions: encoding: ASCII-8BIT string: !binary |- eyJpZCI6MSwib3JkZXIiOiIxLjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiTm9tIjoiQ29tbXVuZXMgZGUgcG9seW7DqXNpZSIsIk5vdGVzIjoiIiwiQWN0aWYiOnRydWUsIlRhYmxlIjoiMjAyNTc4IiwiQ2hhbXBzIHVzYWdlciI6IjEzOTE3NDcsMTM5MTc1MCwxMzkxNzU1LDEzOTE3NTYiLCJDaGFtcCBkZSByZWNoZXJjaGUiOiIxMzkxNzQ3IiwiQ2hhbXBzIGluc3RydWN0ZXVyIjoiMTM5MTc0NywxMzkxNzUwLDEzOTE3NTUsMTM5MTc1NiIsIlRva2VuIjoiVHFkbEhQY2x3SmtFb3VNTGp0aUZPY21LamdzRFd0YUwifQ== - recorded_at: Mon, 21 Oct 2024 18:22:12 GMT + recorded_at: Wed, 23 Oct 2024 09:19:44 GMT - request: method: get uri: https://api.baserow.io/api/database/rows/table/202578/?filter__field_1391747__contains=Mahina @@ -73,7 +73,7 @@ http_interactions: Cross-Origin-Opener-Policy: - same-origin Date: - - Mon, 21 Oct 2024 18:22:14 GMT + - Wed, 23 Oct 2024 09:19:45 GMT Referrer-Policy: - same-origin Server: @@ -98,5 +98,5 @@ http_interactions: - Mahina - Tahiti - 98710"}],"field_1391765":[{"id":7,"value":"Tahiti"}]},{"id":164,"order":"164.00000000000000000000","field_1391747":"Pukapuka - Teonemahina - 98774","field_1391748":"Pukapuka","field_1391749":"98774","field_1391750":null,"field_1391751":"Teonemahina","field_1391754":[{"ids":{"database_table_202575":5,"database_table_202576":85},"value":"Tuamotu-Gambiers"}],"field_1391755":"Pukapuka","field_1391756":[{"id":85,"value":"Pukapuka - Teonemahina - 98774"}],"field_1391765":[{"id":85,"value":"Pukapuka"}]}]}' - recorded_at: Mon, 21 Oct 2024 18:22:13 GMT + recorded_at: Wed, 23 Oct 2024 09:19:44 GMT recorded_with: VCR 6.2.0 diff --git a/spec/vcr_cassettes/baserow404_error.yml b/spec/fixtures/cassettes/baserow/baserow404_error.yml similarity index 100% rename from spec/vcr_cassettes/baserow404_error.yml rename to spec/fixtures/cassettes/baserow/baserow404_error.yml diff --git a/spec/vcr_cassettes/baserow_api_available_tables.yml b/spec/fixtures/cassettes/baserow/baserow_api_available_tables.yml similarity index 100% rename from spec/vcr_cassettes/baserow_api_available_tables.yml rename to spec/fixtures/cassettes/baserow/baserow_api_available_tables.yml diff --git a/spec/vcr_cassettes/baserow_fetch_row.yml b/spec/fixtures/cassettes/baserow/baserow_fetch_row.yml similarity index 100% rename from spec/vcr_cassettes/baserow_fetch_row.yml rename to spec/fixtures/cassettes/baserow/baserow_fetch_row.yml diff --git a/spec/vcr_cassettes/baserow_search.yml b/spec/fixtures/cassettes/baserow/baserow_search.yml similarity index 100% rename from spec/vcr_cassettes/baserow_search.yml rename to spec/fixtures/cassettes/baserow/baserow_search.yml diff --git a/spec/lib/tasks/deployment/20220705164551_remove_unused_champs_spec.rb b/spec/lib/tasks/deployment/20220705164551_remove_unused_champs_spec.rb new file mode 100644 index 00000000000..33f215fa06f --- /dev/null +++ b/spec/lib/tasks/deployment/20220705164551_remove_unused_champs_spec.rb @@ -0,0 +1,25 @@ +describe '20220705164551_remove_unused_champs' do + let(:rake_task) { Rake::Task['after_party:remove_unused_champs'] } + let(:procedure) { create(:procedure, :with_all_champs) } + let(:dossier) { create(:dossier, :with_populated_champs, procedure: procedure) } + let(:champ_repetition) { dossier.champs_public.find(&:repetition?) } + let(:champ_count) { 51 } + + subject(:run_task) do + dossier + rake_task.invoke + end + + before { champ_repetition.champs.first.update(type_de_champ: create(:type_de_champ)) } + after { rake_task.reenable } + + describe 'remove_unused_champs' do + it "with bad champs" do + expect(Champ.where(dossier: dossier).count).to eq(champ_count) + + run_task + + expect(Champ.where(dossier: dossier).count).to eq(champ_count - 1) + end + end +end diff --git a/spec/models/referentiel_de_polynesie/baserow_api_spec.rb b/spec/models/referentiel_de_polynesie/baserow_api_spec.rb index fe0e46682ac..5586cb9c38d 100644 --- a/spec/models/referentiel_de_polynesie/baserow_api_spec.rb +++ b/spec/models/referentiel_de_polynesie/baserow_api_spec.rb @@ -1,72 +1,63 @@ require 'rails_helper' require 'webmock/rspec' -require 'vcr' RSpec.describe ReferentielDePolynesie::BaserowAPI, type: :model do describe '#search' do - it 'search in a Baserow table and return the result', :vcr do + it 'searches in a Baserow table and returns the result', vcr: { cassette_name: 'baserow/baserow_search' } do allow(ReferentielDePolynesie::BaserowAPI).to receive(:config).and_return({ 'Table' => '202600', 'Champ de recherche' => 'search_field', 'Token' => ENV['API_BASEROW_TOKEN'].to_s }) - VCR.use_cassette('baserow_search') do - results = ReferentielDePolynesie::BaserowAPI.search(123, "term") + results = ReferentielDePolynesie::BaserowAPI.search(123, "term") - expect(results).to be_an(Array) - expect(results.length).to be > 0 - expect(results.first).to have_key(:name) - expect(results.first).to have_key(:id) - end + expect(results).to be_an(Array) + expect(results.length).to be > 0 + expect(results.first).to have_key(:name) + expect(results.first).to have_key(:id) end end describe '#fetch_row' do - it 'fetch a specific line in a Baserow table', :vcr do + it 'fetches a specific line in a Baserow table', vcr: { cassette_name: 'baserow/baserow_fetch_row' } do allow(ReferentielDePolynesie::BaserowAPI).to receive(:config).and_return({ 'Table' => '202600', 'Token' => ENV['API_BASEROW_TOKEN'].to_s }) - VCR.use_cassette('baserow_fetch_row') do - result = ReferentielDePolynesie::BaserowAPI.fetch_row(123, 1) + result = ReferentielDePolynesie::BaserowAPI.fetch_row(123, 1) - expect(result[:row]["Nom"]).to eq("Communes de polynésie") - expect(result[:row]["Notes"]).to eq("") - expect(result[:row]["Actif"]).to eq(true) - expect(result[:row]["Table"]).to eq("202578") - expect(result[:row]["Champs usager"]).to eq("1391747,1391750,1391755,1391756") - expect(result[:row]["Champ de recherche"]).to eq("1391747") - expect(result[:row]["Champs instructeur"]).to eq("1391747,1391750,1391755,1391756") - end + expect(result[:row]["Nom"]).to eq("Communes de polynésie") + expect(result[:row]["Notes"]).to eq("") + expect(result[:row]["Actif"]).to eq(true) + expect(result[:row]["Table"]).to eq("202578") + expect(result[:row]["Champs usager"]).to eq("1391747,1391750,1391755,1391756") + expect(result[:row]["Champ de recherche"]).to eq("1391747") + expect(result[:row]["Champs instructeur"]).to eq("1391747,1391750,1391755,1391756") end - it 'return a 404 error if the row does not exist', :vcr do + it 'returns a 404 error if the row does not exist', vcr: { cassette_name: 'baserow/baserow404_error' } do allow(ReferentielDePolynesie::BaserowAPI).to receive(:config).and_return({ 'Table' => '202600', 'Token' => ENV['API_BASEROW_TOKEN'].to_s }) - VCR.use_cassette('baserow404_error') do - results = ReferentielDePolynesie::BaserowAPI.fetch_row(123, 99999) + results = ReferentielDePolynesie::BaserowAPI.fetch_row(123, 99999) - expect(results).to eq(nil) - end + expect(results).to eq(nil) end end describe '#available_tables' do - it 'fetch the available tables', :vcr do + it 'fetches the available tables', vcr: { cassette_name: 'baserow/baserow_api_available_tables' } do allow(ReferentielDePolynesie::BaserowAPI).to receive(:config) - VCR.use_cassette('baserow_available_tables') do - results = ReferentielDePolynesie::BaserowAPI.available_tables + results = ReferentielDePolynesie::BaserowAPI.available_tables - expect(results).to be_an(Array) - expect(results.first[:name]).to eq("Communes de polynésie") - expect(results.first[:id]).to eq(1) - end + expect(results).to be_an(Array) + expect(results.first[:name]).to eq("Communes de polynésie") + expect(results.first[:id]).to eq(1) end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index c7d15ef1ea5..331e66a034c 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -122,13 +122,6 @@ end end - VCR.configure do |config| - config.cassette_library_dir = 'spec/vcr_cassettes' - config.hook_into :webmock - config.configure_rspec_metadata! - config.allow_http_connections_when_no_cassette = false - end - config.include ActiveSupport::Testing::TimeHelpers config.include Shoulda::Matchers::ActiveRecord, type: :model config.include Shoulda::Matchers::ActiveModel, type: :model diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb index a29cf8eb7c7..fdf0266b2db 100644 --- a/spec/support/capybara.rb +++ b/spec/support/capybara.rb @@ -55,7 +55,7 @@ def setup_driver(app, download_path, options) setup_driver(app, download_path, options) end -Capybara.default_max_wait_time = 4 +Capybara.default_max_wait_time = 30 Capybara.ignore_hidden_elements = false diff --git a/spec/system/administrateurs/types_de_champ_spec.rb b/spec/system/administrateurs/types_de_champ_spec.rb index 99f24c9eaab..b2b3c3184cc 100644 --- a/spec/system/administrateurs/types_de_champ_spec.rb +++ b/spec/system/administrateurs/types_de_champ_spec.rb @@ -210,10 +210,10 @@ before { Flipper.enable(:referentiel_de_polynesie, administrateur.user) } it "add referentiel_de_polynesie champ" do - VCR.use_cassette('baserow_api_available_tables', record: :new_episodes) do + VCR.use_cassette('baserow/baserow_api_available_tables', record: :new_episodes) do add_champ - select('Referentiel De Polynesie', from: 'Type de champ') + select('Référentiel de Polynésie', from: 'Type de champ') fill_in 'Libellé du champ', with: 'Libellé de champ Référentiel de Polynésie', fill_options: { clear: :backspace } expect(page).to have_content('Formulaire enregistré') diff --git a/spec/vcr_cassettes/baserow_available_tables.yml b/spec/vcr_cassettes/baserow_available_tables.yml deleted file mode 100644 index c76cee04b23..00000000000 --- a/spec/vcr_cassettes/baserow_available_tables.yml +++ /dev/null @@ -1,49 +0,0 @@ ---- -http_interactions: -- request: - method: get - uri: https://api.baserow.io/api/database/rows/table/202600/?user_field_names=true - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - mes-demarches.gov.pf - Authorization: - - Token TqdlHPclwJkEouMLjtiFOcmKjgsDWtaL - Expect: - - '' - response: - status: - code: 200 - message: '' - headers: - Allow: - - GET, POST, HEAD, OPTIONS - Alt-Svc: - - h3=":443"; ma=2592000 - Content-Type: - - application/json - Cross-Origin-Opener-Policy: - - same-origin - Date: - - Wed, 16 Oct 2024 14:45:17 GMT - Referrer-Policy: - - same-origin - Server: - - Caddy - - gunicorn - Vary: - - origin - X-Content-Type-Options: - - nosniff - X-Frame-Options: - - DENY - Content-Length: - - '1668' - body: - encoding: ASCII-8BIT - string: !binary |- - eyJjb3VudCI6NywibmV4dCI6bnVsbCwicHJldmlvdXMiOm51bGwsInJlc3VsdHMiOlt7ImlkIjoxLCJvcmRlciI6IjEuMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJOb20iOiJDb21tdW5lcyBkZSBwb2x5bsOpc2llIiwiTm90ZXMiOiIiLCJBY3RpZiI6dHJ1ZSwiVGFibGUiOiIyMDI1NzgiLCJDaGFtcHMgdXNhZ2VyIjoiMTM5MTc0NywxMzkxNzUwLDEzOTE3NTUsMTM5MTc1NiIsIkNoYW1wIGRlIHJlY2hlcmNoZSI6IjEzOTE3NDciLCJDaGFtcHMgaW5zdHJ1Y3RldXIiOiIxMzkxNzQ3LDEzOTE3NTAsMTM5MTc1NSwxMzkxNzU2IiwiVG9rZW4iOiJUcWRsSFBjbHdKa0VvdU1ManRpRk9jbUtqZ3NEV3RhTCJ9LHsiaWQiOjIsIm9yZGVyIjoiMi4wMDAwMDAwMDAwMDAwMDAwMDAwMCIsIk5vbSI6Ik1hdMOpcmllbHMgYWZmZWN0w6lzIGF1eCBhZ2VudHMiLCJOb3RlcyI6IiIsIkFjdGlmIjp0cnVlLCJUYWJsZSI6IjIwMjU2NyIsIkNoYW1wcyB1c2FnZXIiOiIxMzkxNjQ1LDEzOTE2NDYsMTM5MTY1NiIsIkNoYW1wIGRlIHJlY2hlcmNoZSI6IjEzOTE2NDUiLCJDaGFtcHMgaW5zdHJ1Y3RldXIiOiIxMzkxNjQ1IiwiVG9rZW4iOiJUcWRsSFBjbHdKa0VvdU1ManRpRk9jbUtqZ3NEV3RhTCJ9LHsiaWQiOjMsIm9yZGVyIjoiMy4wMDAwMDAwMDAwMDAwMDAwMDAwMCIsIk5vbSI6IkFycml2YWdlIHRyYW5zcG9ydCBtYXJpdGltZSIsIk5vdGVzIjoiIiwiQWN0aWYiOnRydWUsIlRhYmxlIjoiMjAyNTUyIiwiQ2hhbXBzIHVzYWdlciI6IiIsIkNoYW1wIGRlIHJlY2hlcmNoZSI6IjEzOTE5MDQiLCJDaGFtcHMgaW5zdHJ1Y3RldXIiOiIiLCJUb2tlbiI6IlRxZGxIUGNsd0prRW91TUxqdGlGT2NtS2pnc0RXdGFMIn0seyJpZCI6NCwib3JkZXIiOiI0LjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiTm9tIjoiU2FsbGVzIGRlIHLDqXVuaW9uIC0gREdSSCIsIk5vdGVzIjoiIiwiQWN0aWYiOnRydWUsIlRhYmxlIjoiMjAyNTYyIiwiQ2hhbXBzIHVzYWdlciI6IiIsIkNoYW1wIGRlIHJlY2hlcmNoZSI6IjEzOTE5MDUiLCJDaGFtcHMgaW5zdHJ1Y3RldXIiOiIiLCJUb2tlbiI6IlRxZGxIUGNsd0prRW91TUxqdGlGT2NtS2pnc0RXdGFMIn0seyJpZCI6NSwib3JkZXIiOiI1LjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiTm9tIjoiU2Vzc2lvbnMgZGUgZm9ybWF0aW9uIC0gQ0NJU00iLCJOb3RlcyI6IiIsIkFjdGlmIjpmYWxzZSwiVGFibGUiOiIyMDI1ODQiLCJDaGFtcHMgdXNhZ2VyIjoiIiwiQ2hhbXAgZGUgcmVjaGVyY2hlIjoiMTM5MTc3OCIsIkNoYW1wcyBpbnN0cnVjdGV1ciI6IiIsIlRva2VuIjpudWxsfSx7ImlkIjo3LCJvcmRlciI6IjYuMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJOb20iOiJTdWJzdGFuY2VzIGFjdGl2ZXMgLSBEQlMiLCJOb3RlcyI6IiIsIkFjdGlmIjpmYWxzZSwiVGFibGUiOiIyMTYyODQiLCJDaGFtcHMgdXNhZ2VyIjoiIiwiQ2hhbXAgZGUgcmVjaGVyY2hlIjoiMTUwMDAwMCIsIkNoYW1wcyBpbnN0cnVjdGV1ciI6IiIsIlRva2VuIjpudWxsfSx7ImlkIjo4LCJvcmRlciI6IjcuMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJOb20iOiIiLCJOb3RlcyI6IiIsIkFjdGlmIjpmYWxzZSwiVGFibGUiOm51bGwsIkNoYW1wcyB1c2FnZXIiOiIiLCJDaGFtcCBkZSByZWNoZXJjaGUiOm51bGwsIkNoYW1wcyBpbnN0cnVjdGV1ciI6IiIsIlRva2VuIjpudWxsfV19 - recorded_at: Wed, 16 Oct 2024 14:45:12 GMT -recorded_with: VCR 6.2.0