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.