jsapdu インターフェースをHTTP/WebSocket経由でリモートアクセス可能にするライブラリ。
@aokiapp/jsapdu-over-ip は、@aokiapp/jsapdu-interface で定義されたスマートカードインターフェースを、ネットワーク経由で透過的にプロキシするためのライブラリです。
- Transport Agnostic: HTTP、WebSocket、IPC など任意のトランスポート層を注入可能
- 完全な型安全性: TypeScript で実装され、jsapdu-interface と完全互換
- 透過的なプロキシ: ローカル実装とリモート実装を区別なく使用可能
- イベント駆動: カード挿抜などのイベントをリアルタイムで通知
このパッケージは現在 npm registry には公開されていません。tarball ファイルを使用してインストールしてください:
# 依存関係として追加
npm install path/to/aokiapp-jsapdu-over-ip-0.0.1.tgzまたは package.json に直接記述:
{
"dependencies": {
"@aokiapp/jsapdu-over-ip": "file:local-packages/aokiapp-jsapdu-over-ip-0.0.1.tgz"
}
}このパッケージは @aokiapp/jsapdu-interface に依存します。@aokiapp/jsapdu-interface は GitHub Packages で公開されています。インストールするにはプロジェクトルートに .npmrc を配置し、スコープを GitHub Packages にルーティングしてください:
@aokiapp:registry=https://npm.pkg.github.com
always-auth=true
registry=https://registry.npmjs.org/
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}Windows では環境変数 NPM_TOKEN を設定後にインストールします:
setx NPM_TOKEN "YOUR_GITHUB_TOKEN_WITH_read:packages"
npm installmacOS/Linux:
export NPM_TOKEN="YOUR_GITHUB_TOKEN_WITH_read:packages"
npm install公開バージョンを確認するには(ログイン済み前提):
npm view @aokiapp/jsapdu-interface versions
npm view @aokiapp/[email protected] versionpackage.json の推奨設定:
{
"devDependencies": {
"@aokiapp/jsapdu-interface": "^0.0.2"
},
"peerDependencies": {
"@aokiapp/jsapdu-interface": "^0.0.2"
}
}import {
RemoteSmartCardPlatform,
FetchClientTransport,
} from "@aokiapp/jsapdu-over-ip/client";
// トランスポート層を初期化
const transport = new FetchClientTransport(
"http://localhost:3000/api/jsapdu/rpc",
);
// リモートプラットフォームを作成
const platform = new RemoteSmartCardPlatform(transport);
// 通常の jsapdu-interface として使用
await platform.init();
const devices = await platform.getDeviceInfo();import { SmartCardPlatformAdapter } from "@aokiapp/jsapdu-over-ip/server";
import { YourActualPlatform } from "@aokiapp/jsapdu-pcsc"; // or other implementation
// 実際のプラットフォーム実装をラップ
const actualPlatform = new YourActualPlatform();
const adapter = new SmartCardPlatformAdapter(actualPlatform, serverTransport);
// トランスポート層でRPCリクエストを処理
await serverTransport.start();RemoteSmartCardPlatform- リモートプラットフォームプロキシRemoteSmartCardDevice- リモートデバイスプロキシRemoteSmartCard- リモートカードプロキシ
SmartCardPlatformAdapter- プラットフォームアダプタ
ClientTransport- クライアント側トランスポートインターフェースServerTransport- サーバー側トランスポートインターフェースFetchClientTransport- Fetch API ベースの実装(参考実装)InMemoryTransport- インメモリ実装(テスト用)
npm run buildnpm run typechecknpm run cleannpm run pack:tgzこれにより aokiapp-jsapdu-over-ip-0.0.1.tgz が生成されます。
MIT
- jsapdu - 親プロジェクト
- @aokiapp/jsapdu-interface - インターフェース定義
- Prettier: コード整形。設定は .prettierrc、除外は .prettierignore。
- ESLint (Flat Config): 静的解析。設定は eslint.config.mjs で TypeScript 推奨設定と Prettier 連携を有効化。
- Changesets: バージョニングとリリース管理。設定は .changeset/config.json。
- Turbo: タスクパイプライン。設定は turbo.json(
build,typecheck,lint,format,clean)。
# ビルド関連
npm run build # tsc でビルド
npm run typecheck # 型チェックのみ
npm run clean # dist を削除
# 品質管理
npm run lint # ESLint 実行(Flat Config)
npm run format # Prettier で整形
npm run format:check # 整形チェック
# リリース管理
npm run changeset # 変更内容の記述(Changesets)
npm run version # バージョンの更新(Changesets)
npm run release # Turbo で build/lint 実行後に Changesets で公開
# パッケージング
npm run pack:tgz # .tgz を生成Turbo により、以下のタスクが定義されています(turbo.json を参照):
build:dist/**を成果物としてキャッシュ。src/**,tsconfig.json,package.jsonを入力とする。typecheck: 型チェックのみ。入力はsrc/**,tsconfig.json,package.json。lint: 出力なしのチェックタスク。format: 出力なしの整形タスク。clean: キャッシュ無効化のクリーンタスク。
GitHub Packages を使用するために、プロジェクトルートの .npmrc を以下のように設定してください(既に反映済み):
@aokiapp:registry=https://npm.pkg.github.com
always-auth=true
registry=https://registry.npmjs.org/
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}Windows の場合:
setx NODE_AUTH_TOKEN "YOUR_GITHUB_TOKEN_WITH_packages:read"
npm installmacOS/Linux の場合:
export NODE_AUTH_TOKEN="YOUR_GITHUB_TOKEN_WITH_packages:read"
npm install現在のコードベースでは @typescript-eslint の厳格ルールにより any の使用や不要なアサーション等がエラーになります。今回は「導入」を優先し、コード修正は保留としています(必要に応じてルール緩和や型付けの改善を後続タスクで対応可能です)。