-
v4.0.0
StableAll checks were successfulPublish (NPM) / publish (release) Successful in 9sPublish (JSR) / publish (release) Successful in 13sPublish (Maven) / publish (release) Successful in 1m0sci-orchestrator / provision running on cpx42 in fsn1Publish (crates.io) / publish (release) Successful in 23sreleased this
2026-10-04 15:06:17 +02:00 | 0 commits to main since this releasev4.0.0
JavaScript, TypeScript lib
decodeCardreads Lazo cards with a 4-byte UID. A 4K chip can carry a 4-byte UID, so the chip and the UID length are detected separately from block 0, andCard.uidis 4 or 7 bytes on a 4K chipCardType.LazoTopUp→CardType.LazoTopUp371FCardType.LazoTopUp375Fadded for the second Lazo card type,0D375FCard.journeySummary→JourneySummarySlot, either{ state: "read", summary }or{ state: "unknown", error }, so a block 10 that does not decode no longer throws away the whole card.decodeJourneySummarystill throws on itJourneySummary.transfersLeft→paidMarker, since byte [13] is only known as0x63after a paid journey and0x62after a free transfer- The block 0 error names the bytes it read
Rust lib
Card::decodereads Lazo cards with a 4-byte UID. A 4K chip can carry a 4-byte UID, soUid::decodereturns(Uid, Chip)andUid::chipis removedCard::chip,CardType::chip()andChip::sectors()addedCardType::LazoTopUp→CardType::LazoTopUp371FCardType::LazoTopUp375Fadded for the second Lazo card type,0D375F, soCardType::ALLis now[Self; 5]Card::journey_summary→Option<Result<JourneySummary>>, so a block 10 that does not decode no longer throws away the whole card.JourneySummary::decodestill returns the errorJourneySummary::transfers_left→paid_marker, since byte [13] is only known as0x63after a paid journey and0x62after a free transferError::Sak→Error::Sak { byte_5, byte_7 }, the bytes it read
Java, Kotlin lib
Card.decodereads Lazo cards with a 4-byte UID. A 4K chip can carry a 4-byte UID, soUid.of(byte[])→Uid.of(byte[], Chip), andChip.uidLength()andChip.ofUidLength(int)are removedCardType.LAZO_TOP_UP→CardType.LAZO_TOP_UP_371FCardType.LAZO_TOP_UP_375Fadded for the second Lazo card type,0D375FCard.journeySummary()→Optional<JourneySummarySlot>, eitherReadorUnknowncarrying theCardFormatException, so a block 10 that does not decode no longer throws away the whole card.JourneySummary.decodestill throws on it- The
JourneySummarycomponenttransfersLeft→paidMarker, since byte [13] is only known as0x63after a paid journey and0x62after a free transfer - The block 0 error names the bytes it read