claude-in-mobile 3.2.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.
Files changed (36) hide show
  1. package/README.md +3 -3
  2. package/dist/index.js +6 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/store/huawei.d.ts +16 -0
  5. package/dist/store/huawei.d.ts.map +1 -0
  6. package/dist/store/huawei.js +205 -0
  7. package/dist/store/huawei.js.map +1 -0
  8. package/dist/store/rustore.d.ts +17 -0
  9. package/dist/store/rustore.d.ts.map +1 -0
  10. package/dist/store/rustore.js +223 -0
  11. package/dist/store/rustore.js.map +1 -0
  12. package/dist/store/store-client.d.ts +13 -0
  13. package/dist/store/store-client.d.ts.map +1 -0
  14. package/dist/store/store-client.js +2 -0
  15. package/dist/store/store-client.js.map +1 -0
  16. package/dist/tools/context.d.ts +8 -0
  17. package/dist/tools/context.d.ts.map +1 -1
  18. package/dist/tools/context.js +3 -0
  19. package/dist/tools/context.js.map +1 -1
  20. package/dist/tools/huawei-tools.d.ts +3 -0
  21. package/dist/tools/huawei-tools.d.ts.map +1 -0
  22. package/dist/tools/huawei-tools.js +94 -0
  23. package/dist/tools/huawei-tools.js.map +1 -0
  24. package/dist/tools/interaction-tools.d.ts.map +1 -1
  25. package/dist/tools/interaction-tools.js +35 -6
  26. package/dist/tools/interaction-tools.js.map +1 -1
  27. package/dist/tools/rustore-tools.d.ts +3 -0
  28. package/dist/tools/rustore-tools.d.ts.map +1 -0
  29. package/dist/tools/rustore-tools.js +117 -0
  30. package/dist/tools/rustore-tools.js.map +1 -0
  31. package/dist/tools/screenshot-tools.d.ts.map +1 -1
  32. package/dist/tools/screenshot-tools.js +4 -2
  33. package/dist/tools/screenshot-tools.js.map +1 -1
  34. package/dist/tools/ui-tools.js +1 -1
  35. package/dist/tools/ui-tools.js.map +1 -1
  36. package/package.json +1 -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 -y claude-in-mobile
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 -y claude-in-mobile
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 -y claude-in-mobile
160
+ claude mcp add --transport stdio mobile -- cmd /c npx claude-in-mobile@latest
161
161
  ```
162
162
 
163
163
  ## Requirements
package/dist/index.js CHANGED
@@ -17,6 +17,8 @@ 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
19
  import { storeTools } from "./tools/store-tools.js";
20
+ import { huaweiTools } from "./tools/huawei-tools.js";
21
+ import { ruStoreTools } from "./tools/rustore-tools.js";
20
22
  import { detectClient, getConfigSnippet } from "./client-adapter.js";
21
23
  // Dispatch function (needed by batch_commands / run_flow for recursion)
22
24
  async function handleTool(name, args, depth = 0) {
@@ -46,6 +48,8 @@ registerTools([
46
48
  ...clipboardTools,
47
49
  ...browserTools,
48
50
  ...storeTools,
51
+ ...huaweiTools,
52
+ ...ruStoreTools,
49
53
  ]);
50
54
  // Backward compat: v3.0.x names → v3.1.x canonical names
51
55
  registerAliases({
@@ -141,12 +145,12 @@ if (initIndex !== -1) {
141
145
  // Create MCP server
142
146
  const server = new Server({
143
147
  name: "claude-mobile",
144
- version: "3.2.0",
148
+ version: "3.3.0",
145
149
  }, {
146
150
  capabilities: {
147
151
  tools: {},
148
152
  },
149
- instructions: "Mobile, desktop, browser automation + Google Play store management. Use 'screen_capture' to see the screen, 'input_tap' to interact, 'ui_tree' for the element tree. Use 'store_upload' → 'store_set_notes' → 'store_submit' to publish to Google Play. Use 'device_list' to see connected devices.",
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.",
150
154
  });
151
155
  // Detect client after MCP handshake and apply per-client adaptations
152
156
  server.oninitialized = () => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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"}
@@ -0,0 +1,205 @@
1
+ import { existsSync, createReadStream } from "fs";
2
+ import { stat } from "fs/promises";
3
+ import { Readable } from "stream";
4
+ const OAUTH_URL = "https://connect-api.cloud.huawei.com/api/oauth2/v1/token";
5
+ const BASE = "https://connect-api.cloud.huawei.com/api/publish/v2";
6
+ const UPLOAD_KIT_BASE = "https://connect-api.cloud.huawei.com/api/publishingkit/v1";
7
+ function buildCredentials() {
8
+ const clientId = process.env.HUAWEI_CLIENT_ID;
9
+ const clientSecret = process.env.HUAWEI_CLIENT_SECRET;
10
+ if (!clientId || !clientSecret) {
11
+ throw new Error("Huawei AppGallery: missing credentials. Set HUAWEI_CLIENT_ID and HUAWEI_CLIENT_SECRET environment variables.");
12
+ }
13
+ return { clientId, clientSecret };
14
+ }
15
+ export class HuaweiAppGalleryClient {
16
+ tokenCache = null;
17
+ appIdCache = new Map();
18
+ drafts = new Map();
19
+ // ── Auth ─────────────────────────────────────────────────────────────────────
20
+ async getToken() {
21
+ const now = Date.now();
22
+ if (this.tokenCache && this.tokenCache.expiresAt > now + 60_000) {
23
+ return this.tokenCache.token;
24
+ }
25
+ const { clientId, clientSecret } = buildCredentials();
26
+ const body = new URLSearchParams({
27
+ grant_type: "client_credentials",
28
+ client_id: clientId,
29
+ client_secret: clientSecret,
30
+ });
31
+ const res = await fetch(OAUTH_URL, {
32
+ method: "POST",
33
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
34
+ body: body.toString(),
35
+ });
36
+ if (!res.ok) {
37
+ const text = await res.text();
38
+ throw new Error(`Huawei OAuth failed ${res.status}: ${text}`);
39
+ }
40
+ const data = await res.json();
41
+ if (!data.access_token) {
42
+ throw new Error("Huawei OAuth: no access_token in response");
43
+ }
44
+ this.tokenCache = {
45
+ token: data.access_token,
46
+ expiresAt: now + data.expires_in * 1000,
47
+ };
48
+ return this.tokenCache.token;
49
+ }
50
+ // ── API helpers ──────────────────────────────────────────────────────────────
51
+ async api(method, url, token, body) {
52
+ const res = await fetch(url, {
53
+ method,
54
+ headers: {
55
+ Authorization: `Bearer ${token}`,
56
+ "Content-Type": "application/json",
57
+ },
58
+ body: body !== undefined ? JSON.stringify(body) : undefined,
59
+ });
60
+ if (!res.ok) {
61
+ const text = await res.text();
62
+ throw new Error(`Huawei API ${res.status} ${method} ${url}: ${text}`);
63
+ }
64
+ if (res.status === 204 || res.headers.get("content-length") === "0")
65
+ return {};
66
+ return res.json();
67
+ }
68
+ async getAppId(packageName, token) {
69
+ const cached = this.appIdCache.get(packageName);
70
+ if (cached)
71
+ return cached;
72
+ const data = await this.api("GET", `${BASE}/app-id-list?packageName=${encodeURIComponent(packageName)}`, token);
73
+ if (data.ret.code !== 0) {
74
+ throw new Error(`Huawei: failed to get appId for "${packageName}": ${data.ret.msg}`);
75
+ }
76
+ const entry = data.appIds?.[0];
77
+ if (!entry) {
78
+ throw new Error(`Huawei: no appId found for package "${packageName}"`);
79
+ }
80
+ this.appIdCache.set(packageName, entry.appId);
81
+ return entry.appId;
82
+ }
83
+ // ── Public API ───────────────────────────────────────────────────────────────
84
+ async upload(packageName, filePath) {
85
+ if (!existsSync(filePath)) {
86
+ throw new Error(`File not found: ${filePath}`);
87
+ }
88
+ const token = await this.getToken();
89
+ const appId = await this.getAppId(packageName, token);
90
+ const ext = filePath.toLowerCase().endsWith(".aab") ? "AAB" : "APK";
91
+ const fileName = filePath.split("/").pop() ?? filePath;
92
+ const { size: fileSize } = await stat(filePath);
93
+ // Step 1: Get upload URL and authCode
94
+ const urlData = await this.api("GET", `${UPLOAD_KIT_BASE}/files/uploadUrl?appId=${appId}&fileType=${ext}&releaseType=1`, token);
95
+ if (urlData.ret.code !== 0) {
96
+ throw new Error(`Huawei: failed to get upload URL: ${urlData.ret.msg}`);
97
+ }
98
+ if (!urlData.uploadUrl || !urlData.authCode) {
99
+ throw new Error("Huawei: upload URL response missing uploadUrl or authCode");
100
+ }
101
+ // Step 2: Upload file via multipart/form-data
102
+ const formData = new FormData();
103
+ const webStream = Readable.toWeb(createReadStream(filePath));
104
+ const blob = new Blob([await streamToBuffer(webStream)], { type: "application/octet-stream" });
105
+ formData.append("file", blob, fileName);
106
+ formData.append("token", urlData.authCode);
107
+ const uploadRes = await fetch(urlData.uploadUrl, {
108
+ method: "POST",
109
+ body: formData,
110
+ });
111
+ if (!uploadRes.ok) {
112
+ const text = await uploadRes.text();
113
+ throw new Error(`Huawei: file upload failed ${uploadRes.status}: ${text}`);
114
+ }
115
+ const uploadData = await uploadRes.json();
116
+ if (uploadData.result.resultCode !== 0) {
117
+ throw new Error(`Huawei: file upload error: ${uploadData.result.resultMsg}`);
118
+ }
119
+ const fileInfo = uploadData.fileInfoList?.[0];
120
+ if (!fileInfo) {
121
+ throw new Error("Huawei: upload response missing fileInfoList");
122
+ }
123
+ // Step 3: Attach uploaded file to app
124
+ await this.api("PUT", `${BASE}/app-file-info?appId=${appId}`, token, {
125
+ fileType: 5,
126
+ files: [{
127
+ fileId: fileInfo.fileId,
128
+ fileName: fileInfo.fileName,
129
+ fileDestUrl: urlData.uploadUrl,
130
+ size: fileSize,
131
+ }],
132
+ });
133
+ // Store draft state for release notes and submit
134
+ this.drafts.set(packageName, {
135
+ fileId: fileInfo.fileId,
136
+ fileName: fileInfo.fileName,
137
+ fileSize,
138
+ fileType: ext,
139
+ releaseNotes: [],
140
+ });
141
+ return { versionId: fileInfo.fileId };
142
+ }
143
+ async setReleaseNotes(packageName, language, text) {
144
+ const draft = this.drafts.get(packageName);
145
+ if (!draft) {
146
+ throw new Error(`Huawei: no active upload for "${packageName}". Call huawei_upload first.`);
147
+ }
148
+ const idx = draft.releaseNotes.findIndex(n => n.language === language);
149
+ if (idx >= 0) {
150
+ draft.releaseNotes[idx].text = text;
151
+ }
152
+ else {
153
+ draft.releaseNotes.push({ language, text });
154
+ }
155
+ }
156
+ async submit(packageName, _options) {
157
+ const token = await this.getToken();
158
+ const appId = await this.getAppId(packageName, token);
159
+ // Submit the app for review/publishing
160
+ const data = await this.api("POST", `${BASE}/app-submit?appId=${appId}`, token);
161
+ if (data.ret.code !== 0) {
162
+ throw new Error(`Huawei: submit failed: ${data.ret.msg}`);
163
+ }
164
+ this.drafts.delete(packageName);
165
+ }
166
+ async getReleases(packageName) {
167
+ const token = await this.getToken();
168
+ const appId = await this.getAppId(packageName, token);
169
+ const data = await this.api("GET", `${BASE}/app-info?appId=${appId}`, token);
170
+ if (data.ret.code !== 0) {
171
+ throw new Error(`Huawei: getReleases failed: ${data.ret.msg}`);
172
+ }
173
+ if (!data.appInfo) {
174
+ return `${packageName}: no release info available`;
175
+ }
176
+ const { versionCode, releaseState } = data.appInfo;
177
+ const statusLabel = formatReleaseState(releaseState);
178
+ return `${packageName}: v${versionCode} — ${statusLabel}`;
179
+ }
180
+ }
181
+ // ── Helpers ──────────────────────────────────────────────────────────────────
182
+ async function streamToBuffer(stream) {
183
+ const reader = stream.getReader();
184
+ const chunks = [];
185
+ while (true) {
186
+ const { done, value } = await reader.read();
187
+ if (done)
188
+ break;
189
+ chunks.push(value);
190
+ }
191
+ return Buffer.concat(chunks);
192
+ }
193
+ function formatReleaseState(state) {
194
+ const states = {
195
+ 1: "Draft",
196
+ 2: "Under review",
197
+ 3: "Published",
198
+ 4: "Rejected",
199
+ 5: "Removed",
200
+ 6: "Update in review",
201
+ 7: "Update published",
202
+ };
203
+ return states[state] ?? `Unknown (${state})`;
204
+ }
205
+ //# sourceMappingURL=huawei.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huawei.js","sourceRoot":"","sources":["../../src/store/huawei.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { StoreClient, UploadResult } from "./store-client.js";
2
+ export declare class RuStoreClient implements StoreClient {
3
+ private tokenCache;
4
+ private drafts;
5
+ private getToken;
6
+ private api;
7
+ private createDraftVersion;
8
+ upload(packageName: string, filePath: string): Promise<UploadResult>;
9
+ setReleaseNotes(packageName: string, language: string, text: string): Promise<void>;
10
+ submit(packageName: string, _options?: {
11
+ rollout?: number;
12
+ }): Promise<void>;
13
+ getReleases(packageName: string): Promise<string>;
14
+ discard(packageName: string): Promise<void>;
15
+ private deleteDraft;
16
+ }
17
+ //# sourceMappingURL=rustore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustore.d.ts","sourceRoot":"","sources":["../../src/store/rustore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuGnE,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAAiC;YAIjC,QAAQ;YAoCR,GAAG;YAkBH,kBAAkB;IAiB1B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDpE,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;IAwC3E,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BjD,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAanC,WAAW;CAa1B"}
@@ -0,0 +1,223 @@
1
+ import { existsSync, createReadStream } from "fs";
2
+ import { stat } from "fs/promises";
3
+ import { Readable } from "stream";
4
+ import { createSign } from "crypto";
5
+ const BASE = "https://public-api.rustore.ru/public/v1";
6
+ const AUTH_URL = "https://public-api.rustore.ru/public/auth";
7
+ function loadCredentials() {
8
+ // Try JSON config first
9
+ const keyJson = process.env.RUSTORE_KEY_JSON;
10
+ if (keyJson) {
11
+ try {
12
+ const parsed = JSON.parse(keyJson);
13
+ if (parsed.companyId && parsed.keyId && parsed.privateKey) {
14
+ return parsed;
15
+ }
16
+ }
17
+ catch {
18
+ throw new Error("RuStore: RUSTORE_KEY_JSON is not valid JSON");
19
+ }
20
+ }
21
+ // Try individual env vars
22
+ const companyId = process.env.RUSTORE_COMPANY_ID;
23
+ const keyId = process.env.RUSTORE_KEY_ID;
24
+ const privateKey = process.env.RUSTORE_PRIVATE_KEY;
25
+ if (companyId && keyId && privateKey) {
26
+ return { companyId, keyId, privateKey };
27
+ }
28
+ throw new Error("RuStore: missing credentials. Set RUSTORE_KEY_JSON or (RUSTORE_COMPANY_ID + RUSTORE_KEY_ID + RUSTORE_PRIVATE_KEY) environment variables.");
29
+ }
30
+ function createJwt(credentials) {
31
+ const header = Buffer.from(JSON.stringify({ alg: "RS256", typ: "JWT" })).toString("base64url");
32
+ const payload = Buffer.from(JSON.stringify({ keyId: credentials.keyId, timestamp: Date.now() })).toString("base64url");
33
+ const signingInput = `${header}.${payload}`;
34
+ const sign = createSign("RSA-SHA256");
35
+ sign.update(signingInput);
36
+ const signature = sign.sign(credentials.privateKey, "base64url");
37
+ return `${signingInput}.${signature}`;
38
+ }
39
+ export class RuStoreClient {
40
+ tokenCache = null;
41
+ drafts = new Map();
42
+ // ── Auth ─────────────────────────────────────────────────────────────────────
43
+ async getToken() {
44
+ const now = Date.now();
45
+ // Refresh 60 seconds before expiry
46
+ if (this.tokenCache && this.tokenCache.expiresAt > now + 60_000) {
47
+ return this.tokenCache.token;
48
+ }
49
+ const credentials = loadCredentials();
50
+ const jwtToken = createJwt(credentials);
51
+ const res = await fetch(AUTH_URL, {
52
+ method: "POST",
53
+ headers: { "Content-Type": "application/json" },
54
+ body: JSON.stringify({ jwtToken }),
55
+ });
56
+ if (!res.ok) {
57
+ const text = await res.text();
58
+ throw new Error(`RuStore auth failed ${res.status}: ${text}`);
59
+ }
60
+ const data = await res.json();
61
+ if (data.code !== "OK") {
62
+ throw new Error(`RuStore auth error: ${data.message ?? data.code}`);
63
+ }
64
+ const ttlMs = data.body.ttl * 1000;
65
+ this.tokenCache = {
66
+ token: data.body.jwtToken,
67
+ expiresAt: Date.now() + ttlMs,
68
+ };
69
+ return this.tokenCache.token;
70
+ }
71
+ // ── API helpers ──────────────────────────────────────────────────────────────
72
+ async api(method, url, token, body) {
73
+ const res = await fetch(url, {
74
+ method,
75
+ headers: {
76
+ "Public-Token": token,
77
+ "Content-Type": "application/json",
78
+ },
79
+ body: body !== undefined ? JSON.stringify(body) : undefined,
80
+ });
81
+ if (!res.ok) {
82
+ const text = await res.text();
83
+ throw new Error(`RuStore API ${res.status} ${method} ${url}: ${text}`);
84
+ }
85
+ if (res.status === 204 || res.headers.get("content-length") === "0")
86
+ return {};
87
+ return res.json();
88
+ }
89
+ async createDraftVersion(packageName, token) {
90
+ const data = await this.api("POST", `${BASE}/application/${encodeURIComponent(packageName)}/version`, token, { whatsNew: {} });
91
+ if (data.code !== "OK") {
92
+ throw new Error(`RuStore: failed to create draft version: ${data.message ?? data.code}`);
93
+ }
94
+ return data.body.versionId;
95
+ }
96
+ // ── Public API ───────────────────────────────────────────────────────────────
97
+ async upload(packageName, filePath) {
98
+ if (!existsSync(filePath)) {
99
+ throw new Error(`File not found: ${filePath}`);
100
+ }
101
+ const token = await this.getToken();
102
+ const versionId = await this.createDraftVersion(packageName, token);
103
+ const isAab = filePath.toLowerCase().endsWith(".aab");
104
+ const uploadPath = isAab ? "aab" : "apk";
105
+ const { size: fileSize } = await stat(filePath);
106
+ const fileName = filePath.split("/").pop() ?? filePath;
107
+ const formData = new FormData();
108
+ const webStream = Readable.toWeb(createReadStream(filePath));
109
+ const blob = new Blob([await streamToBuffer(webStream)], { type: "application/octet-stream" });
110
+ formData.append("file", blob, fileName);
111
+ const uploadUrl = `${BASE}/application/${encodeURIComponent(packageName)}/version/${versionId}/${uploadPath}` +
112
+ `?servicesType=Unknown&isMainApk=true`;
113
+ const res = await fetch(uploadUrl, {
114
+ method: "POST",
115
+ headers: {
116
+ "Public-Token": token,
117
+ // No Content-Type — let fetch set multipart boundary automatically
118
+ },
119
+ body: formData,
120
+ });
121
+ if (!res.ok) {
122
+ const text = await res.text();
123
+ // Clean up orphaned draft
124
+ await this.deleteDraft(packageName, versionId, token);
125
+ throw new Error(`RuStore: APK/AAB upload failed ${res.status}: ${text}`);
126
+ }
127
+ const uploadData = await res.json();
128
+ if (uploadData.code !== "OK") {
129
+ await this.deleteDraft(packageName, versionId, token);
130
+ throw new Error(`RuStore: upload error: ${uploadData.message ?? uploadData.code}`);
131
+ }
132
+ this.drafts.set(packageName, { versionId, releaseNotes: [] });
133
+ void fileSize; // fileSize available if needed for logging
134
+ return { versionId: String(versionId) };
135
+ }
136
+ async setReleaseNotes(packageName, language, text) {
137
+ const draft = this.drafts.get(packageName);
138
+ if (!draft) {
139
+ throw new Error(`RuStore: no active upload for "${packageName}". Call rustore_upload first.`);
140
+ }
141
+ const idx = draft.releaseNotes.findIndex(n => n.language === language);
142
+ if (idx >= 0) {
143
+ draft.releaseNotes[idx].text = text;
144
+ }
145
+ else {
146
+ draft.releaseNotes.push({ language, text });
147
+ }
148
+ }
149
+ async submit(packageName, _options) {
150
+ const draft = this.drafts.get(packageName);
151
+ if (!draft) {
152
+ throw new Error(`RuStore: no active upload for "${packageName}". Call rustore_upload first.`);
153
+ }
154
+ const token = await this.getToken();
155
+ const { versionId, releaseNotes } = draft;
156
+ // If there are release notes — patch them first
157
+ if (releaseNotes.length > 0) {
158
+ const whatsNew = {};
159
+ for (const note of releaseNotes) {
160
+ whatsNew[note.language] = note.text;
161
+ }
162
+ const patchData = await this.api("PATCH", `${BASE}/application/${encodeURIComponent(packageName)}/version/${versionId}/publishing-settings`, token, { whatsNew });
163
+ if (patchData.code !== "OK") {
164
+ throw new Error(`RuStore: failed to set release notes: ${patchData.message ?? patchData.code}`);
165
+ }
166
+ }
167
+ // Submit for moderation
168
+ const submitData = await this.api("POST", `${BASE}/application/${encodeURIComponent(packageName)}/version/${versionId}/submit-for-moderation`, token);
169
+ if (submitData.code !== "OK") {
170
+ throw new Error(`RuStore: submit failed: ${submitData.message ?? submitData.code}`);
171
+ }
172
+ this.drafts.delete(packageName);
173
+ }
174
+ async getReleases(packageName) {
175
+ const token = await this.getToken();
176
+ const data = await this.api("GET", `${BASE}/application/${encodeURIComponent(packageName)}/version`, token);
177
+ if (data.code !== "OK") {
178
+ throw new Error(`RuStore: getReleases failed: ${data.message ?? data.code}`);
179
+ }
180
+ if (!data.body || data.body.length === 0) {
181
+ return `${packageName}: no versions found`;
182
+ }
183
+ const lines = data.body.map(v => {
184
+ const version = v.versionName ? `${v.versionName} (${v.versionCode ?? "?"})` : `versionId=${v.versionId}`;
185
+ const status = v.appStatus ?? "unknown";
186
+ return ` v${version} — ${status}`;
187
+ });
188
+ return `${packageName}:\n${lines.join("\n")}`;
189
+ }
190
+ async discard(packageName) {
191
+ const draft = this.drafts.get(packageName);
192
+ if (!draft) {
193
+ throw new Error(`RuStore: no active draft for "${packageName}"`);
194
+ }
195
+ const token = await this.getToken();
196
+ await this.deleteDraft(packageName, draft.versionId, token);
197
+ this.drafts.delete(packageName);
198
+ }
199
+ // ── Private helpers ──────────────────────────────────────────────────────────
200
+ async deleteDraft(packageName, versionId, token) {
201
+ const res = await fetch(`${BASE}/application/${encodeURIComponent(packageName)}/version/${versionId}`, {
202
+ method: "DELETE",
203
+ headers: { "Public-Token": token },
204
+ });
205
+ // Best-effort cleanup — do not throw
206
+ if (!res.ok) {
207
+ console.error(`RuStore: failed to delete draft version ${versionId} (${res.status})`);
208
+ }
209
+ }
210
+ }
211
+ // ── Helpers ──────────────────────────────────────────────────────────────────
212
+ async function streamToBuffer(stream) {
213
+ const reader = stream.getReader();
214
+ const chunks = [];
215
+ while (true) {
216
+ const { done, value } = await reader.read();
217
+ if (done)
218
+ break;
219
+ chunks.push(value);
220
+ }
221
+ return Buffer.concat(chunks);
222
+ }
223
+ //# sourceMappingURL=rustore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rustore.js","sourceRoot":"","sources":["../../src/store/rustore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface UploadResult {
2
+ versionId: string;
3
+ }
4
+ export interface StoreClient {
5
+ upload(packageName: string, filePath: string): Promise<UploadResult>;
6
+ setReleaseNotes(packageName: string, language: string, text: string): Promise<void>;
7
+ submit(packageName: string, options?: {
8
+ rollout?: number;
9
+ }): Promise<void>;
10
+ getReleases(packageName: string): Promise<string>;
11
+ discard?(packageName: string): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=store-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-client.d.ts","sourceRoot":"","sources":["../../src/store/store-client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-client.js","sourceRoot":"","sources":["../../src/store/store-client.ts"],"names":[],"mappings":""}