mcpField
L
linejs

linejs

github.com/evex-dev開発41967 回インストール3 週間前に更新
リポジトリ

linejs について

LINE Messengerプロトコル向けのTypeScript中心のクライアントライブラリです。LINEのThriftバイナリ形式を直接扱い、E2EEとイベントポーリングに対応し、LINEボットやサービスメソッドを扱う開発者向けです。

主な機能

  1. 01Thriftバイナリプロトコルを直接処理
  2. 02E2EEとイベントポーリングに対応
  3. 03ベースクライアントと上位ラッパー
  4. 0430以上のサービスと130以上のメソッド
  5. 05プロフィール、メッセージ、チャット操作

活用シーン

  1. 01LINEボットの構築
  2. 02チャットメッセージの送受信と復号
  3. 03LINEサービスRPCの呼び出し
  4. 04プロフィールとチャットの管理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/evex-dev/linejs --skill linejs

インストール後、Claude Code で/linejsを入力して読み込まれたか確認します。

詳細

linejs

@evex/linejs は、LINE Messenger プロトコル向けの TypeScript ファーストなクライアントライブラリです。LINE の Thrift バイナリワイヤ形式を直接扱い、E2EE とイベントのポーリングをサポートし、CHRLINE-Patch がカバーするメソッド用の手書きラッパーを提供します。

このスキルはロードマップであり、マニュアルではありません。ライブラリは急速に進化します。すぐに古くなる詳細を固定するのではなく、必要に応じて参照すべき正規のソースを示します。

インストール

deno add jsr:@evex/linejs
# Types are also available standalone:
deno add jsr:@evex/linejs-types

最新リリースは JSR(https://jsr.io/@evex/linejs)または curl -s https://jsr.io/@evex/linejs/meta.json | jq -r .latest で確認してください。このスキルのプロンプトではバージョンを固定しません。ユーザーコードで固定してください。

最小限の実用的なボット

import { BaseClient } from "@evex/linejs/base";
import { FileStorage } from "@evex/linejs/storage";

const storage = new FileStorage("./storage.json");
const client = new BaseClient({ device: "DESKTOPWIN", storage });

client.on("qrcall",  (url) => console.log("scan:", url));
client.on("pincall", (pin) => console.log("PIN:", pin));
client.on("update:authtoken", (t) => storage.set(".auth", t));

const cached = await storage.get(".auth");
await client.loginProcess.login(
    typeof cached === "string" ? { authToken: cached } : {},
);

for await (const op of client.createPolling().listenTalkEvents()) {
    if (op.type === "RECEIVE_MESSAGE" || op.type === "SEND_MESSAGE") {
        const msg = await client.e2ee.decryptE2EEMessage(op.message);
        if (msg.text === "!ping") {
            await client.talk.sendMessage({
                to: msg.to === client.profile?.mid ? msg.from : msg.to,
                text: "pong!",
                e2ee: !!op.message.chunks,
            });
        }
    }
}

これが実用的なボットの最小構成です。より充実した機能を使う場合は、@evex/linejs の Client ラッパーから始めてください(BaseClient を基盤としています)。getMyProfile()、updateMy{DisplayName,StatusMessage,Profile}()、fetchJoinedChats()、getChat()、getUser()、uploadMyProfileImage()、uploadMyProfileBackground() などを利用できます。

ロードマップ — 用途に応じた参照先

いずれの場合も、最新のコードを確認するのが最善です。 https://github.com/evex-dev/linejs

やりたいこと参照先
ログイン(QR/メール)packages/linejs/base/login/mod.ts — v2.7 以降は ForSecure RPC を使用します。従来の createQrCode はサーバーに拒否されます
メッセージの送受信packages/linejs/client/features/message/ および BaseClient.talk.sendMessage
LINE がサポートする任意の Thrift RPCpackages/linejs/base/service/*/mod.ts — LINE の各サービスにラッパーがあります(30 以上のサービス、130 以上のメソッド)
プロフィール属性の変更client.updateMyProfile({...}) / packages/linejs/client/features/profile.ts を参照
友だちの名前変更/お気に入り登録/ミュートUser.rename()/User.setFavorite() など — packages/linejs/client/features/user/mod.ts を参照
チャットの BGMChat.getBgm()/Chat.setBgm()
LIFF の共有/トークンclient.liff.shareMessages(chatMid, [...]) および client.liff.getToken({ liffId, chatMid }) — メッセージビルダー(text/sticker/image/flex)については packages/linejs/client/features/liff.ts を参照してください。より低レベルの機能は client.liff.service/BaseClient.liff にあります
VOOM/タイムライン/Note RESTclient.voomRest({ path, channelToken }) — gw.line.naver.jp/mh/api/v{34,40,52,57}/... ゲートウェイの低レベルラッパーです。先にチャネルトークンを発行してください:await client.base.channel.issueChannelToken({ channelId: VoomChannelId.TIMELINE })(注意:位置引数の文字列ではなく、オブジェクト引数です)。DESKTOPWIN デバイスでは実行できないため、device: "ANDROIDSECONDARY" を使用してください。Bearer トークンを付与すると、ゲートウェイの応答は 401 から 504 に変わります。残る下流エラーは #151 で追跡されています
連絡先のカレンダーイベントUser.fetchCalendarEvents() — 一部のクライアントデバイス種別ではサーバーによって制限されます(現在、DESKTOPWIN では利用できません)
このデバイスで PIN ログインを承認client.base.loginProcess.respondE2EELoginRequest({ verifier, publicKey, encryptedKeyChain, hashKeyChain, errorCode? }) — confirmE2EELogin に対応する、承認する側のメソッドです。このクライアントが、ユーザーが承認したい別のデバイスからの PIN ログイン通知を受け取ったときに呼び出してください
プロフィール画像/カバー画像のアップロードclient.uploadMyProfileImage(blob)/client.uploadMyProfileBackground(blob)
Agent I(LINE のチャットタブ AI 検索)@evex/linejs-agent — LINE Android が WebView で開く、Yahoo の検索エージェント SSE バックエンドをラップします。Yahoo のセッションクッキーが必要です。LINE はこれを発行しません
E2EE プリミティブpackages/linejs/base/e2ee/mod.ts — AES-GCM-SIV、ECDH、暗号化された QR 識別子の復号、キーチェーンなど
Thrift スキーマpackages/types/thrift.ts(データ)および packages/types/line_types.ts(TS インターフェース)。どちらも deno task apk:sync で LINE Android APK から自動同期されます

迷った場合は、packages/linejs/client/features/ 以下のソースを読んでください。機能クラスは短く、ドキュメントのように読めます。

既知の制約

  • LINE 26+ では ForSecure QR ログインが必須です(createQrCodeForSecure + qrCodeLoginV2ForSecure)。従来の createQrCode はサーバー側で通知なく期限切れになります。linejs v2.7+ ではデフォルトで ForSecure が使われます。古いバージョンではログインできません。
  • map<i32, V> のエンコードは、v2.7 より前は JS オブジェクトのキーで動作しませんでした。JS のキーは文字列であり、エンコーダーが拒否していました。v2.7 で修正済みです。古い linejs を対象とする場合は、マップを NestedArray のタプルとして作成してください。
  • ほとんどのチャットメッセージでは E2EE の復号が必要です。client.e2ee.decryptE2EEMessage(op.message) を参照してください。op.message.text を直接読み取らないでください。
  • Agent I には Yahoo の Cookie が必要です。LINE Android アプリは、ユーザーがすでに持っている Yahoo セッションを使って WebView を読み込みます。プログラムから使用する場合は、Cookie を自分で取得する必要があります(Yahoo Japan にログイン → Cookie を抽出)。linejs が提供するのは呼び出し形式であり、認証機能ではありません。
  • デバイスタイプは機能の利用可否に影響します。DESKTOPWIN には、ANDROID で利用できるいくつかの API(例:getContactsV3、getContactCalendarEvents)がありません。ボットのみを扱う場合、通常は DESKTOPWIN で十分です。メソッドが API method not capable を返す場合は、デバイスタイプを切り替えるか、従来の代替手段を使用してください。

バグ/問題

https://github.com/evex-dev/linejs/issues に報告してください。報告には、次の情報を含めると役立ちます。

  • linejs のバージョン(deno info jsr:@evex/linejs で解決済みのバージョンを確認できます)
  • 対象とするデバイスタイプと LINE アプリのバージョン
  • 最小限の再現例:問題を再現する最小のコードと、Request internal failed: status=… headers=… body=<…> のエラー(v2.7+ では、例外メッセージに HTTP ステータス/ヘッダーが含まれるため、原因の切り分けに非常に役立ちます)
  • QR ログイン関連の場合:どの手順で発生したか(createSession、createQrCodeForSecure、checkQrCodeVerified、qrCodeLoginV2ForSecure)と、出力されている場合は [login] ForSecure: maxCount=… intervalSec=… nonce=… のデバッグ行

CHRLINE-Patch 互換の動作に関する報告(例:「この RPC は CHRLINE では動作するが、linejs では動作しない」)も役立ちます。メソッド名をお知らせいただければ、こちらで移植します。

このスキルに意図的に含めていないもの

  • 固定された API シグネチャ。変更されるため、ソースを参照してください。
  • ラップされたすべてのメソッドの一覧。130 以上あるため、現在の一覧は packages/linejs/base/service/ を参照してください。
  • LINE Android のリバースエンジニアリングの詳細。Discord に参加してください。

コメント