Skip to content

v1.0.0 — no more stubs: full LWW/Ovid flow + generic form login

Choose a tag to compare

@drpwchen drpwchen released this 14 Jul 12:48

The public edition is now complete — every route kind ships working code. What had been "documented stubs" (the LWW/Ovid multi-step signed-URL flow and login()) is now real, config-driven code:

  • Full LWW/Ovid route: resolver → article number → viewer → signed pdfUrl with the exact Referer chain, an Ovid-OCE fallback for ahead-of-print articles, concurrent-licence-seat (E3) back-off, and a classic-Ovid branch that resolves the licensed platform via the standard SFX detailed-XML API.
  • Generic form login (auth: in config.yaml): covers EZproxy and NetScaler/Django-style gates out of the box — selectors, optional offline numeric-CAPTCHA OCR, persisted session cookies, and per-subdomain proxy-handshake inline login. SSO gates (OpenAthens/Shibboleth) remain auth.family: custom.
  • Unified ROUTES table (kind: tpl | meta | lww) — adding a publisher is one line.
  • routes CLI: per-route scorecard with entitlement attached to every failure, plus a holdings-gap list.
  • Entitlement gate in run_fetch: warns when the article's year is outside coverage before you misread the failure as a broken route.

Full details and the migration notes (PROVIDER_ROUTESROUTES) in the CHANGELOG.