Releases: evex-dev/linejs
Release list
v3.2.1 fix(relation): serialize add friend requests correctly by @TsungPao
v3.2.0 - add some utils for square / media
What's Changed
- feat(timeline): Note media upload (uploadNoteMedia / uploadNoteCommentImage) by @mimimiku778 in #208
- feat(square): send image / video / audio to a SquareChat (OpenChat) by @mimimiku778 in #206
New Contributors
- @mimimiku778 made their first contribution in #208
Full Changelog: v3.1.7...v3.2.0
v3.1.7 - Fix 1:1 audio call T103 timeout
Fix: 1:1 audio call T103 timeout (#198)
1:1 audio calls were dropping with a T103 timeout ~10s after the callee answered. Three root causes fixed:
- conn_rsp mChanId: was hardcoded to
1instead of echoing the value from the caller'sconn_req - BEPI/MC handshake: added post-answer media-control channel negotiation that LINE's PLANET transport requires
- DATA SRTP: added SRTP key derivation for the DATA channel alongside AUDIO
Tested with a real 1:1 call — MEDIA READY achieved, no T103 timeout.
Co-authored-by: @botnick
v3.1.6 - Fix numeric message offset
What's Changed
Bug Fixes
- fix(thrift): use standard XOR zigzag decode in TMoreCompactProtocol (#201)
- Fixed
decodeZigZag()using a non-standard multiplication formula that was off by +1 for negative values - Fixed type-16 string-ID delta decoder using the same broken formula
- This caused numeric-only messages (e.g. "100") to be received with +1 to +3 offset, growing with sending speed
- Closes #200
- Fixed
Contributors
- @pchrphhee (bug report)
Full Changelog: v3.1.5...v3.1.6
v3.1.5 - E2EE QR Login Key Verification Fix
What's Changed
Bug Fixes
- fix(e2ee): verify transferred key pair after QR login and fallback to fresh registration (#197, fixes #195)
- After QR login, accounts with pre-existing E2EE identity keys could end up with a stored private key that doesn't match the server-registered public key, causing deterministic "Unsupported state or unable to authenticate data" GCM errors on text message decryption
decodeE2EEKeyV1now validates decoded keys before storing (privKey→pubKey derivation + server-registered pubKey check)- Falls back to registering a fresh Curve25519 key pair when verification fails
- Emits
e2ee:keyMismatchevent for observability
New Features
- feat(relation): add
findContactBySearchIdOrTicketV3andaddFriendByUserId(#196)RelationService.findContactBySearchIdOrTicketV3({ searchId })— resolves a Contact from a LINE ID via RE4RelationService.addFriendByUserId({ userId })— searches by id then adds as friendRelationService.findContactByPhoneV3({ phoneNumber })andaddFriendByPhone({ phoneNumber })
Full Changelog: v3.1.4...v3.1.5
v3.1.4 - Thrift I64 bigint serialization fix
Bug fix
- thrift: bigint
I64fields (e.g. a message ID passed totalk.react()) were serialized incorrectly. The value was handed tonode-int64as a decimal string, which the library parses as hex, corrupting the value on the wire and causing the LINE server to returnMESSAGE_NOT_FOUND/NO_MESSAGE. The writer now encodes the full 64-bit two's-complement value as a padded hex string. (#194, fixes #193)
Thanks to @asremix for the detailed report and root-cause analysis.
Full Changelog: v3.1.3...v3.1.4
v3.1.3 - Android Login and Docs Fixes
What's Changed
- [codex] fix docs for current public API by @EdamAme-x in #189
- [codex] fix Android login endpoint and docs link by @EdamAme-x in #192
Full Changelog: v3.1.2...v3.1.3
v3.1.2 - Primary Token LEGY Fix
🎉 Call Implemented!
Highlights
- Added automatic encrypted LEGY /enc transport for Android primary/V3 tokens.
- loginWithAuthToken now accepts V3 credential JSON and stores refresh token metadata.
- Fixed call example/token docs so primary-token users can run example/call/call_on_command.ts directly.
- Improved PLANET call media handling, Opus packetization, and sample playback behavior.
- Refined Agent I clients and tests against the current native request shape.
Verification
- deno test -A passed: 203 tests.
- deno publish --dry-run --allow-dirty passed for @evex/linejs, @evex/linejs-types, and @evex/linejs-agent.
- VitePress docs build passed.
- Live primary/V3 token smoke reached getProfile successfully.
Thanks q0jt for the call/token investigation.
v3.1.1 - Call route env info fix
Patch release for LINE Calls.\n\n- Send native-shaped call route env info by default via fromEnvInfo.devname.\n- Allow example/call/call_on_command.ts users to override LINE_CALL_DEVNAME or LINE_CALL_FROM_ENV_INFO for primary-token sessions.\n- Add INVALID_STATE guidance for acquireCallRoute(/V4) in the example and call docs.\n\nVerification:\n- deno test -A\n- deno publish --dry-run for @evex/linejs\n- deno publish --dry-run for @evex/linejs-types
v3.1.0 - Call Implemented!
?? Call Implemented!
This is the complete stable LINE Calls release. v3.1.0 is the stable public release line for the full PLANET/Cassini call stack.
Diff From The Current v2 Stable
Compared with v2.18.0:
- 25 commits
- 37 files changed
- 9,383 insertions / 173 deletions
- Full diff: v2.18.0...v3.1.0
Highlights
- Added the public call export:
@evex/linejs/call. - Implemented the reverse-engineered PLANET/Cassini call transport.
- Added 1:1 outgoing audio call support through
PlanetTransport. - Added call route acquisition wrappers and call client convenience APIs.
- Added PLANET setup, setup response, answer, info request/response, keepalive, release, and media state handling.
- Added SRTP media encryption/decryption, RTP/RTCP helpers, Opus encoding/decoding, WAV decoding, resampling, and audio streaming utilities.
- Added group-call route/join support and native-shaped group PLANET participate payloads.
- Added
example/call/call_on_command.ts: a reusable!callexample that calls the sender and streamsunity.wav. - Added a bundled sample WAV with credits in
example/call/CREDITS.md. - Added compact message support: compact plain messages, compact E2EE messages, response decoding, and fallback handling.
- Updated device/application defaults to avoid stale
x-line-applicationlogin failures. - Fixed login helpers so
versionandendpointare passed through toBaseClient. - Expanded the call documentation with a full outgoing-call writeup, protocol flow, troubleshooting, and Discord support note.
Notable Files
packages/linejs/client/features/call/planet/transport.tspackages/linejs/client/features/call/planet/schema.tspackages/linejs/client/features/call/planet/crypto.tspackages/linejs/client/features/call/planet/cassini.tspackages/linejs/client/features/call/opus.tspackages/linejs/client/features/call/audio.tspackages/linejs/base/service/talk/compact.tsexample/call/call_on_command.tsdocs/docs/call.md
Verification
deno test -A: 189 passed, 0 faileddeno publish --dry-run --allow-dirtyforpackages/linejs: successdeno publish --dry-run --allow-dirtyforpackages/types: success in rc4 validation- Live device/profile smoke testing confirmed the updated login app profiles and QR-safe example defaults
Contributors
Huge congratulations and thanks to every contributor who got linejs to this milestone:
@EdamAme-x, @piloking, @nakasyou, @MocA-Love, @Madoa5561, @usuraiyukito, @techfish-11, @hafusun, @komkeao, @0xr27, @akku1139, @vonernue, @xxtomm, @nezumi0627, and @taisan11.
Special thanks to q0jt for the compact message protocol details.
Upgrade Notes
Use the stable package version:
import { PlanetTransport, decodeWavSync, opusCodecFactory } from "jsr:@evex/linejs@3.1.0/call";The repository example can be run with:
deno run -A example/call/call_on_command.tsIf anything goes wrong, please reach out on Discord.