diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index db2e732..4df0f0b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,7 +28,7 @@ jobs: - name: Upload artifacts if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: artifacts + name: artifacts-${{ matrix.os }}-${{ matrix.ruby }} path: artifacts/** diff --git a/CHANGES.md b/CHANGES.md index 79f786a..f8d7bbc 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,8 @@ +# 4.2.0 (2026-01-06) + +- Rename RLF to SLF (NRLF -> SLFN, SRLF -> SLFS) +- Added bypass to skip SSL verification ONLY when recording new VCR cassettes + # 4.1.0 (2025-01-10) - Fixed token refresh function and test diff --git a/lib/berkeley_library/location/location_result.rb b/lib/berkeley_library/location/location_result.rb index 59838ae..7656c3c 100644 --- a/lib/berkeley_library/location/location_result.rb +++ b/lib/berkeley_library/location/location_result.rb @@ -13,12 +13,12 @@ def initialize(oclc_number, wc_symbols: [], wc_error: nil, ht_record_url: nil, h @ht_error = ht_error end - def nrlf? - @has_nrlf ||= wc_symbols.intersection(WorldCat::Symbols::NRLF).any? + def slfn? + @has_slfn ||= wc_symbols.intersection(WorldCat::Symbols::SLFN).any? end - def srlf? - @has_srlf ||= wc_symbols.intersection(WorldCat::Symbols::SRLF).any? + def slfs? + @has_slfs ||= wc_symbols.intersection(WorldCat::Symbols::SLFS).any? end def uc_symbols diff --git a/lib/berkeley_library/location/world_cat/oclc_auth.rb b/lib/berkeley_library/location/world_cat/oclc_auth.rb index 2aab315..8a237b1 100644 --- a/lib/berkeley_library/location/world_cat/oclc_auth.rb +++ b/lib/berkeley_library/location/world_cat/oclc_auth.rb @@ -17,16 +17,7 @@ def initialize end def fetch_token - url = oclc_token_url - - http = Net::HTTP.new(url.host, url.port) - http.use_ssl = url.scheme == 'https' - - request = Net::HTTP::Post.new(url.request_uri) - request.basic_auth(Config.api_key, Config.api_secret) - request['Accept'] = 'application/json' - response = http.request(request) - + response = http_request(oclc_token_url) JSON.parse(response.body, symbolize_names: true) end @@ -42,6 +33,23 @@ def access_token private + def http_request(url) + http = build_http(url) + request = Net::HTTP::Post.new(url.request_uri) + request.basic_auth(Config.api_key, Config.api_secret) + request['Accept'] = 'application/json' + http.request(request) + end + + def build_http(url) + http = Net::HTTP.new(url.host, url.port) + http.use_ssl = url.scheme == 'https' + + # Skip SSL verification ONLY when recording new VCR cassettes + http.verify_mode = OpenSSL::SSL::VERIFY_NONE if ENV['RE_RECORD_VCR'] == 'true' + http + end + def token_params { grant_type: 'client_credentials', diff --git a/lib/berkeley_library/location/world_cat/symbols.rb b/lib/berkeley_library/location/world_cat/symbols.rb index 04821f0..0baa82c 100644 --- a/lib/berkeley_library/location/world_cat/symbols.rb +++ b/lib/berkeley_library/location/world_cat/symbols.rb @@ -2,12 +2,12 @@ module BerkeleyLibrary module Location module WorldCat module Symbols - NRLF = %w[ZAP ZAPSP].freeze - SRLF = %w[HH0 ZAS ZASSP].freeze - RLF = (NRLF + SRLF).freeze + SLFN = %w[ZAP ZAPSP].freeze + SLFS = %w[HH0 ZAS ZASSP].freeze + SLF = (SLFN + SLFS).freeze UC = %w[CLU CRU CUI CUN CUS CUT CUV CUX CUY CUZ MERUC].freeze - ALL = (RLF + UC).freeze + ALL = (SLF + UC).freeze class << self include Symbols diff --git a/lib/berkeley_library/location/xlsx_writer.rb b/lib/berkeley_library/location/xlsx_writer.rb index f978c08..33a9bea 100644 --- a/lib/berkeley_library/location/xlsx_writer.rb +++ b/lib/berkeley_library/location/xlsx_writer.rb @@ -7,22 +7,22 @@ class XLSXWriter include Constants include BerkeleyLibrary::Logging - COL_NRLF = 'NRLF'.freeze - COL_SRLF = 'SRLF'.freeze + COL_SLFN = 'SLFN'.freeze + COL_SLFS = 'SLFS'.freeze COL_OTHER_UC = 'Other UC'.freeze COL_WC_ERROR = 'WorldCat Error'.freeze COL_HATHI_TRUST = 'Hathi Trust'.freeze COL_HATHI_TRUST_ERROR = "#{COL_HATHI_TRUST} Error".freeze - V_NRLF = 'nrlf'.freeze - V_SRLF = 'srlf'.freeze + V_SLFN = 'slfn'.freeze + V_SLFS = 'slfs'.freeze - attr_reader :ss, :rlf, :uc, :hathi_trust + attr_reader :ss, :slf, :uc, :hathi_trust - def initialize(ss, rlf: true, uc: true, hathi_trust: true) + def initialize(ss, slf: true, uc: true, hathi_trust: true) @ss = ss - @rlf = rlf + @slf = slf @uc = uc @hathi_trust = hathi_trust @@ -32,7 +32,7 @@ def initialize(ss, rlf: true, uc: true, hathi_trust: true) def <<(result) r_indices = row_indices_for(result.oclc_number) r_indices.each do |idx| - write_wc_cols(idx, result) if rlf || uc + write_wc_cols(idx, result) if slf || uc write_ht_cols(idx, result) if hathi_trust end end @@ -41,7 +41,7 @@ def <<(result) def write_wc_cols(r_index, result) write_wc_error(r_index, result) - write_rlf(r_index, result) if rlf + write_slf(r_index, result) if slf write_uc(r_index, result) if uc end @@ -51,9 +51,9 @@ def write_ht_cols(r_index, result) end def ensure_columns! - if rlf - nrlf_col_index - srlf_col_index + if slf + slfn_col_index + slfs_col_index end uc_col_index if uc ht_col_index if hathi_trust @@ -66,9 +66,9 @@ def row_indices_for(oclc_number) raise ArgumentError, "Unknown OCLC number: #{oclc_number}" end - def write_rlf(r_index, result) - ss.set_value_at(r_index, nrlf_col_index, V_NRLF) if result.nrlf? - ss.set_value_at(r_index, srlf_col_index, V_SRLF) if result.srlf? + def write_slf(r_index, result) + ss.set_value_at(r_index, slfn_col_index, V_SLFN) if result.slfn? + ss.set_value_at(r_index, slfs_col_index, V_SLFS) if result.slfs? end def write_uc(r_index, result) @@ -99,12 +99,12 @@ def oclc_col_index @oclc_col_index ||= ss.find_column_index_by_header!(OCLC_COL_HEADER) end - def nrlf_col_index - @nrlf_col_index ||= ss.ensure_column!(COL_NRLF) + def slfn_col_index + @slfn_col_index ||= ss.ensure_column!(COL_SLFN) end - def srlf_col_index - @srlf_col_index ||= ss.ensure_column!(COL_SRLF) + def slfs_col_index + @slfs_col_index ||= ss.ensure_column!(COL_SLFS) end def uc_col_index diff --git a/spec/berkeley_library/location/world_cat/libraries_request_spec.rb b/spec/berkeley_library/location/world_cat/libraries_request_spec.rb index bb46ff9..bb3e725 100644 --- a/spec/berkeley_library/location/world_cat/libraries_request_spec.rb +++ b/spec/berkeley_library/location/world_cat/libraries_request_spec.rb @@ -3,19 +3,24 @@ module Location module WorldCat describe LibrariesRequest do let(:oclc_number) { '85833285' } - # let(:wc_base_url) { 'https://www.example.test/webservices/' } let(:wc_base_url) { 'https://americas.discovery.api.oclc.org/worldcat/search/v2/' } let(:wc_api_key) { '2lo55pdh7moyfodeo4gwgms0on65x31ghv0g6yg87ffwaljsdw' } let(:wc_api_secret) { 'totallyfakesecret' } - # before do - # # Config.base_uri = wc_base_url - # # Config.api_key = wc_api_key - # # Config.api_secret = wc_api_secret - # end + before do + fake_auth = instance_double( + BerkeleyLibrary::Location::WorldCat::OCLCAuth, + access_token: 'fake-access-token' + ) + + allow(BerkeleyLibrary::Location::WorldCat::OCLCAuth) + .to receive(:instance) + .and_return(fake_auth) + end after do - Config.send(:reset!) + BerkeleyLibrary::Location::WorldCat::OCLCAuth + .instance_variable_set(:@singleton__instance__, nil) end describe :new do @@ -65,7 +70,7 @@ module WorldCat end it 'rejects an array containing nonexistent symbols' do - bad_symbols = [Symbols::NRLF, ['not a WorldCat institution symbol'], Symbols::SRLF].flatten + bad_symbols = [Symbols::SLFN, ['not a WorldCat institution symbol'], Symbols::SLFS].flatten expect { LibrariesRequest.new(oclc_number, symbols: bad_symbols) }.to raise_error(ArgumentError) end end @@ -92,7 +97,7 @@ module WorldCat it 'returns a specified subset of holdings' do holdings_expected = %w[ZAP] - symbols = Symbols::RLF + symbols = Symbols::SLF req = LibrariesRequest.new(oclc_number, symbols:) VCR.use_cassette('libraries_request/execute_holdings_2') do @@ -116,7 +121,7 @@ module WorldCat it 'returns an empty list when no holdings are found' do oclc_number = '10045193' - symbols = Symbols::RLF + symbols = Symbols::SLF req = LibrariesRequest.new(oclc_number, symbols:) VCR.use_cassette('libraries_request/execute_holdings_4') do diff --git a/spec/berkeley_library/location/world_cat/oclc_auth_spec.rb b/spec/berkeley_library/location/world_cat/oclc_auth_spec.rb index 74d1823..708d3a6 100644 --- a/spec/berkeley_library/location/world_cat/oclc_auth_spec.rb +++ b/spec/berkeley_library/location/world_cat/oclc_auth_spec.rb @@ -1,10 +1,13 @@ require 'spec_helper' require 'time' +require 'active_support/testing/time_helpers' module BerkeleyLibrary module Location module WorldCat describe OCLCAuth do + include ActiveSupport::Testing::TimeHelpers + it 'fetches a token' do VCR.use_cassette('oclc_auth/fetch_token') do token = OCLCAuth.instance.token @@ -14,25 +17,24 @@ module WorldCat end it 'refreshes an expired token' do - VCR.use_cassette('oclc_auth/refresh_token') do - # First get a token.... - token = OCLCAuth.instance.token + freeze_time do + auth = OCLCAuth.instance - # Need to set the token expiration to a time in the past - token[:expires_at] = (Time.now - 60).to_s - token[:access_token] = 'expired_token' + # Simulate an expired token + expired_token = { access_token: 'expired_token', expires_at: (Time.current - 60).to_s } + auth.token = expired_token - # Now we need to set the token instance to the token with the updated expiration - OCLCAuth.instance.token = token + # Stub fetch_token to return a fresh token + new_token = { access_token: 'new_token', expires_at: (Time.current + 3600).to_s } + allow(auth).to receive(:fetch_token).and_return(new_token) # Trigger a refresh by calling access_token - OCLCAuth.instance.access_token + result = auth.access_token - # Now check that the token has been refreshed - token = OCLCAuth.instance.token - - expect(token[:access_token]).not_to eq('expired_token') - expect(Time.parse(token[:expires_at])).to be >= Time.now + # Check that the token was refreshed + expect(result).to eq('new_token') + expect(auth.token[:access_token]).to eq('new_token') + expect(Time.parse(auth.token[:expires_at])).to be >= Time.current end end @@ -44,6 +46,58 @@ module WorldCat expect(oclc_auth.send(:token_expired?)).to be true end end + + describe '#fetch_token SSL branch' do + it 'does not disable SSL verification when RE_RECORD_VCR is not true' do + # Clear RE_RECORD_VCR + allow(ENV).to receive(:[]).with('RE_RECORD_VCR').and_return(nil) + + url = URI('https://example.test/token') + http = instance_double(Net::HTTP) + allow(Net::HTTP).to receive(:new).and_return(http) + allow(http).to receive(:use_ssl=) + allow(http).to receive(:request).and_return(double(body: '{"access_token":"abc"}')) + + auth = OCLCAuth.instance + allow(auth).to receive(:oclc_token_url).and_return(url) + allow(Config).to receive(:api_key).and_return('key') + allow(Config).to receive(:api_secret).and_return('secret') + + expect(http).not_to receive(:verify_mode=) + auth.send(:fetch_token) + end + + it 'disables SSL verification when RE_RECORD_VCR is true' do + # Force the env to true + allow(ENV).to receive(:[]).with('RE_RECORD_VCR').and_return('true') + + url = URI('https://example.test/token') + http = instance_double(Net::HTTP) + allow(Net::HTTP).to receive(:new).and_return(http) + allow(http).to receive(:use_ssl=) + allow(http).to receive(:request).and_return(double(body: '{"access_token":"abc"}')) + + auth = OCLCAuth.instance + allow(auth).to receive(:oclc_token_url).and_return(url) + allow(Config).to receive(:api_key).and_return('key') + allow(Config).to receive(:api_secret).and_return('secret') + + # Expect that verify_mode is set when ENV is 'true' + expect(http).to receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE) + auth.send(:fetch_token) + end + end + + describe '#access_token' do + it 'returns existing token if not expired' do + auth = OCLCAuth.instance + future_token = { access_token: 'valid-token', expires_at: (Time.now + 3600).to_s } + auth.token = future_token + + expect(auth.access_token).to eq('valid-token') + end + end + end end end diff --git a/spec/berkeley_library/location/xlsx_writer_spec.rb b/spec/berkeley_library/location/xlsx_writer_spec.rb index 3961656..58fb79a 100644 --- a/spec/berkeley_library/location/xlsx_writer_spec.rb +++ b/spec/berkeley_library/location/xlsx_writer_spec.rb @@ -28,8 +28,8 @@ module Location it 'writes a result' do expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => record_url, # check that we preserve existing values @@ -57,8 +57,8 @@ module Location expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => nil, - 'SRLF' => nil, + 'SLFN' => nil, + 'SLFS' => nil, 'Other UC' => nil, 'Hathi Trust' => record_url, 'WorldCat Error' => err_msg, @@ -87,8 +87,8 @@ module Location expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => nil, 'Hathi Trust Error' => err_msg, @@ -113,8 +113,8 @@ module Location expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => nil, - 'SRLF' => nil, + 'SLFN' => nil, + 'SLFS' => nil, 'Other UC' => nil, 'Hathi Trust' => record_url, # check that we preserve existing values @@ -134,7 +134,7 @@ module Location wc_symbols: %w[CLU CUY ZAP ZAS] ) - writer = XLSXWriter.new(ss, rlf: false, uc: false) + writer = XLSXWriter.new(ss, slf: false, uc: false) writer << result expected = { @@ -150,7 +150,7 @@ module Location expect(v_actual).to eq(v_expected) end - ['NRLF', 'SRLF', 'Other UC'].each do |header| + ['SLFN', 'SLFS', 'Other UC'].each do |header| c_index = ss.find_column_index_by_header(header) expect(c_index).to be_nil end @@ -172,8 +172,8 @@ module Location expected = { 'OCLC Number' => oclc_number_next.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => nil, # check that we preserve existing values @@ -187,7 +187,7 @@ module Location end end - it 'can write a result without NRLF' do + it 'can write a result without SLFN' do writer = XLSXWriter.new(ss) writer << result @@ -203,8 +203,8 @@ module Location expected = { 'OCLC Number' => oclc_number_next.to_i, - 'NRLF' => nil, - 'SRLF' => 'srlf', + 'SLFN' => nil, + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => nil, # check that we preserve existing values @@ -234,8 +234,8 @@ module Location expected = { 'OCLC Number' => oclc_number_next.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => nil, 'Hathi Trust' => nil, # check that we preserve existing values @@ -249,7 +249,7 @@ module Location end end - it 'can write a result without SRLF' do + it 'can write a result without SLFS' do writer = XLSXWriter.new(ss) writer << result @@ -265,8 +265,8 @@ module Location expected = { 'OCLC Number' => oclc_number_next.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => nil, + 'SLFN' => 'slfn', + 'SLFS' => nil, 'Other UC' => 'CLU,CUY', 'Hathi Trust' => nil, # check that we preserve existing values @@ -280,7 +280,7 @@ module Location end end - it 'can skip RLF columns' do + it 'can skip SLF columns' do expected = { 'OCLC Number' => oclc_number.to_i, 'Other UC' => 'CLU,CUY', @@ -289,7 +289,7 @@ module Location 'MMSID' => ss.value_at(r_index, c_index_mmsid) } - writer = XLSXWriter.new(ss, rlf: false) + writer = XLSXWriter.new(ss, slf: false) writer << result expected.each do |col_header, v_expected| @@ -298,7 +298,7 @@ module Location expect(v_actual).to eq(v_expected) end - %w[NRLF SRLF].each do |col_header| + %w[SLFN SLFS].each do |col_header| c_index = ss.find_column_index_by_header(col_header) expect(c_index).to be_nil end @@ -307,8 +307,8 @@ module Location it 'can skip the Other UC column' do expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Hathi Trust' => record_url, # check that we preserve existing values 'MMSID' => ss.value_at(r_index, c_index_mmsid) @@ -330,8 +330,8 @@ module Location it 'can skip the Hathi Trust column' do expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', # check that we preserve existing values 'MMSID' => ss.value_at(r_index, c_index_mmsid) @@ -353,8 +353,8 @@ module Location it 'does not ignore rows with duplicate OCLC numbers' do expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => record_url, # check that we preserve existing values @@ -373,7 +373,7 @@ module Location expect(v_actual).to eq(v_expected) end - ['NRLF', 'SRLF', 'Other UC', 'Hathi Trust'].each do |col_header| + ['SLFN', 'SLFS', 'Other UC', 'Hathi Trust'].each do |col_header| c_index = ss.find_column_index_by_header!(col_header) v_actual = ss.value_at(r_index_dup, c_index) expect(v_actual).to eq(expected[col_header]) @@ -387,8 +387,8 @@ module Location expected = { 'OCLC Number' => oclc_number.to_i, - 'NRLF' => 'nrlf', - 'SRLF' => 'srlf', + 'SLFN' => 'slfn', + 'SLFS' => 'slfs', 'Other UC' => 'CLU,CUY', 'Hathi Trust' => record_url, # check that we preserve existing values @@ -419,8 +419,8 @@ module Location 'OCLC Number' => oclc_number.to_i, 'Call #' => 'JN3971.A988 D38 2006', 'Title' => 'Becoming party politicians : eastern German state legislators in the decade following democratization / Louise K. Davidson-Schmich.', - 'NRLF' => nil, - 'SRLF' => 'srlf', + 'SLFN' => nil, + 'SLFS' => 'slfs', 'Other UC' => 'CUI,CUT,CUV', 'Hathi Trust' => nil, 'Hathi Trust Error' => '403 Forbidden' diff --git a/spec/cassettes/libraries_request/execute_holdings_1.yml b/spec/cassettes/libraries_request/execute_holdings_1.yml index 7725903..51b8ada 100644 --- a/spec/cassettes/libraries_request/execute_holdings_1.yml +++ b/spec/cassettes/libraries_request/execute_holdings_1.yml @@ -23,60 +23,60 @@ http_interactions: message: '' headers: Date: - - Mon, 13 Jan 2025 23:13:44 GMT + - Tue, 06 Jan 2026 16:51:52 GMT Content-Type: - application/json;charset=UTF-8 Transfer-Encoding: - chunked Connection: - keep-alive - X-Ratelimit-Remaining-Month: - - '149995' - Ratelimit-Remaining: - - '149995' - X-Ratelimit-Limit-Month: - - '150000' X-Ratelimit-Limit-Day: - '150000' + Ratelimit-Remaining: + - '149999' + Ratelimit-Reset: + - '25688' X-Ratelimit-Remaining-Day: - - '149995' + - '149999' + X-Ratelimit-Remaining-Month: + - '149999' Ratelimit-Limit: - '150000' - Ratelimit-Reset: - - '2421977' + X-Ratelimit-Limit-Month: + - '150000' X-Oclc-Requestid: - - 02ac90aa-995c-4e46-8903-9699c67da4af + - a7682e73-55b7-4fac-b3d7-0f5a7d7ea2a4 X-Oclc-Selfid: - - 18d1642c-e750-44ed-9f3c-d13b295ed46e + - 6e197ed2-854c-45f2-863a-840281c6d30a Cache-Control: - max-age=3600 Kong-Request-Id: - - 7dc290f2-87f5-4e2f-81ca-094a9706b8e7#12758324 + - 21bd1c46-4eb5-42c7-b3eb-0df3d1401afb#177687712 X-Kong-Upstream-Latency: - - '1026' + - '52' X-Kong-Proxy-Latency: - - '42' + - '114' Via: - - 1.1 kong/3.8.0.0-enterprise-edition + - 1.1 kong/3.11.0.6-enterprise-edition X-Kong-Request-Id: - - de4481399d965a1f9fa509747fa17c39 + - 5adb1601616df549ea1c1b3d5ad7596c Strict-Transport-Security: - max-age=31536000; includeSubDomains Cf-Cache-Status: - DYNAMIC Set-Cookie: - - __cf_bm=Z1Vfe.6PiZieFpJgoNc3hFWRTR0ZRYfQZWQjkhK3hXA-1736810024-1.0.1.1-6pioyKOetbDIBcsg0tFfjf4CVSFqWS4pcr9dUkUMqTd_pld9eU6lFTMXF4Mkv3No5AlxfYMsz1QAuUUjjJKz1g; - path=/; expires=Mon, 13-Jan-25 23:43:44 GMT; domain=.oclc.org; HttpOnly; Secure; + - __cf_bm=yWV.VK4JkI3JRAwLwDTIVEVQsF0VE0Ie4_z8j89lXEA-1767718312-1.0.1.1-fv1J9O022mFw9EhZovtpLyhyLns4dws3wSfderdCOk_8FWWfGu767qxiIWhCXH2xFmNMm2r0NEJRZMMLTZFNltoxamE22sgXiHaq3_M_oAgh.jlwRh4Qpo5VLhokwp.h; + path=/; expires=Tue, 06-Jan-26 17:21:52 GMT; domain=.oclc.org; HttpOnly; Secure; SameSite=None - - _cfuvid=ZJdwHkMRBf.CzVNCCIg1NhSEJdeJsli1rZe80WsnmZw-1736810024761-0.0.1.1-604800000; + - _cfuvid=qxYZ2wAtO8RcTNMETRSyQooJ8mqsdRww7aA4P4bq7aY-1767718312571-0.0.1.1-604800000; path=/; domain=.oclc.org; HttpOnly; Secure; SameSite=None Server: - cloudflare Cf-Ray: - - 901914165abf2ee4-LAX + - 9b9cb8fc09a40b82-SJC body: encoding: ASCII-8BIT string: !binary |- - eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6Ijg1ODMzMjg1IiwidGl0bGUiOiJUaGUgcXVpZXQgZ2lybCIsImNyZWF0b3IiOiJQZXRlciBIw7hlZyIsImRhdGUiOiLCqTIwMDciLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMjAwNyIsImxhbmd1YWdlIjoiZW5nIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsImVkaXRpb24iOiIxc3QgQW1lcmljYW4gZWQiLCJwdWJsaXNoZXIiOiJGYXJyYXIsIFN0cmF1cywgYW5kIEdpcm91eCIsInB1YmxpY2F0aW9uUGxhY2UiOiJOZXcgWW9yayIsImlzYm5zIjpbIjk3ODAzNzQyNjM2OTAiLCIwMzc0MjYzNjk4Il0sIm1lcmdlZE9jbGNOdW1iZXJzIjpbIjk2NjQ5Mzg4NiIsIjk2Nzg0MjE0OSIsIjEwMjI3MTU1MzAiLCIxMDYwNjk1OTE0IiwiMTIwMTQ2NDAzNiIsIjEyMzAzNzE4ODYiLCIxMzAzODAxODEyIl0sImNhdGFsb2dpbmdJbmZvIjp7ImNhdGFsb2dpbmdBZ2VuY3kiOiJETEMiLCJjYXRhbG9naW5nTGFuZ3VhZ2UiOiJlbmciLCJsZXZlbE9mQ2F0YWxvZ2luZyI6IiAiLCJ0cmFuc2NyaWJpbmdBZ2VuY3kiOiJETEMifSwiaW5zdGl0dXRpb25Ib2xkaW5nIjp7InRvdGFsSG9sZGluZ0NvdW50Ijo0LCJicmllZkhvbGRpbmdzIjpbeyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6Ik1FUlVDIiwicmVnaXN0cnlJZCI6NDY5MSwiaW5zdGl0dXRpb25OdW1iZXIiOjM2MjEzLCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIE1lcmNlZCIsImFsc29DYWxsZWQiOiJVQyBNZXJjZWQgTGlicmFyeSIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS80NjkxIiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiTGVvICZhbXA7IERvdHRpZSBLb2xsaWdpYW4gTGlicmFyeSIsInN0cmVldDIiOiI1MjAwIE4gTGFrZSBSb2FkIiwiY2l0eSI6Ik1lcmNlZCIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTUzNDMiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3LjM2NjI1NywibG9uIjotMTIwLjQyNDU3fSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifSx7ImNvdW50cnkiOiJVUyIsInN0YXRlIjoiVVMtQ0EiLCJvY2xjU3ltYm9sIjoiWkFQIiwicmVnaXN0cnlJZCI6NTY5MCwiaW5zdGl0dXRpb25OdW1iZXIiOjQyMTgsImluc3RpdHV0aW9uTmFtZSI6IlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgTlJMRiIsImFsc29DYWxsZWQiOiJOb3J0aGVybiBSZWdpb25hbCBMaWJyYXJ5IEZhY2lsaXR5IiwiaGFzT1BBQ0xpbmsiOnRydWUsInNlbGYiOiJodHRwczovL3dvcmxkY2F0Lm9yZy9vY2xjLWNvbmZpZy9pbnN0aXR1dGlvbi9kYXRhLzU2OTAiLCJhZGRyZXNzIjp7InN0cmVldDEiOiJSaWNobW9uZCBGaWVsZCBTdGF0aW9uIEJsZGcuIDQwMCIsInN0cmVldDIiOiJNZWFkZSBhbmQgU291dGggNDd0aCBTdC4iLCJjaXR5IjoiUmljaG1vbmQiLCJzdGF0ZSI6IlVTLUNBIiwicG9zdGFsQ29kZSI6Ijk0ODA0LTQ2OTgiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3LjkxNzY3LCJsb24iOi0xMjIuMzMxNjh9LCJpbnN0aXR1dGlvblR5cGUiOiJBQ0FERU1JQyJ9LHsiY291bnRyeSI6IlVTIiwic3RhdGUiOiJVUy1DQSIsIm9jbGNTeW1ib2wiOiJDVUkiLCJyZWdpc3RyeUlkIjo1NjU2LCJpbnN0aXR1dGlvbk51bWJlciI6MTEwMSwiaW5zdGl0dXRpb25OYW1lIjoiVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBJcnZpbmUiLCJhbHNvQ2FsbGVkIjoiTGFuZ3NvbiBMaWJyYXJ5IiwiaGFzT1BBQ0xpbmsiOnRydWUsInNlbGYiOiJodHRwczovL3dvcmxkY2F0Lm9yZy9vY2xjLWNvbmZpZy9pbnN0aXR1dGlvbi9kYXRhLzU2NTYiLCJhZGRyZXNzIjp7InN0cmVldDEiOiJVbml2IG9mIENhbGlmb3JuaWEgSXJ2aW5lIiwiY2l0eSI6IklydmluZSIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTI2OTciLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjMzLjY0NzI2NiwibG9uIjotMTE3Ljg0MTAzNH0sImluc3RpdHV0aW9uVHlwZSI6IkFDQURFTUlDIn0seyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6IkNVWSIsInJlZ2lzdHJ5SWQiOjU2ODksImluc3RpdHV0aW9uTnVtYmVyIjoxOTkzLCJpbnN0aXR1dGlvbk5hbWUiOiJVQyBCZXJrZWxleSBMaWJyYXJpZXMiLCJoYXNPUEFDTGluayI6dHJ1ZSwic2VsZiI6Imh0dHBzOi8vd29ybGRjYXQub3JnL29jbGMtY29uZmlnL2luc3RpdHV0aW9uL2RhdGEvNTY4OSIsImFkZHJlc3MiOnsic3RyZWV0MSI6IjEzMyBEb2UgTGlicmFyeSIsInN0cmVldDIiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEiLCJjaXR5IjoiQmVya2VsZXkiLCJzdGF0ZSI6IlVTLUNBIiwicG9zdGFsQ29kZSI6Ijk0NzIwLTYwMDAiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3Ljg3NTc1LCJsb24iOi0xMjIuMjQzNDF9LCJpbnN0aXR1dGlvblR5cGUiOiJBQ0FERU1JQyJ9XX19XX0= - recorded_at: Mon, 13 Jan 2025 23:13:44 GMT -recorded_with: VCR 6.3.1 + eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6Ijg1ODMzMjg1IiwidGl0bGUiOiJUaGUgcXVpZXQgZ2lybCIsImNyZWF0b3IiOiJQZXRlciBIw7hlZyIsImRhdGUiOiLCqTIwMDciLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMjAwNyIsImxhbmd1YWdlIjoiZW5nIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsImVkaXRpb24iOiIxc3QgQW1lcmljYW4gZWQiLCJwdWJsaXNoZXIiOiJGYXJyYXIsIFN0cmF1cywgYW5kIEdpcm91eCIsInB1YmxpY2F0aW9uUGxhY2UiOiJOZXcgWW9yayIsImlzYm5zIjpbIjk3ODAzNzQyNjM2OTAiLCIwMzc0MjYzNjk4Il0sIm1lcmdlZE9jbGNOdW1iZXJzIjpbIjk2NjQ5Mzg4NiIsIjk2Nzg0MjE0OSIsIjEwMjI3MTU1MzAiLCIxMDYwNjk1OTE0IiwiMTIwMTQ2NDAzNiIsIjEyMzAzNzE4ODYiLCIxMzAzODAxODEyIl0sImNhdGFsb2dpbmdJbmZvIjp7ImNhdGFsb2dpbmdBZ2VuY3kiOiJETEMiLCJjYXRhbG9naW5nTGFuZ3VhZ2UiOiJlbmciLCJsZXZlbE9mQ2F0YWxvZ2luZyI6IiAiLCJ0cmFuc2NyaWJpbmdBZ2VuY3kiOiJETEMifSwiaW5zdGl0dXRpb25Ib2xkaW5nIjp7InRvdGFsSG9sZGluZ0NvdW50Ijo0LCJicmllZkhvbGRpbmdzIjpbeyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6Ik1FUlVDIiwicmVnaXN0cnlJZCI6NDY5MSwiaW5zdGl0dXRpb25OdW1iZXIiOjM2MjEzLCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIE1lcmNlZCIsImFsc29DYWxsZWQiOiJVQyBNZXJjZWQgTGlicmFyeSIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS80NjkxIiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiTGVvICZhbXA7IERvdHRpZSBLb2xsaWdpYW4gTGlicmFyeSIsInN0cmVldDIiOiI1MjAwIE4gTGFrZSBSb2FkIiwiY2l0eSI6Ik1lcmNlZCIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTUzNDMiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3LjM2NjI1NywibG9uIjotMTIwLjQyNDU3fSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifSx7ImNvdW50cnkiOiJVUyIsInN0YXRlIjoiVVMtQ0EiLCJvY2xjU3ltYm9sIjoiWkFQIiwicmVnaXN0cnlJZCI6NTY5MCwiaW5zdGl0dXRpb25OdW1iZXIiOjQyMTgsImluc3RpdHV0aW9uTmFtZSI6IlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgU3lzdGVtd2lkZSBMaWJyYXJ5IEZhY2lsaXR5LU5vcnRoIiwiYWxzb0NhbGxlZCI6IlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgU0xGLU47IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgU0xGLU5vcnRoIiwiaGFzT1BBQ0xpbmsiOnRydWUsInNlbGYiOiJodHRwczovL3dvcmxkY2F0Lm9yZy9vY2xjLWNvbmZpZy9pbnN0aXR1dGlvbi9kYXRhLzU2OTAiLCJhZGRyZXNzIjp7InN0cmVldDEiOiJSaWNobW9uZCBGaWVsZCBTdGF0aW9uIiwic3RyZWV0MiI6IjEzMDEgUyA0NlRIIFNUIEJMREcgNDAwIiwiY2l0eSI6IlJpY2htb25kIiwic3RhdGUiOiJVUy1DQSIsInBvc3RhbENvZGUiOiI5NDgwNCIsImNvdW50cnkiOiJVUyIsImxhdCI6MzcuOTE3ODMsImxvbiI6LTEyMi4zMzUwNX0sImluc3RpdHV0aW9uVHlwZSI6IkFDQURFTUlDIn0seyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6IkNVSSIsInJlZ2lzdHJ5SWQiOjU2NTYsImluc3RpdHV0aW9uTnVtYmVyIjoxMTAxLCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIElydmluZSIsImFsc29DYWxsZWQiOiJMYW5nc29uIExpYnJhcnkiLCJoYXNPUEFDTGluayI6dHJ1ZSwic2VsZiI6Imh0dHBzOi8vd29ybGRjYXQub3JnL29jbGMtY29uZmlnL2luc3RpdHV0aW9uL2RhdGEvNTY1NiIsImFkZHJlc3MiOnsic3RyZWV0MSI6IlVuaXYgb2YgQ2FsaWZvcm5pYSBJcnZpbmUiLCJjaXR5IjoiSXJ2aW5lIiwic3RhdGUiOiJVUy1DQSIsInBvc3RhbENvZGUiOiI5MjY5NyIsImNvdW50cnkiOiJVUyIsImxhdCI6MzMuNjQ3MjY2LCJsb24iOi0xMTcuODQxMDM0fSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifSx7ImNvdW50cnkiOiJVUyIsInN0YXRlIjoiVVMtQ0EiLCJvY2xjU3ltYm9sIjoiQ1VZIiwicmVnaXN0cnlJZCI6NTY4OSwiaW5zdGl0dXRpb25OdW1iZXIiOjE5OTMsImluc3RpdHV0aW9uTmFtZSI6IlVDIEJlcmtlbGV5IExpYnJhcmllcyIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS81Njg5IiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiMTMzIERvZSBMaWJyYXJ5Iiwic3RyZWV0MiI6IlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSIsImNpdHkiOiJCZXJrZWxleSIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTQ3MjAtNjAwMCIsImNvdW50cnkiOiJVUyIsImxhdCI6MzcuODc1NzUsImxvbiI6LTEyMi4yNDM0MX0sImluc3RpdHV0aW9uVHlwZSI6IkFDQURFTUlDIn1dfX1dfQ== + recorded_at: Tue, 06 Jan 2026 16:51:52 GMT +recorded_with: VCR 6.4.0 diff --git a/spec/cassettes/libraries_request/execute_holdings_2.yml b/spec/cassettes/libraries_request/execute_holdings_2.yml index d4041d9..582363c 100644 --- a/spec/cassettes/libraries_request/execute_holdings_2.yml +++ b/spec/cassettes/libraries_request/execute_holdings_2.yml @@ -23,60 +23,60 @@ http_interactions: message: '' headers: Date: - - Mon, 13 Jan 2025 23:13:45 GMT + - Tue, 06 Jan 2026 16:51:53 GMT Content-Type: - application/json;charset=UTF-8 Transfer-Encoding: - chunked Connection: - keep-alive - X-Ratelimit-Remaining-Month: - - '149994' - Ratelimit-Remaining: - - '149994' - X-Ratelimit-Limit-Month: - - '150000' X-Ratelimit-Limit-Day: - '150000' + Ratelimit-Remaining: + - '149999' + Ratelimit-Reset: + - '25687' X-Ratelimit-Remaining-Day: - - '149994' + - '149999' + X-Ratelimit-Remaining-Month: + - '149999' Ratelimit-Limit: - '150000' - Ratelimit-Reset: - - '2421975' + X-Ratelimit-Limit-Month: + - '150000' X-Oclc-Requestid: - - b09e9457-bad9-4d1a-a6c3-9d29e6a304e1 + - ef792cc9-d9b0-4d87-b10b-cbe30c99bddf X-Oclc-Selfid: - - f89f6389-35c9-4f33-8120-0adb77298526 + - 7b94b97d-9bd4-4881-b5c5-30dce9ab7a46 Cache-Control: - max-age=3600 Kong-Request-Id: - - 7dc290f2-87f5-4e2f-81ca-094a9706b8e7#12758341 + - 21bd1c46-4eb5-42c7-b3eb-0df3d1401afb#177687726 X-Kong-Upstream-Latency: - - '59' + - '10' X-Kong-Proxy-Latency: - - '2' + - '27' Via: - - 1.1 kong/3.8.0.0-enterprise-edition + - 1.1 kong/3.11.0.6-enterprise-edition X-Kong-Request-Id: - - 261a904cbcbc0b7c0169ed7d79a59b38 + - 429ad57c8490134ac8ed9819b23fdb09 Strict-Transport-Security: - max-age=31536000; includeSubDomains Cf-Cache-Status: - DYNAMIC Set-Cookie: - - __cf_bm=VafgAPnEMRdYBqbFx.wjCPjgqrHQcLtuYco1Z5sShWM-1736810025-1.0.1.1-tncICuQIzFn_DyXiAvzSpKC.CbgN4flE5_lFmSZQz6l4iTVrzZJ5rRV2r5G1YcpdPy0.ld4h63tzlp39O8khmQ; - path=/; expires=Mon, 13-Jan-25 23:43:45 GMT; domain=.oclc.org; HttpOnly; Secure; + - __cf_bm=A2Tavlzf8t_zDBnh9gYq7zgSInJWbw1xb5pzm7s9Nkc-1767718313-1.0.1.1-htWnrzjEwreGY2_gWcJxYwMMBFPBMM3Xg8lddkMiwus2dVmPTndLY_EyJjUKUpnwCRfE341uwZdDbLio.muG7WLv9gAQFLHNP3SDfO6v89DlZdpg02O62bkxzOjpw9aL; + path=/; expires=Tue, 06-Jan-26 17:21:53 GMT; domain=.oclc.org; HttpOnly; Secure; SameSite=None - - _cfuvid=mx2c9QMr8MIE5uYOKAIEDutn_0v3uhOt9Z6un9ar2EA-1736810025210-0.0.1.1-604800000; + - _cfuvid=EmpdnVNEfYVkYvQ83AdBq7rz7vkw.h2FEClx97kznKo-1767718313134-0.0.1.1-604800000; path=/; domain=.oclc.org; HttpOnly; Secure; SameSite=None Server: - cloudflare Cf-Ray: - - 9019141f8b650fba-LAX + - 9b9cb900697757a9-SJC body: encoding: ASCII-8BIT string: !binary |- - eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6Ijg1ODMzMjg1IiwidGl0bGUiOiJUaGUgcXVpZXQgZ2lybCIsImNyZWF0b3IiOiJQZXRlciBIw7hlZyIsImRhdGUiOiLCqTIwMDciLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMjAwNyIsImxhbmd1YWdlIjoiZW5nIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsImVkaXRpb24iOiIxc3QgQW1lcmljYW4gZWQiLCJwdWJsaXNoZXIiOiJGYXJyYXIsIFN0cmF1cywgYW5kIEdpcm91eCIsInB1YmxpY2F0aW9uUGxhY2UiOiJOZXcgWW9yayIsImlzYm5zIjpbIjk3ODAzNzQyNjM2OTAiLCIwMzc0MjYzNjk4Il0sIm1lcmdlZE9jbGNOdW1iZXJzIjpbIjk2NjQ5Mzg4NiIsIjk2Nzg0MjE0OSIsIjEwMjI3MTU1MzAiLCIxMDYwNjk1OTE0IiwiMTIwMTQ2NDAzNiIsIjEyMzAzNzE4ODYiLCIxMzAzODAxODEyIl0sImNhdGFsb2dpbmdJbmZvIjp7ImNhdGFsb2dpbmdBZ2VuY3kiOiJETEMiLCJjYXRhbG9naW5nTGFuZ3VhZ2UiOiJlbmciLCJsZXZlbE9mQ2F0YWxvZ2luZyI6IiAiLCJ0cmFuc2NyaWJpbmdBZ2VuY3kiOiJETEMifSwiaW5zdGl0dXRpb25Ib2xkaW5nIjp7InRvdGFsSG9sZGluZ0NvdW50IjoxLCJicmllZkhvbGRpbmdzIjpbeyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6IlpBUCIsInJlZ2lzdHJ5SWQiOjU2OTAsImluc3RpdHV0aW9uTnVtYmVyIjo0MjE4LCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIE5STEYiLCJhbHNvQ2FsbGVkIjoiTm9ydGhlcm4gUmVnaW9uYWwgTGlicmFyeSBGYWNpbGl0eSIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS81NjkwIiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiUmljaG1vbmQgRmllbGQgU3RhdGlvbiBCbGRnLiA0MDAiLCJzdHJlZXQyIjoiTWVhZGUgYW5kIFNvdXRoIDQ3dGggU3QuIiwiY2l0eSI6IlJpY2htb25kIiwic3RhdGUiOiJVUy1DQSIsInBvc3RhbENvZGUiOiI5NDgwNC00Njk4IiwiY291bnRyeSI6IlVTIiwibGF0IjozNy45MTc2NywibG9uIjotMTIyLjMzMTY4fSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifV19fV19 - recorded_at: Mon, 13 Jan 2025 23:13:45 GMT -recorded_with: VCR 6.3.1 + eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6Ijg1ODMzMjg1IiwidGl0bGUiOiJUaGUgcXVpZXQgZ2lybCIsImNyZWF0b3IiOiJQZXRlciBIw7hlZyIsImRhdGUiOiLCqTIwMDciLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMjAwNyIsImxhbmd1YWdlIjoiZW5nIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsImVkaXRpb24iOiIxc3QgQW1lcmljYW4gZWQiLCJwdWJsaXNoZXIiOiJGYXJyYXIsIFN0cmF1cywgYW5kIEdpcm91eCIsInB1YmxpY2F0aW9uUGxhY2UiOiJOZXcgWW9yayIsImlzYm5zIjpbIjk3ODAzNzQyNjM2OTAiLCIwMzc0MjYzNjk4Il0sIm1lcmdlZE9jbGNOdW1iZXJzIjpbIjk2NjQ5Mzg4NiIsIjk2Nzg0MjE0OSIsIjEwMjI3MTU1MzAiLCIxMDYwNjk1OTE0IiwiMTIwMTQ2NDAzNiIsIjEyMzAzNzE4ODYiLCIxMzAzODAxODEyIl0sImNhdGFsb2dpbmdJbmZvIjp7ImNhdGFsb2dpbmdBZ2VuY3kiOiJETEMiLCJjYXRhbG9naW5nTGFuZ3VhZ2UiOiJlbmciLCJsZXZlbE9mQ2F0YWxvZ2luZyI6IiAiLCJ0cmFuc2NyaWJpbmdBZ2VuY3kiOiJETEMifSwiaW5zdGl0dXRpb25Ib2xkaW5nIjp7InRvdGFsSG9sZGluZ0NvdW50IjoxLCJicmllZkhvbGRpbmdzIjpbeyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6IlpBUCIsInJlZ2lzdHJ5SWQiOjU2OTAsImluc3RpdHV0aW9uTnVtYmVyIjo0MjE4LCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIFN5c3RlbXdpZGUgTGlicmFyeSBGYWNpbGl0eS1Ob3J0aCIsImFsc29DYWxsZWQiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIFNMRi1OOyBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIFNMRi1Ob3J0aCIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS81NjkwIiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiUmljaG1vbmQgRmllbGQgU3RhdGlvbiIsInN0cmVldDIiOiIxMzAxIFMgNDZUSCBTVCBCTERHIDQwMCIsImNpdHkiOiJSaWNobW9uZCIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTQ4MDQiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3LjkxNzgzLCJsb24iOi0xMjIuMzM1MDV9LCJpbnN0aXR1dGlvblR5cGUiOiJBQ0FERU1JQyJ9XX19XX0= + recorded_at: Tue, 06 Jan 2026 16:51:53 GMT +recorded_with: VCR 6.4.0 diff --git a/spec/cassettes/libraries_request/execute_holdings_3.yml b/spec/cassettes/libraries_request/execute_holdings_3.yml index 6699590..3dac992 100644 --- a/spec/cassettes/libraries_request/execute_holdings_3.yml +++ b/spec/cassettes/libraries_request/execute_holdings_3.yml @@ -23,60 +23,60 @@ http_interactions: message: '' headers: Date: - - Mon, 13 Jan 2025 23:13:46 GMT + - Tue, 06 Jan 2026 16:51:53 GMT Content-Type: - application/json;charset=UTF-8 Transfer-Encoding: - chunked Connection: - keep-alive - X-Ratelimit-Remaining-Month: - - '149993' - Ratelimit-Remaining: - - '149993' - X-Ratelimit-Limit-Month: - - '150000' X-Ratelimit-Limit-Day: - '150000' + Ratelimit-Remaining: + - '149999' + Ratelimit-Reset: + - '25687' X-Ratelimit-Remaining-Day: - - '149993' + - '149999' + X-Ratelimit-Remaining-Month: + - '149999' Ratelimit-Limit: - '150000' - Ratelimit-Reset: - - '2421975' + X-Ratelimit-Limit-Month: + - '150000' X-Oclc-Requestid: - - 561090c2-ced0-44b5-a7ae-d55d65d5921b + - 0ffb93d2-5d63-4b45-86d8-f7b2dcf5ffd9 X-Oclc-Selfid: - - e3ede4d1-dc72-49e7-96da-c6102d7e4b4c + - 9a3507a4-6a6e-4e04-81c8-ed333cc3cac1 Cache-Control: - max-age=3600 Kong-Request-Id: - - 7dc290f2-87f5-4e2f-81ca-094a9706b8e7#12758345 + - 21bd1c46-4eb5-42c7-b3eb-0df3d1401afb#177687751 X-Kong-Upstream-Latency: - - '693' + - '12' X-Kong-Proxy-Latency: - - '1' + - '22' Via: - - 1.1 kong/3.8.0.0-enterprise-edition + - 1.1 kong/3.11.0.6-enterprise-edition X-Kong-Request-Id: - - 8492190bdc6b5f36311be84f868f5357 + - b90bbb74ce261e0c6ec62228aa69e220 Strict-Transport-Security: - max-age=31536000; includeSubDomains Cf-Cache-Status: - DYNAMIC Set-Cookie: - - __cf_bm=W30ELwjVWhBnGA6cdQGbD0ua7VlMvjrN_FgPuLkb5g8-1736810026-1.0.1.1-2whzXAQq2OwaKSbAJKNw3VBK9H4d35OW9RQApR5o3qRllE40xTbFOmqv4SMrBtKpcMhiPvQNRxCnVqEd1DQs6g; - path=/; expires=Mon, 13-Jan-25 23:43:46 GMT; domain=.oclc.org; HttpOnly; Secure; + - __cf_bm=nivDC1wef5zDBwb_3hWWLOq6yd7CC6ld_IfAM1.dzQo-1767718313-1.0.1.1-JonewtEqEGIH1yWrD7vm0reF6BTxzOLhfIOqhFedJs1D26osPxuSeUqVHhsYTLP1juK6DdRmOcvrlia.aT_CG4dR_rB3gA4zJUqXaqqaSwdUBYO2ygZ69p5oujgf..Ju; + path=/; expires=Tue, 06-Jan-26 17:21:53 GMT; domain=.oclc.org; HttpOnly; Secure; SameSite=None - - _cfuvid=NQvm4sTO9nwwUTIyhJ50vaTnhaxpiRs1pLh2S6jPLsQ-1736810026371-0.0.1.1-604800000; + - _cfuvid=3UB9Ax2m_h8mJKn2CaAhAh1Mr6Dp8c5IqVzQyISun30-1767718313720-0.0.1.1-604800000; path=/; domain=.oclc.org; HttpOnly; Secure; SameSite=None Server: - cloudflare Cf-Ray: - - 90191422befb2f03-LAX + - 9b9cb9040b68f9c5-SJC body: encoding: ASCII-8BIT string: !binary |- eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6Ijg1ODMzMjg1IiwidGl0bGUiOiJUaGUgcXVpZXQgZ2lybCIsImNyZWF0b3IiOiJQZXRlciBIw7hlZyIsImRhdGUiOiLCqTIwMDciLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMjAwNyIsImxhbmd1YWdlIjoiZW5nIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsImVkaXRpb24iOiIxc3QgQW1lcmljYW4gZWQiLCJwdWJsaXNoZXIiOiJGYXJyYXIsIFN0cmF1cywgYW5kIEdpcm91eCIsInB1YmxpY2F0aW9uUGxhY2UiOiJOZXcgWW9yayIsImlzYm5zIjpbIjk3ODAzNzQyNjM2OTAiLCIwMzc0MjYzNjk4Il0sIm1lcmdlZE9jbGNOdW1iZXJzIjpbIjk2NjQ5Mzg4NiIsIjk2Nzg0MjE0OSIsIjEwMjI3MTU1MzAiLCIxMDYwNjk1OTE0IiwiMTIwMTQ2NDAzNiIsIjEyMzAzNzE4ODYiLCIxMzAzODAxODEyIl0sImNhdGFsb2dpbmdJbmZvIjp7ImNhdGFsb2dpbmdBZ2VuY3kiOiJETEMiLCJjYXRhbG9naW5nTGFuZ3VhZ2UiOiJlbmciLCJsZXZlbE9mQ2F0YWxvZ2luZyI6IiAiLCJ0cmFuc2NyaWJpbmdBZ2VuY3kiOiJETEMifSwiaW5zdGl0dXRpb25Ib2xkaW5nIjp7InRvdGFsSG9sZGluZ0NvdW50IjozLCJicmllZkhvbGRpbmdzIjpbeyJjb3VudHJ5IjoiVVMiLCJzdGF0ZSI6IlVTLUNBIiwib2NsY1N5bWJvbCI6Ik1FUlVDIiwicmVnaXN0cnlJZCI6NDY5MSwiaW5zdGl0dXRpb25OdW1iZXIiOjM2MjEzLCJpbnN0aXR1dGlvbk5hbWUiOiJVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIE1lcmNlZCIsImFsc29DYWxsZWQiOiJVQyBNZXJjZWQgTGlicmFyeSIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS80NjkxIiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiTGVvICZhbXA7IERvdHRpZSBLb2xsaWdpYW4gTGlicmFyeSIsInN0cmVldDIiOiI1MjAwIE4gTGFrZSBSb2FkIiwiY2l0eSI6Ik1lcmNlZCIsInN0YXRlIjoiVVMtQ0EiLCJwb3N0YWxDb2RlIjoiOTUzNDMiLCJjb3VudHJ5IjoiVVMiLCJsYXQiOjM3LjM2NjI1NywibG9uIjotMTIwLjQyNDU3fSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifSx7ImNvdW50cnkiOiJVUyIsInN0YXRlIjoiVVMtQ0EiLCJvY2xjU3ltYm9sIjoiQ1VJIiwicmVnaXN0cnlJZCI6NTY1NiwiaW5zdGl0dXRpb25OdW1iZXIiOjExMDEsImluc3RpdHV0aW9uTmFtZSI6IlVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgSXJ2aW5lIiwiYWxzb0NhbGxlZCI6Ikxhbmdzb24gTGlicmFyeSIsImhhc09QQUNMaW5rIjp0cnVlLCJzZWxmIjoiaHR0cHM6Ly93b3JsZGNhdC5vcmcvb2NsYy1jb25maWcvaW5zdGl0dXRpb24vZGF0YS81NjU2IiwiYWRkcmVzcyI6eyJzdHJlZXQxIjoiVW5pdiBvZiBDYWxpZm9ybmlhIElydmluZSIsImNpdHkiOiJJcnZpbmUiLCJzdGF0ZSI6IlVTLUNBIiwicG9zdGFsQ29kZSI6IjkyNjk3IiwiY291bnRyeSI6IlVTIiwibGF0IjozMy42NDcyNjYsImxvbiI6LTExNy44NDEwMzR9LCJpbnN0aXR1dGlvblR5cGUiOiJBQ0FERU1JQyJ9LHsiY291bnRyeSI6IlVTIiwic3RhdGUiOiJVUy1DQSIsIm9jbGNTeW1ib2wiOiJDVVkiLCJyZWdpc3RyeUlkIjo1Njg5LCJpbnN0aXR1dGlvbk51bWJlciI6MTk5MywiaW5zdGl0dXRpb25OYW1lIjoiVUMgQmVya2VsZXkgTGlicmFyaWVzIiwiaGFzT1BBQ0xpbmsiOnRydWUsInNlbGYiOiJodHRwczovL3dvcmxkY2F0Lm9yZy9vY2xjLWNvbmZpZy9pbnN0aXR1dGlvbi9kYXRhLzU2ODkiLCJhZGRyZXNzIjp7InN0cmVldDEiOiIxMzMgRG9lIExpYnJhcnkiLCJzdHJlZXQyIjoiVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIiwiY2l0eSI6IkJlcmtlbGV5Iiwic3RhdGUiOiJVUy1DQSIsInBvc3RhbENvZGUiOiI5NDcyMC02MDAwIiwiY291bnRyeSI6IlVTIiwibGF0IjozNy44NzU3NSwibG9uIjotMTIyLjI0MzQxfSwiaW5zdGl0dXRpb25UeXBlIjoiQUNBREVNSUMifV19fV19 - recorded_at: Mon, 13 Jan 2025 23:13:46 GMT -recorded_with: VCR 6.3.1 + recorded_at: Tue, 06 Jan 2026 16:51:53 GMT +recorded_with: VCR 6.4.0 diff --git a/spec/cassettes/libraries_request/execute_holdings_4.yml b/spec/cassettes/libraries_request/execute_holdings_4.yml index 876b644..334bc13 100644 --- a/spec/cassettes/libraries_request/execute_holdings_4.yml +++ b/spec/cassettes/libraries_request/execute_holdings_4.yml @@ -23,60 +23,60 @@ http_interactions: message: '' headers: Date: - - Mon, 13 Jan 2025 23:13:46 GMT + - Tue, 06 Jan 2026 16:51:54 GMT Content-Type: - application/json;charset=UTF-8 Transfer-Encoding: - chunked Connection: - keep-alive - X-Ratelimit-Limit-Month: - - '150000' - X-Ratelimit-Remaining-Month: - - '149992' X-Ratelimit-Limit-Day: - '150000' - X-Ratelimit-Remaining-Day: - - '149992' Ratelimit-Remaining: - - '149992' + - '149998' + Ratelimit-Reset: + - '25686' + X-Ratelimit-Remaining-Day: + - '149998' + X-Ratelimit-Remaining-Month: + - '149998' Ratelimit-Limit: - '150000' - Ratelimit-Reset: - - '2421974' + X-Ratelimit-Limit-Month: + - '150000' X-Oclc-Requestid: - - d4854fec-674b-488a-8fd0-1203a36034f7 + - e61b728e-74cd-42a2-9dc4-3a10b14ebbbf X-Oclc-Selfid: - - 766664b8-e444-4217-9915-6c436b5c3bb4 + - 85969e95-6c5d-424a-a7e0-16416f61823e Cache-Control: - max-age=3600 Kong-Request-Id: - - 27299ae4-e58f-4a3d-9c9d-1d539cf14d33#751811 + - 21bd1c46-4eb5-42c7-b3eb-0df3d1401afb#177687782 X-Kong-Upstream-Latency: - - '154' + - '28' X-Kong-Proxy-Latency: - - '2' + - '37' Via: - - 1.1 kong/3.8.0.0-enterprise-edition + - 1.1 kong/3.11.0.6-enterprise-edition X-Kong-Request-Id: - - de5a2a307ad5855f3e0bb50dff3f2d1b + - fba3dc47c4eef60c9ee6ce18ad8d0121 Strict-Transport-Security: - max-age=31536000; includeSubDomains Cf-Cache-Status: - DYNAMIC Set-Cookie: - - __cf_bm=ORttkfWGk90435YkLhbL200NZEj4jovFsomOl0XbP.w-1736810026-1.0.1.1-C4A0e4RlJghmgunm7gzZgh_dEzJohqZ6m9K6fFP4oeaLLZdR19rFHAKdW2YJb8wcU9m._uY3buBf_ekpJ8v3sA; - path=/; expires=Mon, 13-Jan-25 23:43:46 GMT; domain=.oclc.org; HttpOnly; Secure; + - __cf_bm=i4p9XhlHkynIZShBgEwksUXItp9pL.E2ovytwMUXuZg-1767718314-1.0.1.1-aY9wsWweU8z2q2hNAtGLUtrZMvLK5F0Yx8qXN7.zSeUfyLxt8nHFrtNhf5FluuedTUfXnDyFofG9TIFzFHTJ59mIfSPo0ZKId_HSAI56qIdLSYd4douDqMmfWqcdU8nw; + path=/; expires=Tue, 06-Jan-26 17:21:54 GMT; domain=.oclc.org; HttpOnly; Secure; SameSite=None - - _cfuvid=0bcUhvkERfqTTyzNzzvRDFCwOCPK2kAaMx6Jpl._5HQ-1736810026979-0.0.1.1-604800000; + - _cfuvid=yuCkCRtvA1Xj.l9KKaWDrmbr3sUXtU1tzy1iTjaXIlI-1767718314516-0.0.1.1-604800000; path=/; domain=.oclc.org; HttpOnly; Secure; SameSite=None Server: - cloudflare Cf-Ray: - - 90191429bf400fd9-LAX + - 9b9cb907aea87306-SJC body: encoding: ASCII-8BIT string: !binary |- eyJudW1iZXJPZlJlY29yZHMiOjEsImJyaWVmUmVjb3JkcyI6W3sib2NsY051bWJlciI6IjEwMDQ1MTkzIiwidGl0bGUiOiJEZSBTYWludC1Mb3VpcyBhIFRyaXBvbGkgcGFyIGxlIExhYyBUY2hhZCA6IHZveWFnZSBhdSB0cmF2ZXJzIGR1IFNvdWRhbiBldCBkdSBTYWhhcmEgYWNjb21wbGkgcGVuZGFudCBsZXMgYW5uZcyBZXMgMTg5MC05MS05MiIsImNyZWF0b3IiOiJQLi1MLiBNb250ZWlsIiwiZGF0ZSI6IlsxODk1P10iLCJtYWNoaW5lUmVhZGFibGVEYXRlIjoiMTg5NSIsImxhbmd1YWdlIjoiZnJlIiwiZ2VuZXJhbEZvcm1hdCI6IkJvb2siLCJzcGVjaWZpY0Zvcm1hdCI6IlByaW50Qm9vayIsInB1Ymxpc2hlciI6IkYuIEFsY2FuIiwicHVibGljYXRpb25QbGFjZSI6IlBhcmlzIiwibWVyZ2VkT2NsY051bWJlcnMiOlsiMTAwNzQ3MDU4MiJdLCJjYXRhbG9naW5nSW5mbyI6eyJjYXRhbG9naW5nQWdlbmN5IjoiQ1VGIiwiY2F0YWxvZ2luZ0xhbmd1YWdlIjoiZW5nIiwibGV2ZWxPZkNhdGFsb2dpbmciOiIgIiwidHJhbnNjcmliaW5nQWdlbmN5IjoiQ1VGIn0sImluc3RpdHV0aW9uSG9sZGluZyI6eyJ0b3RhbEhvbGRpbmdDb3VudCI6MH19XX0= - recorded_at: Mon, 13 Jan 2025 23:13:47 GMT -recorded_with: VCR 6.3.1 + recorded_at: Tue, 06 Jan 2026 16:51:54 GMT +recorded_with: VCR 6.4.0 diff --git a/spec/cassettes/oclc_auth/fetch_token.yml b/spec/cassettes/oclc_auth/fetch_token.yml index cb3f456..1574549 100644 --- a/spec/cassettes/oclc_auth/fetch_token.yml +++ b/spec/cassettes/oclc_auth/fetch_token.yml @@ -21,13 +21,13 @@ http_interactions: message: '' headers: X-Oclc-Requestid: - - 471bbf56-055b-4040-9c39-080ba32dabcd + - 7356c99b-6b94-4438-bb05-9255672483fe X-Oclc-Selfid: - - a7a2a1c5-57b2-447f-8598-64e7ae7a7947 + - 3a830484-bba0-4129-9d3c-07e19a2cd89f Set-Cookie: - - BIGipServermdc1_prdctn_p_oauth-m1-wskeyv3ws-443_8443=3660704266.64288.0000; - expires=Sat, 11-Jan-2025 00:14:58 GMT; path=/; Httponly; Secure - - JSESSIONID=634BDBCD22463783C6634B41F69E7650; Path=/; Secure; HttpOnly; SameSite=None + - BIGipServermdc1_prdctn_p_oauth-m1-wskeyv3ws-443_8443=3643927050.64288.0000; + expires=Sat, 10-Jan-2026 01:04:48 GMT; path=/; Httponly; Secure + - JSESSIONID=24965C50B4E4A53BF4437CD0411D282F; Path=/; Secure; HttpOnly; SameSite=None Vary: - Access-Control-Request-Headers - Access-Control-Request-Method @@ -49,10 +49,10 @@ http_interactions: Transfer-Encoding: - chunked Date: - - Fri, 10 Jan 2025 23:14:57 GMT + - Sat, 10 Jan 2026 00:04:48 GMT body: encoding: UTF-8 - string: '{"access_token":"tk_rqkymSEsOeMKWgexlfy1GrXu4NcPH2yI4ysU","expires_at":"2025-01-10 - 23:34:58Z","authenticating_institution_id":"5689","scope":"wcapi:view_institution_holdings","principalID":"","context_institution_id":"5689","scopes":"wcapi:view_institution_holdings","token_type":"bearer","expires_in":1199,"principalIDNS":""}' - recorded_at: Fri, 10 Jan 2025 23:14:58 GMT -recorded_with: VCR 6.3.1 + string: '{"access_token":"tk_DK8tds2ej3HbwvLS6j7yyPaYzLi4BdIzGY89","expires_at":"2026-01-10 + 00:24:48Z","authenticating_institution_id":"5689","scope":"wcapi:view_institution_holdings","principalID":"","context_institution_id":"5689","scopes":"wcapi:view_institution_holdings","token_type":"bearer","expires_in":1199,"principalIDNS":""}' + recorded_at: Sat, 10 Jan 2026 00:04:48 GMT +recorded_with: VCR 6.4.0 diff --git a/spec/cassettes/oclc_auth/refresh_token.yml b/spec/cassettes/oclc_auth/refresh_token.yml deleted file mode 100644 index 02475ba..0000000 --- a/spec/cassettes/oclc_auth/refresh_token.yml +++ /dev/null @@ -1,58 +0,0 @@ ---- -http_interactions: -- request: - method: post - uri: https://oauth.oclc.org/token?grant_type=client_credentials&scope=wcapi:view_institution_holdings - body: - encoding: UTF-8 - string: '' - headers: - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - application/json - User-Agent: - - Ruby - Authorization: - - "" - response: - status: - code: 200 - message: '' - headers: - X-Oclc-Requestid: - - 32040e79-4eb4-441c-b0b4-cd89c465fb14 - X-Oclc-Selfid: - - 5f76a91e-1a12-421c-91fb-ff0868d54de5 - Set-Cookie: - - BIGipServermdc1_prdctn_p_oauth-m1-wskeyv3ws-443_8443=3643927050.64288.0000; - expires=Tue, 14-Jan-2025 00:13:47 GMT; path=/; Httponly; Secure - - JSESSIONID=D3C312F07DAE52057E0C6A3B5F5CDDC0; Path=/; Secure; HttpOnly; SameSite=None - Vary: - - Access-Control-Request-Headers - - Access-Control-Request-Method - - Origin - Cache-Control: - - no-store - Pragma: - - no-cache - Strict-Transport-Security: - - max-age=31536000 ; includeSubDomains - X-Xss-Protection: - - '0' - X-Frame-Options: - - DENY - X-Content-Type-Options: - - nosniff - Content-Type: - - application/json;charset=UTF-8 - Transfer-Encoding: - - chunked - Date: - - Mon, 13 Jan 2025 23:13:46 GMT - body: - encoding: UTF-8 - string: '{"access_token":"tk_duMxBzoniydg88uTQYOaxP7YInAmKj46YNAW","expires_at":"2025-01-13 - 23:33:47Z","authenticating_institution_id":"5689","scope":"wcapi:view_institution_holdings","principalID":"","context_institution_id":"5689","scopes":"wcapi:view_institution_holdings","token_type":"bearer","expires_in":1199,"principalIDNS":""}' - recorded_at: Mon, 13 Jan 2025 23:13:47 GMT -recorded_with: VCR 6.3.1 diff --git a/spec/data/worldcat/85833285-all.xml b/spec/data/worldcat/85833285-all.xml index abe21f9..f96b136 100644 --- a/spec/data/worldcat/85833285-all.xml +++ b/spec/data/worldcat/85833285-all.xml @@ -67,12 +67,12 @@ http://worldcat.org/registry/institutions/ -University of California, NRLF +University of California, SLFN Richmond, CA 94804 United States -https://www.worldcat.org/wcpa/oclc/85833285?page=frame&url=http%3A%2F%2Foskicat.berkeley.edu%2Fsearch%2Fi9780374263690%26checksum%3D26ced03ddcec265a5a532c77e3acd6b6&title=University+of+California%2C+NRLF&linktype=opac&detail=ZAP%3AUniversity+of+California%2C+NRLF%3AAcademic Library&app=wcapi&id= +https://www.worldcat.org/wcpa/oclc/85833285?page=frame&url=http%3A%2F%2Foskicat.berkeley.edu%2Fsearch%2Fi9780374263690%26checksum%3D26ced03ddcec265a5a532c77e3acd6b6&title=University+of+California%2C+SLFN&linktype=opac&detail=ZAP%3AUniversity+of+California%2C+SLFN%3AAcademic Library&app=wcapi&id= diff --git a/spec/data/worldcat/85833285-rlf.xml b/spec/data/worldcat/85833285-rlf.xml index 79ba57e..7a77e83 100644 --- a/spec/data/worldcat/85833285-rlf.xml +++ b/spec/data/worldcat/85833285-rlf.xml @@ -7,12 +7,12 @@ http://worldcat.org/registry/institutions/ -University of California, NRLF +University of California, SLFN Richmond, CA 94804 United States -https://www.worldcat.org/wcpa/oclc/85833285?page=frame&url=http%3A%2F%2Foskicat.berkeley.edu%2Fsearch%2Fi9780374263690%26checksum%3D26ced03ddcec265a5a532c77e3acd6b6&title=University+of+California%2C+NRLF&linktype=opac&detail=ZAP%3AUniversity+of+California%2C+NRLF%3AAcademic Library&app=wcapi&id= +https://www.worldcat.org/wcpa/oclc/85833285?page=frame&url=http%3A%2F%2Foskicat.berkeley.edu%2Fsearch%2Fi9780374263690%26checksum%3D26ced03ddcec265a5a532c77e3acd6b6&title=University+of+California%2C+SLFN&linktype=opac&detail=ZAP%3AUniversity+of+California%2C+SLFN%3AAcademic Library&app=wcapi&id= diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b49491d..18348d2 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -20,8 +20,8 @@ config.filter_sensitive_data('') { ENV.fetch('LIT_WORLDCAT_API_KEY', nil) } config.filter_sensitive_data('') { ENV.fetch('LIT_WORLDCAT_API_SECRET', nil) } - # Allow external connections to specific URLs if needed - config.allow_http_connections_when_no_cassette = true + # NO...no real HTTP connections unless we're re-recording VCR + config.allow_http_connections_when_no_cassette = false # Only record new cassettes when we explicitly allow it config.default_cassette_options = {