• v2.0.0 f57ebad3f0

    v2.0.0
    All checks were successful
    ci-orchestrator / provision running on cx23 in fsn1
    Publish (NPM) / publish (release) Successful in 14s
    Publish (JSR) / publish (release) Successful in 21s
    Publish (crates.io) / publish (release) Successful in 38s
    Publish (Maven) / publish (release) Successful in 1m41s
    Stable

    hloth released this 2026-08-27 19:34:09 +02:00 | 10 commits to main since this release

    v2.0.0

    Full changelog

    JavaScript, TypeScript lib

    isFreeTransfer is removed and replaced by three predicates:

    • isFree(transaction) — the journey cost nothing
    • isTransfer(transaction) — is it the free transfer
    • isCheckOut(transaction) — a check-out at a gated station

    Transaction.runCounter is renamed to dutyTrip. Byte [09] is the trip index within the vehicle's daily duty, not a free-running counter. This affects both decodeTransaction output and encodeTransaction input.

    • isFreeTransfer(t) → isFree(t) or isTransfer(t)
    • t.runCounter → t.dutyTrip

    Rust lib

    Transaction::is_free_transfer is removed and replaced by three const fn predicates:

    • is_free() — the journey cost nothing
    • is_transfer() — is it the free transfer
    • is_check_out() — a check-out at a gated station

    Transaction::run_counter is renamed to duty_trip. Byte [09] is the trip index within the vehicle's daily duty, not a free-running counter. This affects struct literals, decoding and encoding.

    Upgrading:

    • t.is_free_transfer() → t.is_free() or t.is_transfer()
    • t.run_counter → t.duty_trip

    Java, Kotlin lib

    Transaction.isFreeTransfer() is removed and replaced by three methods:

    • isFree() — the journey cost nothing
    • isTransfer() — the one free transfer a balance card earns after a paid ride
    • isCheckOut() — a check-out at a gated station

    The Transaction record component runCounter is renamed to dutyTrip, so the accessor is now dutyTrip() and the builder method TransactionBuilder.dutyTrip(int). Byte [09] is the trip index within the vehicle's daily duty, not a free-running counter.

    Upgrading:

    • t.isFreeTransfer() → t.isFree() or t.isTransfer()
    • t.runCounter() → t.dutyTrip()
    • .runCounter(n) → .dutyTrip(n) on the builder