{"_id":"@aemeath/surf-cli","name":"@aemeath/surf-cli","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@aemeath/surf-cli","version":"0.1.0","description":"A TypeScript CLI for connecting to Surfshark OpenVPN profiles.","type":"module","bin":{"surf-cli":"dist/cli.js"},"exports":{".":"./dist/cli.js"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx src/cli.ts","lint":"eslint .","format":"prettier --write .","format:check":"prettier --check .","test":"vitest run","typecheck":"tsc -p tsconfig.json --noEmit"},"keywords":["surfshark","openvpn","vpn","cli"],"author":{"name":"SolarisCode"},"license":"MIT","repository":{"type":"git","url":"git+https://codeberg.org/aemeath/surf-cli.git"},"bugs":{"url":"https://codeberg.org/aemeath/surf-cli/issues"},"homepage":"https://codeberg.org/aemeath/surf-cli#readme","engines":{"node":">=22"},"packageManager":"pnpm@10.33.0","dependencies":{"@inquirer/prompts":"^8.0.1","commander":"^14.0.2","fflate":"^0.8.2","zod":"^4.1.12"},"optionalDependencies":{"@napi-rs/keyring":"^1.3.0"},"devDependencies":{"@eslint/js":"^9.39.1","@types/node":"^24.10.1","eslint":"^9.39.1","prettier":"^3.6.2","tsx":"^4.20.6","typescript":"^5.9.3","typescript-eslint":"^8.46.4","vitest":"^4.0.8"},"_id":"@aemeath/surf-cli@0.1.0","gitHead":"8eaa21582b3131329a9dcdf6e6c8d09b1c3e061f","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-Yl0ck9srIedEgDZh9Nzq+McFJZ3tGNIgiQspjv2KPsPLnSIGTaVF+2wzAD2ZzCyhOYdPnrazyPYgxPbPlZ7wCQ==","shasum":"02d993182905ad9e45a16d3be05b22fc58dc206a","tarball":"https://registry.npmjs.org/@aemeath/surf-cli/-/surf-cli-0.1.0.tgz","fileCount":58,"unpackedSize":143924,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDvoC2A/3kS8toj9s17N6ylV20x1PjcB/2FJM7ZmMZ4pAiEAsC+9ei9K5+G2ymz1GLZ1cz6XsjQiSs9DN/0aKUYhm+E="}]},"_npmUser":{"name":"aemeath","email":"lecterkn@proton.me"},"directories":{},"maintainers":[{"name":"aemeath","email":"lecterkn@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/surf-cli_0.1.0_1778910096491_0.3017308305468105"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-16T05:41:36.367Z","0.1.0":"2026-05-16T05:41:36.640Z","modified":"2026-05-16T05:41:37.176Z"},"maintainers":[{"name":"aemeath","email":"lecterkn@proton.me"}],"description":"A TypeScript CLI for connecting to Surfshark OpenVPN profiles.","homepage":"https://codeberg.org/aemeath/surf-cli#readme","keywords":["surfshark","openvpn","vpn","cli"],"repository":{"type":"git","url":"git+https://codeberg.org/aemeath/surf-cli.git"},"author":{"name":"SolarisCode"},"bugs":{"url":"https://codeberg.org/aemeath/surf-cli/issues"},"license":"MIT","readme":"# 🌊 surf-cli\n\n`surf-cli` は、Surfshark の OpenVPN 手動設定を CLI から扱うための TypeScript 製ツールです。Linux を主対象にし、`openvpn` が導入済みであることを前提に `sudo openvpn` を起動します。macOS は `openvpn` CLI がある場合のみ best-effort です。\n\n> 注意: Surfshark 公式ドキュメントでは、OpenVPN 手動接続で使う username/password は通常のアカウントメール・パスワードとは別物です。通常ログイン API は公開仕様ではないため、メール/パスワード・コードログインは experimental とし、失敗時は手動 OpenVPN 認証情報入力へフォールバックします。\n\n## 📦 インストール\n\n### パッケージマネージャー\n\n```bash\nnpm install -g @aemeath/surf-cli\n# bun install -g @aemeath/surf-cli\n# pnpm install -g @aemeath/surf-cli\n# yarn global add @aemeath/surf-cli\n```\n\n### インストールスクリプト\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/aemeath/surf-cli/master/scripts/install.sh | bash\n```\n\n### 開発版（ソースから）\n\n```bash\ngit clone https://codeberg.org/aemeath/surf-cli.git\ncd surf-cli\ncorepack enable\npnpm install\npnpm build\npnpm link --global\n```\n\n## ✅ 要件\n\n- Node.js 22 以上\n- Linux（推奨）または macOS（best-effort）\n- `openvpn`\n- `sudo`\n- Surfshark の有効な契約\n\n## 🚀 使い方\n\n### Quick Start\n\n```bash\nsurf-cli doctor                    # 前提条件を確認\nsurf-cli auth login --manual       # OpenVPN 認証情報を登録\nsurf-cli servers refresh           # サーバー設定をダウンロード\nsurf-cli connect jp-tok            # 日本・東京サーバーに接続\nsurf-cli status                    # 接続状態を確認\nsurf-cli disconnect                # 切断\n```\n\nヘルプは `surf-cli --help` または各コマンドで `surf-cli <command> --help` で確認できます。\n\n## 🔐 認証\n\n推奨は Surfshark dashboard の `VPN > Manual Setup > Desktop or mobile > OpenVPN` で確認できる OpenVPN service credentials の手動登録です。\n\n```bash\nsurf-cli auth login --manual\n```\n\nexperimental なログイン経路（`--email`, `--code`）も用意していますが、Surfshark の非公開 Web API に依存するため、OpenVPN service credentials を取得できない場合は手動入力へフォールバックします。\n\n認証情報は OS keyring（`@napi-rs/keyring`）へ保存します。keyring が使えない環境では、平文ファイルへ自動保存しません。\n\n詳細は [`docs/topics/authentication.md`](docs/topics/authentication.md) を参照してください。\n\n## 🔧 トラブルシュート\n\n`CONNECTION_FAILED` で OpenVPN が初期化前に終了した場合、`surf-cli` は OpenVPN log、起動直後の stderr/stdout、終了コードの順に診断情報を表示します。\n\n- まず `surf-cli doctor` で `openvpn` と `sudo` が利用できるか確認してください。\n- sudo password prompt が出る場合は、端末でパスワードを入力してください。\n- 詳細を直接確認したい場合は `surf-cli connect jp-tok --foreground` のように foreground 実行してください。\n- `AUTH_FAILED` の場合は、通常の Surfshark アカウントではなく OpenVPN service credentials を `surf-cli auth login --manual` で登録し直してください。\n\n詳細は [`docs/topics/vpn-connection.md`](docs/topics/vpn-connection.md) を参照してください。\n\n## 📚 ドキュメント\n\n| ドキュメント                                                     | 内容                                         |\n| ---------------------------------------------------------------- | -------------------------------------------- |\n| [`docs/README.md`](docs/README.md)                               | ドキュメントインデックス・アーキテクチャ概要 |\n| [`docs/topics/authentication.md`](docs/topics/authentication.md) | 認証方法の詳細                               |\n| [`docs/topics/vpn-connection.md`](docs/topics/vpn-connection.md) | VPN 接続モデルの詳細                         |\n| [`docs/topics/server-catalog.md`](docs/topics/server-catalog.md) | サーバー設定の取得・展開・検索               |\n| [`docs/topics/data-storage.md`](docs/topics/data-storage.md)     | データ保存場所・XDG パス・権限               |\n| [`docs/topics/error-handling.md`](docs/topics/error-handling.md) | エラー種別・exit code                        |\n| [`docs/development.md`](docs/development.md)                     | 開発手順・CI/CD                              |\n\n## 🔒 セキュリティ\n\n- Surfshark アカウントパスワードは保存しません。\n- OpenVPN service credentials は OS keyring に保存します。\n- 実行時 auth file は XDG runtime 配下に 0600 で作成します。\n- CI に Surfshark credentials を渡す設計にはしていません。\n\n脆弱性の報告は [`SECURITY.md`](SECURITY.md) を参照してください。\n","readmeFilename":"README.md","_rev":"1-b1058a4e2a632a4e3e6c6d3575ad7de9"}