claude-in-mobile 3.0.0 → 3.3.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.md +3 -3
- package/dist/client-adapter.js +9 -9
- package/dist/client-adapter.js.map +1 -1
- package/dist/index.js +76 -7
- package/dist/index.js.map +1 -1
- package/dist/store/google-play.d.ts +18 -0
- package/dist/store/google-play.d.ts.map +1 -0
- package/dist/store/google-play.js +228 -0
- package/dist/store/google-play.js.map +1 -0
- package/dist/store/huawei.d.ts +16 -0
- package/dist/store/huawei.d.ts.map +1 -0
- package/dist/store/huawei.js +205 -0
- package/dist/store/huawei.js.map +1 -0
- package/dist/store/rustore.d.ts +17 -0
- package/dist/store/rustore.d.ts.map +1 -0
- package/dist/store/rustore.js +223 -0
- package/dist/store/rustore.js.map +1 -0
- package/dist/store/store-client.d.ts +13 -0
- package/dist/store/store-client.d.ts.map +1 -0
- package/dist/store/store-client.js +2 -0
- package/dist/store/store-client.js.map +1 -0
- package/dist/tools/app-tools.js +4 -4
- package/dist/tools/app-tools.js.map +1 -1
- package/dist/tools/aurora-tools.js +2 -2
- package/dist/tools/clipboard-tools.js +4 -4
- package/dist/tools/clipboard-tools.js.map +1 -1
- package/dist/tools/context.d.ts +8 -0
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +3 -0
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/desktop-tools.js +9 -9
- package/dist/tools/desktop-tools.js.map +1 -1
- package/dist/tools/device-tools.js +4 -4
- package/dist/tools/device-tools.js.map +1 -1
- package/dist/tools/flow-tools.d.ts.map +1 -1
- package/dist/tools/flow-tools.js +12 -5
- package/dist/tools/flow-tools.js.map +1 -1
- package/dist/tools/huawei-tools.d.ts +3 -0
- package/dist/tools/huawei-tools.d.ts.map +1 -0
- package/dist/tools/huawei-tools.js +94 -0
- package/dist/tools/huawei-tools.js.map +1 -0
- package/dist/tools/interaction-tools.d.ts.map +1 -1
- package/dist/tools/interaction-tools.js +40 -11
- package/dist/tools/interaction-tools.js.map +1 -1
- package/dist/tools/permission-tools.js +3 -3
- package/dist/tools/permission-tools.js.map +1 -1
- package/dist/tools/rustore-tools.d.ts +3 -0
- package/dist/tools/rustore-tools.d.ts.map +1 -0
- package/dist/tools/rustore-tools.js +117 -0
- package/dist/tools/rustore-tools.js.map +1 -0
- package/dist/tools/screenshot-tools.d.ts.map +1 -1
- package/dist/tools/screenshot-tools.js +6 -4
- package/dist/tools/screenshot-tools.js.map +1 -1
- package/dist/tools/store-tools.d.ts +3 -0
- package/dist/tools/store-tools.d.ts.map +1 -0
- package/dist/tools/store-tools.js +168 -0
- package/dist/tools/store-tools.js.map +1 -0
- package/dist/tools/system-tools.js +8 -8
- package/dist/tools/system-tools.js.map +1 -1
- package/dist/tools/ui-tools.js +9 -9
- package/dist/tools/ui-tools.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -38,13 +38,13 @@ npx add-mcp claude-in-mobile -a cursor -y
|
|
|
38
38
|
### Claude Code CLI
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
claude mcp add --transport stdio mobile -- npx
|
|
41
|
+
claude mcp add --transport stdio mobile -- npx claude-in-mobile@latest
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
To add globally (available in all projects):
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
claude mcp add --scope user --transport stdio mobile -- npx
|
|
47
|
+
claude mcp add --scope user --transport stdio mobile -- npx claude-in-mobile@latest
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### OpenCode
|
|
@@ -157,7 +157,7 @@ Add to your Claude Code settings (`~/.claude.json` or project settings):
|
|
|
157
157
|
### Windows
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
|
-
claude mcp add --transport stdio mobile -- cmd /c npx
|
|
160
|
+
claude mcp add --transport stdio mobile -- cmd /c npx claude-in-mobile@latest
|
|
161
161
|
```
|
|
162
162
|
|
|
163
163
|
## Requirements
|
package/dist/client-adapter.js
CHANGED
|
@@ -4,19 +4,19 @@ const CLIENT_MATCHERS = [
|
|
|
4
4
|
{ pattern: /cursor/i, type: "cursor" },
|
|
5
5
|
];
|
|
6
6
|
const OPENCODE_ALIASES = {
|
|
7
|
-
touch: "
|
|
8
|
-
press: "
|
|
9
|
-
capture_screen: "
|
|
7
|
+
touch: "input_tap",
|
|
8
|
+
press: "input_tap",
|
|
9
|
+
capture_screen: "screen_capture",
|
|
10
10
|
};
|
|
11
11
|
const OPENCODE_ALIASES_WITH_DEFAULTS = {
|
|
12
|
-
swipe_up: { tool: "
|
|
13
|
-
swipe_down: { tool: "
|
|
12
|
+
swipe_up: { tool: "input_swipe", defaults: { direction: "up" } },
|
|
13
|
+
swipe_down: { tool: "input_swipe", defaults: { direction: "down" } },
|
|
14
14
|
};
|
|
15
15
|
const INSTRUCTIONS = {
|
|
16
|
-
"claude-code": "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use '
|
|
17
|
-
opencode: "Mobile and desktop automation server. Use '
|
|
18
|
-
cursor: "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use '
|
|
19
|
-
unknown: "Mobile and desktop automation server. Use '
|
|
16
|
+
"claude-code": "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use 'screen_capture' to see the screen, 'input_tap' to interact with elements, 'ui_tree' for the accessibility tree, and 'screen_annotate' for visual element discovery.",
|
|
17
|
+
opencode: "Mobile and desktop automation server. Use 'screen_capture' to see the screen, 'input_tap' to interact, 'ui_tree' for the element tree. Supports Android, iOS Simulator, Desktop, and Aurora OS. Use 'device_list' to see connected devices and 'device_set' to switch between them.",
|
|
18
|
+
cursor: "Mobile and desktop automation server. Supports Android (ADB), iOS Simulator (simctl+WDA), Desktop (Compose), and Aurora OS (audb). Use 'screen_capture' to see the screen, 'input_tap' to interact with elements, 'ui_tree' for the accessibility tree.",
|
|
19
|
+
unknown: "Mobile and desktop automation server. Use 'screen_capture' to see the screen, 'input_tap' to interact, 'ui_tree' for the element tree. Use 'device_list' to see connected devices.",
|
|
20
20
|
};
|
|
21
21
|
export function detectClient(clientInfo) {
|
|
22
22
|
if (!clientInfo) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-adapter.js","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"AAqBA,MAAM,eAAe,GAAiD;IACpE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;IAC3C,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;IAC1C,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;CACvC,CAAC;AAEF,MAAM,gBAAgB,GAA2B;IAC/C,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"client-adapter.js","sourceRoot":"","sources":["../src/client-adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,9 @@ import { auroraTools } from "./tools/aurora-tools.js";
|
|
|
16
16
|
import { flowTools } from "./tools/flow-tools.js";
|
|
17
17
|
import { clipboardTools } from "./tools/clipboard-tools.js";
|
|
18
18
|
import { browserTools } from "./tools/browser-tools.js";
|
|
19
|
+
import { storeTools } from "./tools/store-tools.js";
|
|
20
|
+
import { huaweiTools } from "./tools/huawei-tools.js";
|
|
21
|
+
import { ruStoreTools } from "./tools/rustore-tools.js";
|
|
19
22
|
import { detectClient, getConfigSnippet } from "./client-adapter.js";
|
|
20
23
|
// Dispatch function (needed by batch_commands / run_flow for recursion)
|
|
21
24
|
async function handleTool(name, args, depth = 0) {
|
|
@@ -44,15 +47,81 @@ registerTools([
|
|
|
44
47
|
...flowTools,
|
|
45
48
|
...clipboardTools,
|
|
46
49
|
...browserTools,
|
|
50
|
+
...storeTools,
|
|
51
|
+
...huaweiTools,
|
|
52
|
+
...ruStoreTools,
|
|
47
53
|
]);
|
|
48
|
-
//
|
|
54
|
+
// Backward compat: v3.0.x names → v3.1.x canonical names
|
|
49
55
|
registerAliases({
|
|
50
|
-
|
|
56
|
+
// device
|
|
57
|
+
"list_devices": "device_list",
|
|
58
|
+
"set_device": "device_set",
|
|
59
|
+
"set_target": "device_set_target",
|
|
60
|
+
"get_target": "device_get_target",
|
|
61
|
+
// interaction
|
|
62
|
+
"tap": "input_tap",
|
|
63
|
+
"double_tap": "input_double_tap",
|
|
64
|
+
"long_press": "input_long_press",
|
|
65
|
+
"swipe": "input_swipe",
|
|
66
|
+
"press_key": "input_key",
|
|
67
|
+
// ui
|
|
68
|
+
"get_ui": "ui_tree",
|
|
69
|
+
"find_element": "ui_find",
|
|
70
|
+
"find_and_tap": "ui_find_tap",
|
|
71
|
+
"tap_by_text": "ui_tap_text",
|
|
72
|
+
"analyze_screen": "ui_analyze",
|
|
73
|
+
"wait_for_element": "ui_wait",
|
|
74
|
+
"assert_visible": "ui_assert_visible",
|
|
75
|
+
"assert_not_exists": "ui_assert_gone",
|
|
76
|
+
// system
|
|
77
|
+
"get_current_activity": "system_activity",
|
|
78
|
+
"shell": "system_shell",
|
|
79
|
+
"wait": "system_wait",
|
|
80
|
+
"open_url": "system_open_url",
|
|
81
|
+
"get_logs": "system_logs",
|
|
82
|
+
"clear_logs": "system_clear_logs",
|
|
83
|
+
"get_system_info": "system_info",
|
|
84
|
+
"get_webview": "system_webview",
|
|
85
|
+
// app
|
|
86
|
+
"launch_app": "app_launch",
|
|
87
|
+
"stop_app": "app_stop",
|
|
88
|
+
"install_app": "app_install",
|
|
89
|
+
"list_apps": "app_list",
|
|
90
|
+
// screenshot
|
|
91
|
+
"screenshot": "screen_capture",
|
|
92
|
+
"annotate_screenshot": "screen_annotate",
|
|
93
|
+
// desktop
|
|
94
|
+
"launch_desktop_app": "desktop_launch",
|
|
95
|
+
"stop_desktop_app": "desktop_stop",
|
|
96
|
+
"get_window_info": "desktop_windows",
|
|
97
|
+
"focus_window": "desktop_focus",
|
|
98
|
+
"resize_window": "desktop_resize",
|
|
99
|
+
"get_clipboard": "clipboard_get",
|
|
100
|
+
"set_clipboard": "clipboard_set",
|
|
101
|
+
"get_performance_metrics": "desktop_performance",
|
|
102
|
+
"get_monitors": "desktop_monitors",
|
|
103
|
+
// clipboard
|
|
104
|
+
"select_text": "clipboard_select",
|
|
105
|
+
"copy_text": "clipboard_copy",
|
|
106
|
+
"paste_text": "clipboard_paste",
|
|
107
|
+
"get_clipboard_android": "clipboard_get_android",
|
|
108
|
+
// flow
|
|
109
|
+
"batch_commands": "flow_batch",
|
|
110
|
+
"run_flow": "flow_run",
|
|
111
|
+
// permissions
|
|
112
|
+
"grant_permission": "permission_grant",
|
|
113
|
+
"revoke_permission": "permission_revoke",
|
|
114
|
+
"reset_permissions": "permission_reset",
|
|
115
|
+
// file (aurora)
|
|
116
|
+
"push_file": "file_push",
|
|
117
|
+
"pull_file": "file_pull",
|
|
118
|
+
// LLM misnaming helpers
|
|
119
|
+
"press_button": "input_key",
|
|
51
120
|
"type_text": "input_text",
|
|
52
121
|
"type": "input_text",
|
|
53
|
-
"click": "
|
|
54
|
-
"long_tap": "
|
|
55
|
-
"take_screenshot": "
|
|
122
|
+
"click": "input_tap",
|
|
123
|
+
"long_tap": "input_long_press",
|
|
124
|
+
"take_screenshot": "screen_capture",
|
|
56
125
|
});
|
|
57
126
|
// Handle --init CLI flag (generate config snippet and exit)
|
|
58
127
|
const initIndex = process.argv.indexOf("--init");
|
|
@@ -76,12 +145,12 @@ if (initIndex !== -1) {
|
|
|
76
145
|
// Create MCP server
|
|
77
146
|
const server = new Server({
|
|
78
147
|
name: "claude-mobile",
|
|
79
|
-
version: "3.
|
|
148
|
+
version: "3.3.0",
|
|
80
149
|
}, {
|
|
81
150
|
capabilities: {
|
|
82
151
|
tools: {},
|
|
83
152
|
},
|
|
84
|
-
instructions: "Mobile, desktop,
|
|
153
|
+
instructions: "Mobile, desktop, browser automation + store management (Google Play, Huawei AppGallery, RuStore). IMPORTANT: Always use 'ui_tree' first to inspect the screen — it is text-based and ~10x cheaper than screenshots. Use 'screen_capture' only as fallback when visual verification is required or ui_tree is insufficient. Use 'input_tap' to interact. For stores: 'store_upload' → 'store_set_notes' → 'store_submit' (Google Play), 'huawei_upload' → 'huawei_set_notes' → 'huawei_submit' (Huawei), 'rustore_upload' → 'rustore_set_notes' → 'rustore_submit' (RuStore). Use 'device_list' to see connected devices.",
|
|
85
154
|
});
|
|
86
155
|
// Detect client after MCP handshake and apply per-client adaptations
|
|
87
156
|
server.oninitialized = () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,2BAA2B,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC7H,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE,wEAAwE;AACxE,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,IAA6B,EAAE,QAAgB,CAAC;IACtF,IAAI,KAAK,GAAG,mBAAmB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,4BAA4B,mBAAmB,yFAAyF,CAAC,CAAC;IAC5J,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,qDAAqD;AACrD,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AAE1C,2BAA2B;AAC3B,aAAa,CAAC;IACZ,GAAG,WAAW;IACd,GAAG,eAAe;IAClB,GAAG,gBAAgB;IACnB,GAAG,OAAO;IACV,GAAG,QAAQ;IACX,GAAG,eAAe;IAClB,GAAG,WAAW;IACd,GAAG,YAAY;IACf,GAAG,WAAW;IACd,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,YAAY;CAChB,CAAC,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class GooglePlayClient {
|
|
2
|
+
private auth;
|
|
3
|
+
private activeEdits;
|
|
4
|
+
private token;
|
|
5
|
+
private api;
|
|
6
|
+
private ensureEdit;
|
|
7
|
+
upload(packageName: string, filePath: string): Promise<{
|
|
8
|
+
versionCode: number;
|
|
9
|
+
}>;
|
|
10
|
+
setReleaseNotes(packageName: string, language: string, text: string): Promise<void>;
|
|
11
|
+
submit(packageName: string, track: string, rollout: number): Promise<void>;
|
|
12
|
+
promote(packageName: string, fromTrack: string, toTrack: string): Promise<void>;
|
|
13
|
+
getReleases(packageName: string, track?: string): Promise<string>;
|
|
14
|
+
haltRollout(packageName: string, track: string): Promise<void>;
|
|
15
|
+
discard(packageName: string): Promise<void>;
|
|
16
|
+
private formatTrack;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=google-play.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-play.d.ts","sourceRoot":"","sources":["../../src/store/google-play.ts"],"names":[],"mappings":"AAwCA,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,WAAW,CAAgC;YAErC,KAAK;YAWL,GAAG;YAkBH,UAAU;IAiBlB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAwD/E,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B/E,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4BjE,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B9D,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { GoogleAuth } from "google-auth-library";
|
|
2
|
+
import { existsSync, createReadStream } from "fs";
|
|
3
|
+
import { stat } from "fs/promises";
|
|
4
|
+
import { Readable } from "stream";
|
|
5
|
+
const BASE = "https://androidpublisher.googleapis.com/androidpublisher/v3";
|
|
6
|
+
const UPLOAD_BASE = "https://androidpublisher.googleapis.com/upload/androidpublisher/v3";
|
|
7
|
+
const SCOPES = ["https://www.googleapis.com/auth/androidpublisher"];
|
|
8
|
+
function buildAuth() {
|
|
9
|
+
const keyFile = process.env.GOOGLE_PLAY_KEY_FILE;
|
|
10
|
+
const keyContent = process.env.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON;
|
|
11
|
+
if (keyFile && existsSync(keyFile)) {
|
|
12
|
+
return new GoogleAuth({ keyFile, scopes: SCOPES });
|
|
13
|
+
}
|
|
14
|
+
if (keyContent) {
|
|
15
|
+
return new GoogleAuth({ credentials: JSON.parse(keyContent), scopes: SCOPES });
|
|
16
|
+
}
|
|
17
|
+
// Will fail on first use with a clear message
|
|
18
|
+
return new GoogleAuth({ scopes: SCOPES });
|
|
19
|
+
}
|
|
20
|
+
export class GooglePlayClient {
|
|
21
|
+
auth = buildAuth();
|
|
22
|
+
activeEdits = new Map();
|
|
23
|
+
async token() {
|
|
24
|
+
const client = await this.auth.getClient();
|
|
25
|
+
const res = await client.getAccessToken();
|
|
26
|
+
if (!res.token) {
|
|
27
|
+
throw new Error("Google Play: failed to get access token. Set GOOGLE_PLAY_KEY_FILE or GOOGLE_PLAY_SERVICE_ACCOUNT_JSON.");
|
|
28
|
+
}
|
|
29
|
+
return res.token;
|
|
30
|
+
}
|
|
31
|
+
async api(method, url, token, body) {
|
|
32
|
+
const res = await fetch(url, {
|
|
33
|
+
method,
|
|
34
|
+
headers: {
|
|
35
|
+
Authorization: `Bearer ${token}`,
|
|
36
|
+
"Content-Type": "application/json",
|
|
37
|
+
},
|
|
38
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
const text = await res.text();
|
|
42
|
+
throw new Error(`Google Play API ${res.status} ${method} ${url.split("/edits")[0]}: ${text}`);
|
|
43
|
+
}
|
|
44
|
+
if (res.status === 204 || res.headers.get("content-length") === "0")
|
|
45
|
+
return {};
|
|
46
|
+
return res.json();
|
|
47
|
+
}
|
|
48
|
+
async ensureEdit(packageName) {
|
|
49
|
+
const existing = this.activeEdits.get(packageName);
|
|
50
|
+
if (existing)
|
|
51
|
+
return existing;
|
|
52
|
+
const token = await this.token();
|
|
53
|
+
const data = await this.api("POST", `${BASE}/applications/${packageName}/edits`, token);
|
|
54
|
+
const state = { editId: data.id, releaseNotes: [] };
|
|
55
|
+
this.activeEdits.set(packageName, state);
|
|
56
|
+
return state;
|
|
57
|
+
}
|
|
58
|
+
// ── Public API ──────────────────────────────────────────────────────────────
|
|
59
|
+
async upload(packageName, filePath) {
|
|
60
|
+
if (!existsSync(filePath)) {
|
|
61
|
+
throw new Error(`File not found: ${filePath}`);
|
|
62
|
+
}
|
|
63
|
+
const token = await this.token();
|
|
64
|
+
const state = await this.ensureEdit(packageName);
|
|
65
|
+
const type = filePath.endsWith(".aab") ? "bundles" : "apks";
|
|
66
|
+
const { size: fileSize } = await stat(filePath);
|
|
67
|
+
// Step 1: initiate resumable upload — get upload URL from Location header
|
|
68
|
+
const initiateRes = await fetch(`${UPLOAD_BASE}/applications/${packageName}/edits/${state.editId}/${type}?uploadType=resumable`, {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: {
|
|
71
|
+
Authorization: `Bearer ${token}`,
|
|
72
|
+
"X-Upload-Content-Type": "application/octet-stream",
|
|
73
|
+
"X-Upload-Content-Length": String(fileSize),
|
|
74
|
+
"Content-Type": "application/json",
|
|
75
|
+
"Content-Length": "0",
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (!initiateRes.ok) {
|
|
79
|
+
const text = await initiateRes.text();
|
|
80
|
+
throw new Error(`Upload initiation failed ${initiateRes.status}: ${text}`);
|
|
81
|
+
}
|
|
82
|
+
const uploadUrl = initiateRes.headers.get("location");
|
|
83
|
+
if (!uploadUrl) {
|
|
84
|
+
throw new Error("Upload initiation response missing Location header");
|
|
85
|
+
}
|
|
86
|
+
// Step 2: stream file to upload URL — no full file in memory
|
|
87
|
+
const uploadRes = await fetch(uploadUrl, {
|
|
88
|
+
method: "PUT",
|
|
89
|
+
headers: {
|
|
90
|
+
"Content-Type": "application/octet-stream",
|
|
91
|
+
"Content-Length": String(fileSize),
|
|
92
|
+
},
|
|
93
|
+
// @ts-ignore — duplex required for streaming body in Node.js fetch
|
|
94
|
+
duplex: "half",
|
|
95
|
+
body: Readable.toWeb(createReadStream(filePath)),
|
|
96
|
+
});
|
|
97
|
+
if (!uploadRes.ok) {
|
|
98
|
+
const text = await uploadRes.text();
|
|
99
|
+
throw new Error(`Upload failed ${uploadRes.status}: ${text}`);
|
|
100
|
+
}
|
|
101
|
+
const data = await uploadRes.json();
|
|
102
|
+
state.versionCode = data.versionCode;
|
|
103
|
+
return { versionCode: data.versionCode };
|
|
104
|
+
}
|
|
105
|
+
async setReleaseNotes(packageName, language, text) {
|
|
106
|
+
const state = this.activeEdits.get(packageName);
|
|
107
|
+
if (!state) {
|
|
108
|
+
throw new Error(`No active release for "${packageName}". Call store_upload first.`);
|
|
109
|
+
}
|
|
110
|
+
const idx = state.releaseNotes.findIndex(n => n.language === language);
|
|
111
|
+
if (idx >= 0) {
|
|
112
|
+
state.releaseNotes[idx].text = text;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
state.releaseNotes.push({ language, text });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async submit(packageName, track, rollout) {
|
|
119
|
+
const state = this.activeEdits.get(packageName);
|
|
120
|
+
if (!state) {
|
|
121
|
+
throw new Error(`No active release for "${packageName}". Call store_upload first.`);
|
|
122
|
+
}
|
|
123
|
+
if (!state.versionCode) {
|
|
124
|
+
throw new Error(`No version code for "${packageName}". Call store_upload first.`);
|
|
125
|
+
}
|
|
126
|
+
const token = await this.token();
|
|
127
|
+
const isPartial = rollout < 1.0;
|
|
128
|
+
await this.api("PUT", `${BASE}/applications/${packageName}/edits/${state.editId}/tracks/${track}`, token, {
|
|
129
|
+
track,
|
|
130
|
+
releases: [{
|
|
131
|
+
versionCodes: [String(state.versionCode)],
|
|
132
|
+
status: isPartial ? "inProgress" : "completed",
|
|
133
|
+
...(isPartial && { userFraction: rollout }),
|
|
134
|
+
releaseNotes: state.releaseNotes.map(n => ({ language: n.language, text: n.text })),
|
|
135
|
+
}],
|
|
136
|
+
});
|
|
137
|
+
await this.api("POST", `${BASE}/applications/${packageName}/edits/${state.editId}:commit`, token);
|
|
138
|
+
this.activeEdits.delete(packageName);
|
|
139
|
+
}
|
|
140
|
+
async promote(packageName, fromTrack, toTrack) {
|
|
141
|
+
const token = await this.token();
|
|
142
|
+
const { id: editId } = await this.api("POST", `${BASE}/applications/${packageName}/edits`, token);
|
|
143
|
+
try {
|
|
144
|
+
const trackData = await this.api("GET", `${BASE}/applications/${packageName}/edits/${editId}/tracks/${fromTrack}`, token);
|
|
145
|
+
const release = trackData.releases?.[0];
|
|
146
|
+
if (!release?.versionCodes?.length) {
|
|
147
|
+
throw new Error(`No releases found on track "${fromTrack}"`);
|
|
148
|
+
}
|
|
149
|
+
await this.api("PUT", `${BASE}/applications/${packageName}/edits/${editId}/tracks/${toTrack}`, token, {
|
|
150
|
+
track: toTrack,
|
|
151
|
+
releases: [{
|
|
152
|
+
versionCodes: release.versionCodes,
|
|
153
|
+
status: "completed",
|
|
154
|
+
releaseNotes: release.releaseNotes ?? [],
|
|
155
|
+
}],
|
|
156
|
+
});
|
|
157
|
+
await this.api("POST", `${BASE}/applications/${packageName}/edits/${editId}:commit`, token);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
await this.api("DELETE", `${BASE}/applications/${packageName}/edits/${editId}`, token).catch(() => { });
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async getReleases(packageName, track) {
|
|
165
|
+
const token = await this.token();
|
|
166
|
+
const { id: editId } = await this.api("POST", `${BASE}/applications/${packageName}/edits`, token);
|
|
167
|
+
try {
|
|
168
|
+
const tracks = track ? [track] : ["internal", "alpha", "beta", "production"];
|
|
169
|
+
const lines = [];
|
|
170
|
+
for (const t of tracks) {
|
|
171
|
+
try {
|
|
172
|
+
const data = await this.api("GET", `${BASE}/applications/${packageName}/edits/${editId}/tracks/${t}`, token);
|
|
173
|
+
lines.push(this.formatTrack(t, data.releases ?? []));
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
if (track)
|
|
177
|
+
throw err; // Re-throw if specific track was requested
|
|
178
|
+
// Otherwise silently skip empty tracks
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return lines.join("\n").trim() || "No releases found";
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
await this.api("DELETE", `${BASE}/applications/${packageName}/edits/${editId}`, token).catch(() => { });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async haltRollout(packageName, track) {
|
|
188
|
+
const token = await this.token();
|
|
189
|
+
const { id: editId } = await this.api("POST", `${BASE}/applications/${packageName}/edits`, token);
|
|
190
|
+
try {
|
|
191
|
+
const data = await this.api("GET", `${BASE}/applications/${packageName}/edits/${editId}/tracks/${track}`, token);
|
|
192
|
+
const release = data.releases?.[0];
|
|
193
|
+
if (!release)
|
|
194
|
+
throw new Error(`No active release on track "${track}"`);
|
|
195
|
+
if (release.status !== "inProgress") {
|
|
196
|
+
throw new Error(`Track "${track}" is not in staged rollout (status: ${release.status})`);
|
|
197
|
+
}
|
|
198
|
+
await this.api("PUT", `${BASE}/applications/${packageName}/edits/${editId}/tracks/${track}`, token, {
|
|
199
|
+
track,
|
|
200
|
+
releases: [{ versionCodes: release.versionCodes, status: "halted" }],
|
|
201
|
+
});
|
|
202
|
+
await this.api("POST", `${BASE}/applications/${packageName}/edits/${editId}:commit`, token);
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
await this.api("DELETE", `${BASE}/applications/${packageName}/edits/${editId}`, token).catch(() => { });
|
|
206
|
+
throw err;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async discard(packageName) {
|
|
210
|
+
const state = this.activeEdits.get(packageName);
|
|
211
|
+
if (!state) {
|
|
212
|
+
throw new Error(`No active release draft for "${packageName}"`);
|
|
213
|
+
}
|
|
214
|
+
const token = await this.token();
|
|
215
|
+
await this.api("DELETE", `${BASE}/applications/${packageName}/edits/${state.editId}`, token).catch(() => { });
|
|
216
|
+
this.activeEdits.delete(packageName);
|
|
217
|
+
}
|
|
218
|
+
// ── Formatting ──────────────────────────────────────────────────────────────
|
|
219
|
+
formatTrack(track, releases) {
|
|
220
|
+
if (releases.length === 0)
|
|
221
|
+
return `${track}: (empty)`;
|
|
222
|
+
const r = releases[0];
|
|
223
|
+
const versions = r.versionCodes?.join(", ") ?? "?";
|
|
224
|
+
const fraction = r.userFraction !== undefined ? ` (${(r.userFraction * 100).toFixed(0)}% rollout)` : "";
|
|
225
|
+
return `${track}: v${versions} — ${r.status}${fraction}`;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=google-play.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-play.js","sourceRoot":"","sources":["../../src/store/google-play.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { StoreClient, UploadResult } from "./store-client.js";
|
|
2
|
+
export declare class HuaweiAppGalleryClient implements StoreClient {
|
|
3
|
+
private tokenCache;
|
|
4
|
+
private appIdCache;
|
|
5
|
+
private drafts;
|
|
6
|
+
private getToken;
|
|
7
|
+
private api;
|
|
8
|
+
private getAppId;
|
|
9
|
+
upload(packageName: string, filePath: string): Promise<UploadResult>;
|
|
10
|
+
setReleaseNotes(packageName: string, language: string, text: string): Promise<void>;
|
|
11
|
+
submit(packageName: string, _options?: {
|
|
12
|
+
rollout?: number;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
getReleases(packageName: string): Promise<string>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=huawei.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huawei.d.ts","sourceRoot":"","sources":["../../src/store/huawei.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA4DnE,qBAAa,sBAAuB,YAAW,WAAW;IACxD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,MAAM,CAAiC;YAIjC,QAAQ;YAsCR,GAAG;YAkBH,QAAQ;IAyBhB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiFpE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB3E,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsBxD"}
|