Skip to content

v2.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Aug 01:28
· 24 commits to master since this release

2.0.0 (2026-08-27)

⚠ BREAKING CHANGES

  • package: the package no longer ships CommonJS output and now
    requires Node.js >= 22. Consumers on CJS must use dynamic import() or
    migrate to ESM.
  • api: aniLink.anilist.query.like() has been removed; use aniLink.anilist.query.page.likes({ likeableId, type }) instead.
  • api: Page.followers and Page.followings now require userId at the type level; calls omitting it already failed against the AniList API.
  • api: operations now live under aniLink.anilist.* instead of
    directly on the AniLink instance (aniLink.media(...) becomes
    aniLink.anilist.media(...)).
  • Extract the operation surface from AniLink.ts into
    src/apis/anilist/facade.ts (buildAniListApi / AniListApi)
  • Move shared transport plumbing (endpoint, auth token, request helper)
    into APIWrapper so operation classes only declare variables, document,
    and a thin method
  • Relocate GraphQL selection-set constants from interfaces/ to a
    dedicated schemas/ tree
  • Update generate-explorer-manifest to parse facade.ts and scan schemas/

✨ Features

  • anilist: add like query and review ratings (2416574)
  • api: accept per-provider credentials in the AniLink constructor (7170754)
  • api: accept per-request transport options on every operation (44aa4d0)
  • api: add anilist subpath export for provider-scoped imports (e7fefb7)
  • api: add concurrent page fetching to pagination helpers (2d4806e)
  • api: add pagination and media-list helper capabilities (24cdc95)
  • api: export pagination helpers and client options from AniLink (21d6764)
  • api: retry by default, add rate-limit pacing and circuit breaker (39d61a8)
  • api: scope transport options per client and classify GraphQL failures (bc95b9b)
  • api: type delete, like, and AniChart mutation returns (caa56a5)
  • api: validate custom GraphQL documents and type custom() generically (c000ba1)
  • auth: add AniList OAuth2 authorization-code helpers (7bafc4b)
  • auth: route token requests through the shared request pipeline (f25dfbb)
  • auth: sanitize token errors and add state and expiry helpers (d18711f)
  • base: add auth-required request handling (4fdc8ac)
  • base: add typed transport errors and request options (a5256af)
  • explorer: add AniLink API Explorer for building and testing calls live (af9a72f)
  • explorer: format and highlight GraphQL queries (938e239)
  • requests: add retry policy and normalized transport errors (1a9d8f5)
  • scripts: add provider selection to schema comparison CLI (63f20c8)

🐛 Bug Fixes

  • anilist: align response contracts with API schema (32f74f8)
  • anilist: correct API operation contracts (7ffd5fe)
  • api-compare: parse inline mappings in explorer manifest generator (9fe0983)
  • api: align response types with the AniList schema (0858d63)
  • api: always validate variables in collection and statistics queries (653ca41)
  • api: clamp perPage and perChunk to AniList caps (023fa22)
  • api: enforce real AniList variable contracts with requireVariables (de31bfc)
  • api: make character query variables optional (ac6c26e)
  • api: point operation @see links at specific AniList reference pages (868c159)
  • api: reject unknown variable keys by default (00bb7ff)
  • api: render objects and arrays in variable validation errors (5f6a2f6)
  • api: require userId for followers and followings (17bbd0d)
  • api: throw typed validation error from updateFavouriteOrder (c2cb640)
  • explorer: enforce [hidden] attribute over display:flex builder divs (b33707a)
  • explorer: protect tokens, guard races, and restore keyboard access (5a4780a)
  • explorer: rewrite JSON highlighting in a tested pure-logic core (11d788b)
  • package: publish typed named-export package (f9c7363)
  • transport: scope circuit-breaker state per upstream host (da60ecc)
  • unwrap single-field AniList responses (d98bf11)
  • validation: enforce nested variable validation (83b59a3)

⚡ Performance

  • build: ship a single TypeScript declaration file (bcbb6ee)
  • explorer: ship minified operations.json manifest (92b5d88)

♻️ Refactoring

  • anilist: flatten media list collection response (136eb1e)
  • api: annotate enum mapping constants as readonly (acbf579)
  • api: decompose AniList facade into type and wiring modules (2d32a3f)
  • api: derive operation wiring from a declarative registry (d12d61c)
  • api: extract provider-neutral pagination core (c05faab)
  • api: generate response interfaces from schema fragments (db65ce1)
  • api: move AniList operations behind anilist facade (60b3c2d)
  • api: relocate APIWrapper beside its AniList consumers (14f1d7e)
  • api: remove redundant Like query (bd180db)
  • api: remove unused schema imports from response interfaces (d934cc9)
  • api: restructure providers under graphql/ and rest/ with shared operation bases (89b44b8)
  • api: reuse HttpMethod type in RestExecuteOptions (245ffe6)
  • api: route operations through declarative execute pipeline (6b7e946)
  • api: split anilist-api-type into facade group modules (5a27644)
  • api: wire AniList paginator onto the shared pagination core (fc0b6d5)
  • base: centralize GraphQL response unwrapping (04e6bd8)
  • base: extract unwrapSingleRootField helper (09c4894)
  • base: schedule sleep timeout before abort handler (d4d1358)
  • scripts: move api-compare library to lib/api-compare (2a5969b)

📚 Documentation

  • add contributing guide and changelog stub (23ccd05)
  • add project badges (f8ab890)
  • add upstream compatibility policy, auth examples, and contributor guardrails (57cafbd)
  • anilist: add AniList reference links (3fb6722)
  • anilist: simplify media list deletion example (5f2dc95)
  • anilist: update AniList API examples (5f2bb30)
  • anilist: update HTML query option examples (3adcca7)
  • api-compare: render dated upstream coverage into the comparison report (980e83c)
  • api: refresh examples and API docstrings (40d0187)
  • fix stale Paginator path in MediaListCollection chunk guide (5ca1926)
  • readme: document client options, hooks, errors, and OAuth state (853986a)
  • rewrite project overview (1a4631d)

💎 Style

  • api: collapse delete mutation signatures to single lines (9711e58)
  • format source and tests with Prettier (4832b0f)

📦 Build

  • add AniList API comparison tooling (01ea72c)
  • align the local check aggregate with CI quality gates (690ab73)
  • anilist-api: expand schema comparison contracts (6d414b8)
  • anilist-api: improve schema comparison reporting (5f63c55)
  • codegen: add interface generator engine with manifest and unit tests (6a9984d)
  • codegen: replace schema:sync checker with interfaces:generate check (4c4381d)
  • configure Prettier formatting (c0c0ccc)
  • deps: add fast-check for property-based testing (f28d55c)
  • deps: align @types/node with the Node 22 engines floor (7c2af32)
  • deps: remove unused eslint plugins (0a08bc2)
  • docs: migrate Typedoc stack (4bf1c38)
  • lint: enable type-aware and security-focused ESLint rules (8b0c9ff)
  • lint: enforce eslint and prettier on explorer sources (eb10385)
  • migrate test tooling from Jest to Vitest (ed232d4)
  • modernize ESLint tooling (881e209)
  • modernize TypeScript tooling (ebc7d30)
  • package: require Node.js 20 (45015bd)
  • package: ship ESM-only unbuild bundle and require Node 22 (e8ed796)

🔧 CI/CD

  • add AniList API comparison workflow (a0d1e01)
  • add AniList integration workflow (02ba421)
  • add automated verification workflow (a7c0f1a)
  • add dry-run mode for release workflow (23dff44)
  • add packaged package smoke job (da11275)
  • add semantic-release dry-run support (a220c8c)
  • api-compare: add strict mode, weekly live schedule, and discrepancy annotations (b739ef3)
  • bound jobs, adopt official Pages flow, and gate releases on live checks (6231976)
  • cancel superseded runs, run on Node 22, gate npm publishing (2f1b4b4)
  • configure Dependabot GitHub Actions updates (46b32f3)
  • dependabot: remove duplicate npm security update rule (72fe6c0)
  • deps: group dependabot updates and add daily security-only stream (1a56e94)
  • docs: strengthen JSDoc validation (59da56e)
  • docs: validate AniList API reference links (6dd4310)
  • docs: validate AniList reference links (be4f436)
  • enforce JSDoc and script validation (07e2595)
  • fail when ANILIST_TOKEN secret is missing (2832f6c)
  • gate release on successful CI (1849670)
  • gate schema/interface sync and snapshot comparison (169098d)
  • include formatting and JSDoc checks in validation (1e9a252)
  • publish generated documentation to gh-pages (c99ae6a)
  • reduce release workflow timeout (59c994c)
  • release: add provenance permission (8d9cffc)
  • release: add semantic-release automation [skip ci] (bb50a94)
  • release: omit npm token from release job (daa6f51)
  • remove Jest test workflow (b4a2dd5)
  • update analysis and documentation workflows (34ed87c)

🧪 Tests

  • api: add live integration coverage for AniList queries (1aac56a)
  • api: add property-based tests for variables and pagination (3368a65)
  • api: assert transport contract for every mutation operation (2040a7a)
  • api: cover custom query input guards (3ace603)
  • api: cover upstream error envelope normalization (981668c)
  • api: drive the real facade-to-Axios seam in a dedicated suite (ed5522e)
  • api: extract shared axios test double for transport suites (c8266d2)
  • api: fail fast on invalid ANILIST_TOKEN via credential preflight (e697e6f)
  • api: pin custom() document guard against adversarial inputs (fb6eb1c)
  • api: pin registry wiring coverage and manifest resolution (ec72352)
  • api: stop fixtures from sending variables operations do not accept (a97bf52)
  • cover auth headers, envelope unwrapping, and validation errors (f2d5a2a)
  • cover validation, pagination, retry, registry, and REST seams (87fd9f5)
  • enforce 90% coverage thresholds via v8 provider (edb5b74)
  • exclude integration tests from Vitest run (9e6ba01)
  • harden array coercion against hostile property values (2185a84)
  • lower unit test timeout to five seconds (f18ffb6)
  • remove any casts and unused mock parameters (f896c93)
  • restore the 90% branch coverage gate (c5daf4f)