search_cis()
and search_all_cis(), including Boolean, exact-phrase, exclusion, range,
boosting, and field-specific query examples. Advanced queries can be passed
directly through q by starting them with *; the package handles URL
encoding.Fixed parsing of question and time-series search results after the CIS changed
the order of their metadata fields. Time-series results now also include the
numeric data_points field reported by the catalog.
Added regression tests for question and time-series search result parsing and for preserving advanced Lucene expressions when catalog URLs are built.
Network GET requests are now spaced by one second per origin within each R
session. HTTP 429 responses retry up to five times, respecting Retry-After
(seconds or HTTP date) or using exponential backoff with jitter capped at
60 seconds. Configure this with opencis.request_interval and
opencis.max_retries. Cached responses do not wait or use the network.
search_all_cis() now distinguishes failed requests from the end of the
catalog. It warns explicitly when results are incomplete, returns the rows
collected so far with complete = FALSE and next_page attributes, and
accepts start to resume with the same filters. Successful searches have
complete = TRUE.
Failed search_cis() calls are no longer memoised, allowing later calls to
retry the failed page. Successful HTTP responses retain the disk cache.
Added regression tests for rate limiting, retry exhaustion, Retry-After
parsing, retries after anti-bot verification, and incomplete search recovery.
Added automatic handling of the CIS proof-of-work anti-bot challenge. HTTP requests now keep a stable session and user agent, preserve cookies, extract the challenge parameters from the returned HTML, solve the SHA-256 proof of work, submit it to the CIS endpoint, and retry the original request.
Added a persistent HTTP disk cache for successful CIS responses, including catalog pages, study pages, and ZIP downloads. Cached entries expire after 24 hours by default and are evicted using an LRU policy when the cache reaches its default 512 MB limit.
Added cache_info() to inspect the active cache directory, expiration and
size limits, entry count, and current disk usage.
clear_cache() now clears memoised results, persistent HTTP responses, HTTP
sessions, and session cookies. Use clear_cache(disk = FALSE) to retain the
persistent disk cache.
Anti-bot challenge pages, unsuccessful HTTP responses, and Set-Cookie
headers are excluded from the disk cache.
Added configuration options for enabling the cache, choosing its directory,
and controlling expiration and maximum size: opencis.cache,
opencis.cache_dir, opencis.cache_max_age, and
opencis.cache_max_size.
Added automated tests covering proof-of-work calculation, challenge parsing, session reuse, persistent response caching, binary downloads, cache clearing, and exclusion of sensitive or unsuccessful responses.
Network-dependent examples now run only in interactive sessions so package checks do not depend on the availability of the external CIS service.