app-publish-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md ADDED
@@ -0,0 +1,120 @@
1
+ [English](README.md) | [한국어](README.ko.md) | [中文](README.zh.md) | **日本語**
2
+
3
+ # app-publish-mcp
4
+
5
+ **App Store Connect**と**Google Play Console**のための統合[MCP (Model Context Protocol)](https://modelcontextprotocol.io)サーバー。アプリのリスティング、スクリーンショット、リリース、レビュー、申請をAIアシスタントから管理できます。
6
+
7
+ ## 機能
8
+
9
+ ### Apple App Store Connect (29ツール)
10
+ | カテゴリ | ツール |
11
+ |----------|-------|
12
+ | アプリ管理 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
13
+ | Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
14
+ | バージョン | `apple_list_versions`, `apple_create_version` |
15
+ | バージョンローカライゼーション | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
16
+ | アプリ情報ローカライゼーション | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
17
+ | スクリーンショット | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
18
+ | ビルド | `apple_list_builds`, `apple_assign_build` |
19
+ | 年齢制限 | `apple_get_age_rating`, `apple_update_age_rating` |
20
+ | レビュー情報 | `apple_update_review_detail` |
21
+ | 申請 | `apple_submit_for_review`, `apple_cancel_submission` |
22
+ | 価格設定 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
23
+ | カスタマーレビュー | `apple_list_reviews`, `apple_respond_to_review` |
24
+
25
+ ### Google Play Console (20ツール)
26
+ | カテゴリ | ツール |
27
+ |----------|-------|
28
+ | 編集ライフサイクル | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
29
+ | ストアリスティング | `google_list_listings`, `google_get_listing`, `google_update_listing` |
30
+ | 画像 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
31
+ | トラックとリリース | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
32
+ | Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
33
+ | レビュー | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
34
+
35
+ ## セットアップ
36
+
37
+ ### 1. インストール
38
+
39
+ ```bash
40
+ npm install
41
+ npm run build
42
+ ```
43
+
44
+ ### 2. Apple認証情報
45
+
46
+ 1. [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)にアクセス
47
+ 2. **App Manager**ロールでAPIキーを作成
48
+ 3. `.p8`ファイルをダウンロード
49
+ 4. **Key ID**と**Issuer ID**をメモ
50
+
51
+ ### 3. Google認証情報
52
+
53
+ 1. [Google Cloud Console](https://console.cloud.google.com/)にアクセス
54
+ 2. **Google Play Android Developer API**を有効化
55
+ 3. **サービスアカウント**を作成してJSONキーをダウンロード
56
+ 4. Google Play Consoleで**設定 > APIアクセス**からサービスアカウントにアクセス権限を付与
57
+
58
+ ### 4. 環境設定
59
+
60
+ ```bash
61
+ cp .env.example .env
62
+ ```
63
+
64
+ `.env`を編集:
65
+ ```
66
+ APPLE_KEY_ID=YOUR_KEY_ID
67
+ APPLE_ISSUER_ID=YOUR_ISSUER_ID
68
+ APPLE_P8_PATH=/path/to/AuthKey.p8
69
+ GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
70
+ ```
71
+
72
+ ### 5. Claude Codeに追加
73
+
74
+ `~/.claude/settings.local.json`に追加:
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "app-publish-mcp": {
80
+ "command": "node",
81
+ "args": ["/path/to/app-publish-mcp/dist/index.js"],
82
+ "env": {
83
+ "APPLE_KEY_ID": "YOUR_KEY_ID",
84
+ "APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
85
+ "APPLE_P8_PATH": "/path/to/AuthKey.p8",
86
+ "GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## 使用例
94
+
95
+ ### iOSアプリのアップデート申請
96
+
97
+ ```
98
+ 1. apple_list_apps → アプリIDを取得
99
+ 2. apple_create_version → バージョン1.1.0を作成
100
+ 3. apple_list_version_localizations → ローカライゼーションIDを取得
101
+ 4. apple_update_version_localization → whatsNew、descriptionを設定
102
+ 5. apple_list_builds → アップロード済みビルドを検索
103
+ 6. apple_assign_build → ビルドをバージョンに紐付け
104
+ 7. apple_update_review_detail → レビュアー連絡先情報を設定
105
+ 8. apple_submit_for_review → 申請!
106
+ ```
107
+
108
+ ### Androidアプリのリリース
109
+
110
+ ```
111
+ 1. google_create_edit → 編集セッションを開始
112
+ 2. google_update_listing → ストアリスティングを更新
113
+ 3. google_upload_bundle → .aabファイルをアップロード
114
+ 4. google_create_release → 本番トラックでリリースを作成
115
+ 5. google_commit_edit → 変更を公開
116
+ ```
117
+
118
+ ## ライセンス
119
+
120
+ MIT
package/README.ko.md ADDED
@@ -0,0 +1,120 @@
1
+ [English](README.md) | **한국어** | [中文](README.zh.md) | [日本語](README.ja.md)
2
+
3
+ # app-publish-mcp
4
+
5
+ **App Store Connect**와 **Google Play Console**을 위한 통합 [MCP (Model Context Protocol)](https://modelcontextprotocol.io) 서버입니다. AI 어시스턴트에서 앱 리스팅, 스크린샷, 릴리스, 리뷰, 제출을 관리할 수 있습니다.
6
+
7
+ ## 기능
8
+
9
+ ### Apple App Store Connect (29개 도구)
10
+ | 카테고리 | 도구 |
11
+ |----------|-------|
12
+ | 앱 관리 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
13
+ | Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
14
+ | 버전 | `apple_list_versions`, `apple_create_version` |
15
+ | 버전 로컬라이제이션 | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
16
+ | 앱 정보 로컬라이제이션 | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
17
+ | 스크린샷 | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
18
+ | 빌드 | `apple_list_builds`, `apple_assign_build` |
19
+ | 연령 등급 | `apple_get_age_rating`, `apple_update_age_rating` |
20
+ | 리뷰 정보 | `apple_update_review_detail` |
21
+ | 제출 | `apple_submit_for_review`, `apple_cancel_submission` |
22
+ | 가격 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
23
+ | 고객 리뷰 | `apple_list_reviews`, `apple_respond_to_review` |
24
+
25
+ ### Google Play Console (20개 도구)
26
+ | 카테고리 | 도구 |
27
+ |----------|-------|
28
+ | 편집 생명주기 | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
29
+ | 스토어 리스팅 | `google_list_listings`, `google_get_listing`, `google_update_listing` |
30
+ | 이미지 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
31
+ | 트랙 & 릴리스 | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
32
+ | Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
33
+ | 리뷰 | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
34
+
35
+ ## 설정
36
+
37
+ ### 1. 설치
38
+
39
+ ```bash
40
+ npm install
41
+ npm run build
42
+ ```
43
+
44
+ ### 2. Apple 자격증명
45
+
46
+ 1. [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)로 이동합니다
47
+ 2. **App Manager** 역할로 API Key를 생성합니다
48
+ 3. `.p8` 파일을 다운로드합니다
49
+ 4. **Key ID**와 **Issuer ID**를 확인합니다
50
+
51
+ ### 3. Google 자격증명
52
+
53
+ 1. [Google Cloud Console](https://console.cloud.google.com/)로 이동합니다
54
+ 2. **Google Play Android Developer API**를 활성화합니다
55
+ 3. **Service Account**를 생성하고 JSON 키를 다운로드합니다
56
+ 4. Google Play Console에서 **설정 > API 액세스**에서 서비스 계정에 권한을 부여합니다
57
+
58
+ ### 4. 환경 구성
59
+
60
+ ```bash
61
+ cp .env.example .env
62
+ ```
63
+
64
+ `.env` 파일을 편집합니다:
65
+ ```
66
+ APPLE_KEY_ID=YOUR_KEY_ID
67
+ APPLE_ISSUER_ID=YOUR_ISSUER_ID
68
+ APPLE_P8_PATH=/path/to/AuthKey.p8
69
+ GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
70
+ ```
71
+
72
+ ### 5. Claude Code에 추가
73
+
74
+ `~/.claude/settings.local.json`에 추가합니다:
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "app-publish-mcp": {
80
+ "command": "node",
81
+ "args": ["/path/to/app-publish-mcp/dist/index.js"],
82
+ "env": {
83
+ "APPLE_KEY_ID": "YOUR_KEY_ID",
84
+ "APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
85
+ "APPLE_P8_PATH": "/path/to/AuthKey.p8",
86
+ "GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## 사용 예제
94
+
95
+ ### iOS 앱 업데이트 제출
96
+
97
+ ```
98
+ 1. apple_list_apps → 앱 ID 가져오기
99
+ 2. apple_create_version → 버전 1.1.0 생성
100
+ 3. apple_list_version_localizations → 로컬라이제이션 ID 가져오기
101
+ 4. apple_update_version_localization → whatsNew, description 설정
102
+ 5. apple_list_builds → 업로드된 빌드 찾기
103
+ 6. apple_assign_build → 버전에 빌드 연결
104
+ 7. apple_update_review_detail → 리뷰어 연락처 정보 설정
105
+ 8. apple_submit_for_review → 제출!
106
+ ```
107
+
108
+ ### Android 앱 릴리스
109
+
110
+ ```
111
+ 1. google_create_edit → 편집 세션 시작
112
+ 2. google_update_listing → 스토어 리스팅 업데이트
113
+ 3. google_upload_bundle → .aab 파일 업로드
114
+ 4. google_create_release → production 트랙에 릴리스 생성
115
+ 5. google_commit_edit → 변경사항 게시
116
+ ```
117
+
118
+ ## 라이선스
119
+
120
+ MIT
package/README.md ADDED
@@ -0,0 +1,120 @@
1
+ **English** | [한국어](README.ko.md) | [中文](README.zh.md) | [日本語](README.ja.md)
2
+
3
+ # app-publish-mcp
4
+
5
+ A unified [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server for **App Store Connect** and **Google Play Console**. Manage app listings, screenshots, releases, reviews and submissions — all from your AI assistant.
6
+
7
+ ## Features
8
+
9
+ ### Apple App Store Connect (29 tools)
10
+ | Category | Tools |
11
+ |----------|-------|
12
+ | App Management | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
13
+ | Bundle IDs | `apple_list_bundle_ids`, `apple_create_bundle_id` |
14
+ | Versions | `apple_list_versions`, `apple_create_version` |
15
+ | Version Localizations | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
16
+ | App Info Localizations | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
17
+ | Screenshots | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
18
+ | Builds | `apple_list_builds`, `apple_assign_build` |
19
+ | Age Rating | `apple_get_age_rating`, `apple_update_age_rating` |
20
+ | Review Info | `apple_update_review_detail` |
21
+ | Submission | `apple_submit_for_review`, `apple_cancel_submission` |
22
+ | Pricing | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
23
+ | Customer Reviews | `apple_list_reviews`, `apple_respond_to_review` |
24
+
25
+ ### Google Play Console (20 tools)
26
+ | Category | Tools |
27
+ |----------|-------|
28
+ | Edit Lifecycle | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
29
+ | Store Listing | `google_list_listings`, `google_get_listing`, `google_update_listing` |
30
+ | Images | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
31
+ | Tracks & Releases | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
32
+ | Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
33
+ | Reviews | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
34
+
35
+ ## Setup
36
+
37
+ ### 1. Install
38
+
39
+ ```bash
40
+ npm install
41
+ npm run build
42
+ ```
43
+
44
+ ### 2. Apple Credentials
45
+
46
+ 1. Go to [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)
47
+ 2. Create an API Key with **App Manager** role
48
+ 3. Download the `.p8` file
49
+ 4. Note the **Key ID** and **Issuer ID**
50
+
51
+ ### 3. Google Credentials
52
+
53
+ 1. Go to [Google Cloud Console](https://console.cloud.google.com/)
54
+ 2. Enable **Google Play Android Developer API**
55
+ 3. Create a **Service Account** and download the JSON key
56
+ 4. In Google Play Console, grant the service account access under **Settings > API access**
57
+
58
+ ### 4. Configure Environment
59
+
60
+ ```bash
61
+ cp .env.example .env
62
+ ```
63
+
64
+ Edit `.env`:
65
+ ```
66
+ APPLE_KEY_ID=YOUR_KEY_ID
67
+ APPLE_ISSUER_ID=YOUR_ISSUER_ID
68
+ APPLE_P8_PATH=/path/to/AuthKey.p8
69
+ GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
70
+ ```
71
+
72
+ ### 5. Add to Claude Code
73
+
74
+ Add to `~/.claude/settings.local.json`:
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "app-publish-mcp": {
80
+ "command": "node",
81
+ "args": ["/path/to/app-publish-mcp/dist/index.js"],
82
+ "env": {
83
+ "APPLE_KEY_ID": "YOUR_KEY_ID",
84
+ "APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
85
+ "APPLE_P8_PATH": "/path/to/AuthKey.p8",
86
+ "GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## Usage Examples
94
+
95
+ ### Submit an iOS app update
96
+
97
+ ```
98
+ 1. apple_list_apps → get app ID
99
+ 2. apple_create_version → create version 1.1.0
100
+ 3. apple_list_version_localizations → get localization IDs
101
+ 4. apple_update_version_localization → set whatsNew, description
102
+ 5. apple_list_builds → find the uploaded build
103
+ 6. apple_assign_build → attach build to version
104
+ 7. apple_update_review_detail → set reviewer contact info
105
+ 8. apple_submit_for_review → submit!
106
+ ```
107
+
108
+ ### Release an Android app
109
+
110
+ ```
111
+ 1. google_create_edit → start edit session
112
+ 2. google_update_listing → update store listing
113
+ 3. google_upload_bundle → upload .aab file
114
+ 4. google_create_release → create release on production track
115
+ 5. google_commit_edit → publish changes
116
+ ```
117
+
118
+ ## License
119
+
120
+ MIT
package/README.zh.md ADDED
@@ -0,0 +1,120 @@
1
+ [English](README.md) | [한국어](README.ko.md) | **中文** | [日本語](README.ja.md)
2
+
3
+ # app-publish-mcp
4
+
5
+ 统一的 [MCP(模型上下文协议)](https://modelcontextprotocol.io)服务器,支持 **App Store Connect** 和 **Google Play Console**。从 AI 助手管理应用列表、截图、发布、评论和提交。
6
+
7
+ ## 功能特性
8
+
9
+ ### Apple App Store Connect(29个工具)
10
+ | 类别 | 工具 |
11
+ |----------|-------|
12
+ | 应用管理 | `apple_list_apps`, `apple_get_app`, `apple_get_app_info`, `apple_update_category` |
13
+ | Bundle ID | `apple_list_bundle_ids`, `apple_create_bundle_id` |
14
+ | 版本管理 | `apple_list_versions`, `apple_create_version` |
15
+ | 版本本地化 | `apple_list_version_localizations`, `apple_create_version_localization`, `apple_update_version_localization` |
16
+ | 应用信息本地化 | `apple_list_app_info_localizations`, `apple_update_app_info_localization` |
17
+ | 截图 | `apple_list_screenshot_sets`, `apple_create_screenshot_set`, `apple_upload_screenshot`, `apple_delete_screenshot` |
18
+ | 构建版本 | `apple_list_builds`, `apple_assign_build` |
19
+ | 年龄分级 | `apple_get_age_rating`, `apple_update_age_rating` |
20
+ | 审核信息 | `apple_update_review_detail` |
21
+ | 提交 | `apple_submit_for_review`, `apple_cancel_submission` |
22
+ | 价格 | `apple_get_pricing`, `apple_set_price`, `apple_list_availability` |
23
+ | 用户评论 | `apple_list_reviews`, `apple_respond_to_review` |
24
+
25
+ ### Google Play Console(20个工具)
26
+ | 类别 | 工具 |
27
+ |----------|-------|
28
+ | 编辑生命周期 | `google_create_edit`, `google_commit_edit`, `google_delete_edit` |
29
+ | 商店列表 | `google_list_listings`, `google_get_listing`, `google_update_listing` |
30
+ | 图片 | `google_list_images`, `google_upload_image`, `google_delete_image`, `google_delete_all_images` |
31
+ | 轨道和发布 | `google_list_tracks`, `google_get_track`, `google_create_release`, `google_promote_release`, `google_halt_release` |
32
+ | Bundle / APK | `google_upload_bundle`, `google_upload_apk` |
33
+ | 评论 | `google_list_reviews`, `google_get_review`, `google_reply_to_review` |
34
+
35
+ ## 配置
36
+
37
+ ### 1. 安装
38
+
39
+ ```bash
40
+ npm install
41
+ npm run build
42
+ ```
43
+
44
+ ### 2. Apple 凭证
45
+
46
+ 1. 前往 [App Store Connect > Keys](https://appstoreconnect.apple.com/access/integrations/api)
47
+ 2. 创建一个具有 **App Manager** 角色的 API Key
48
+ 3. 下载 `.p8` 文件
49
+ 4. 记录 **Key ID** 和 **Issuer ID**
50
+
51
+ ### 3. Google 凭证
52
+
53
+ 1. 前往 [Google Cloud Console](https://console.cloud.google.com/)
54
+ 2. 启用 **Google Play Android Developer API**
55
+ 3. 创建一个 **Service Account** 并下载 JSON 密钥
56
+ 4. 在 Google Play Console 中,前往 **Settings > API access** 授予服务账号访问权限
57
+
58
+ ### 4. 配置环境变量
59
+
60
+ ```bash
61
+ cp .env.example .env
62
+ ```
63
+
64
+ 编辑 `.env`:
65
+ ```
66
+ APPLE_KEY_ID=YOUR_KEY_ID
67
+ APPLE_ISSUER_ID=YOUR_ISSUER_ID
68
+ APPLE_P8_PATH=/path/to/AuthKey.p8
69
+ GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json
70
+ ```
71
+
72
+ ### 5. 添加到 Claude Code
73
+
74
+ 在 `~/.claude/settings.local.json` 中添加:
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "app-publish-mcp": {
80
+ "command": "node",
81
+ "args": ["/path/to/app-publish-mcp/dist/index.js"],
82
+ "env": {
83
+ "APPLE_KEY_ID": "YOUR_KEY_ID",
84
+ "APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
85
+ "APPLE_P8_PATH": "/path/to/AuthKey.p8",
86
+ "GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## 使用示例
94
+
95
+ ### 提交 iOS 应用更新
96
+
97
+ ```
98
+ 1. apple_list_apps → 获取应用 ID
99
+ 2. apple_create_version → 创建版本 1.1.0
100
+ 3. apple_list_version_localizations → 获取本地化 ID
101
+ 4. apple_update_version_localization → 设置 whatsNew、description
102
+ 5. apple_list_builds → 查找已上传的构建版本
103
+ 6. apple_assign_build → 将构建版本附加到版本
104
+ 7. apple_update_review_detail → 设置审核联系信息
105
+ 8. apple_submit_for_review → 提交!
106
+ ```
107
+
108
+ ### 发布 Android 应用
109
+
110
+ ```
111
+ 1. google_create_edit → 启动编辑会话
112
+ 2. google_update_listing → 更新商店列表
113
+ 3. google_upload_bundle → 上传 .aab 文件
114
+ 4. google_create_release → 在生产轨道上创建发布
115
+ 5. google_commit_edit → 发布更改
116
+ ```
117
+
118
+ ## 许可证
119
+
120
+ MIT
@@ -0,0 +1,23 @@
1
+ interface AppleConfig {
2
+ keyId: string;
3
+ issuerId: string;
4
+ p8Path: string;
5
+ vendorNumber?: string;
6
+ }
7
+ export declare class AppleClient {
8
+ private config;
9
+ private baseUrl;
10
+ private token;
11
+ private tokenExp;
12
+ constructor(config: AppleConfig);
13
+ private getToken;
14
+ request<T = any>(path: string, options?: {
15
+ method?: string;
16
+ body?: any;
17
+ params?: Record<string, string>;
18
+ }): Promise<T>;
19
+ upload(url: string, filePath: string, contentType: string): Promise<any>;
20
+ get vendorNumber(): string | undefined;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/apple/client.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAK;gBAET,MAAM,EAAE,WAAW;IAI/B,OAAO,CAAC,QAAQ;IAoBV,OAAO,CAAC,CAAC,GAAG,GAAG,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5B,GACL,OAAO,CAAC,CAAC,CAAC;IA0BP,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmB9E,IAAI,YAAY,uBAEf;CACF"}
@@ -0,0 +1,74 @@
1
+ import jwt from 'jsonwebtoken';
2
+ import { readFileSync } from 'fs';
3
+ export class AppleClient {
4
+ config;
5
+ baseUrl = 'https://api.appstoreconnect.apple.com/v1';
6
+ token = null;
7
+ tokenExp = 0;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ getToken() {
12
+ const now = Math.floor(Date.now() / 1000);
13
+ if (this.token && now < this.tokenExp - 60)
14
+ return this.token;
15
+ const privateKey = readFileSync(this.config.p8Path, 'utf8');
16
+ const payload = {
17
+ iss: this.config.issuerId,
18
+ iat: now,
19
+ exp: now + 20 * 60, // 20 minutes
20
+ aud: 'appstoreconnect-v1',
21
+ };
22
+ this.token = jwt.sign(payload, privateKey, {
23
+ algorithm: 'ES256',
24
+ header: { alg: 'ES256', kid: this.config.keyId, typ: 'JWT' },
25
+ });
26
+ this.tokenExp = now + 20 * 60;
27
+ return this.token;
28
+ }
29
+ async request(path, options = {}) {
30
+ const { method = 'GET', body, params } = options;
31
+ let url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
32
+ if (params) {
33
+ const qs = new URLSearchParams(params).toString();
34
+ url += `?${qs}`;
35
+ }
36
+ const res = await fetch(url, {
37
+ method,
38
+ headers: {
39
+ Authorization: `Bearer ${this.getToken()}`,
40
+ 'Content-Type': 'application/json',
41
+ },
42
+ body: body ? JSON.stringify(body) : undefined,
43
+ });
44
+ if (!res.ok) {
45
+ const text = await res.text();
46
+ throw new Error(`Apple API ${method} ${path} → ${res.status}: ${text}`);
47
+ }
48
+ if (res.status === 204)
49
+ return {};
50
+ return res.json();
51
+ }
52
+ async upload(url, filePath, contentType) {
53
+ const data = readFileSync(filePath);
54
+ const res = await fetch(url, {
55
+ method: 'PUT',
56
+ headers: {
57
+ Authorization: `Bearer ${this.getToken()}`,
58
+ 'Content-Type': contentType,
59
+ },
60
+ body: data,
61
+ });
62
+ if (!res.ok) {
63
+ const text = await res.text();
64
+ throw new Error(`Apple upload → ${res.status}: ${text}`);
65
+ }
66
+ if (res.status === 204)
67
+ return {};
68
+ return res.json();
69
+ }
70
+ get vendorNumber() {
71
+ return this.config.vendorNumber;
72
+ }
73
+ }
74
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/apple/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import { AppleClient } from './client.js';
3
+ interface ToolDef {
4
+ name: string;
5
+ description: string;
6
+ schema: z.ZodObject<any>;
7
+ handler: (client: AppleClient, args: any) => Promise<any>;
8
+ }
9
+ export declare const appleTools: ToolDef[];
10
+ export {};
11
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/apple/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3D;AAmrCD,eAAO,MAAM,UAAU,EAAE,OAAO,EAuC/B,CAAC"}