wechat-mp-controller 0.0.4 → 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/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { UploadVersionInfo } from './type';
2
1
  export type WeChatMpControllerOptions = {
3
2
  headless?: boolean;
4
3
  };
@@ -16,9 +15,32 @@ export declare class Controller {
16
15
  onQrCode?: (qrcode: string) => void;
17
16
  onScanSuccess?: (qrcode: string) => void;
18
17
  }): Promise<void>;
19
- getOnlineVersion(): Promise<{
20
- version: string;
21
- message: string;
18
+ getVersionInfos(): Promise<{
19
+ online: {
20
+ version: string;
21
+ message: string;
22
+ time: number;
23
+ uploader: {
24
+ name: string;
25
+ openId: string;
26
+ };
27
+ };
28
+ dev: {
29
+ version: string;
30
+ message: string;
31
+ time: number;
32
+ uploader: {
33
+ name: string;
34
+ openId: string;
35
+ };
36
+ isExperience: boolean;
37
+ }[];
22
38
  }>;
23
- getDevVersionInfos(): Promise<UploadVersionInfo[]>;
39
+ submitAudit(options: {
40
+ message: string;
41
+ uploaderOfTargetVersion: {
42
+ name: string;
43
+ openid: string;
44
+ };
45
+ }): Promise<void>;
24
46
  }
package/dist/index.js CHANGED
@@ -64,44 +64,70 @@ export class Controller {
64
64
  await this.page.waitForSelector('#menuBar .menu');
65
65
  return;
66
66
  }
67
- async getOnlineVersion() {
67
+ async getVersionInfos() {
68
68
  if (!this.page) {
69
69
  throw new Error('请先进行初始化');
70
70
  }
71
71
  const versionManageLink = await this.page.$eval('#menuBar a[title="版本管理"]', node => node.href);
72
72
  await this.page.goto(versionManageLink);
73
- await this.page.waitForSelector('.main_bd .code_version_online .code_version_log_hd .simple_preview_value');
74
- const version = await this.page.$eval('.main_bd .code_version_online .code_version_log_hd .simple_preview_value', node => node.innerHTML);
75
- const message = await this.page.$eval('.main_bd .code_version_online .code_version_log_bd .simple_preview_item:nth-child(3) .simple_preview_value', node => node.innerHTML);
73
+ const response = await this.page.waitForResponse(res => {
74
+ return res.url().includes('https://mp.weixin.qq.com/wxamp/cgi/route') && res.url().includes(encodeURIComponent('/wxopen/wacodepage'));
75
+ });
76
+ const responseDataString = (await response.buffer()).toString();
77
+ const body = JSON.parse(responseDataString);
78
+ const {
79
+ code_data
80
+ } = body;
81
+ const codeData = JSON.parse(code_data);
82
+ const onlineData = codeData.online_info.basic_info;
83
+ const devList = codeData.develop_info.info_list;
76
84
  return {
77
- version,
78
- message
85
+ online: {
86
+ version: onlineData.version,
87
+ message: onlineData.describe,
88
+ time: onlineData.time,
89
+ uploader: {
90
+ name: onlineData.nick_name,
91
+ openId: onlineData.open_id
92
+ }
93
+ },
94
+ dev: devList.map(item => {
95
+ const basicInfo = item.basic_info;
96
+ return {
97
+ version: basicInfo.version,
98
+ message: basicInfo.describe,
99
+ time: basicInfo.time,
100
+ uploader: {
101
+ name: basicInfo.nick_name,
102
+ openId: basicInfo.open_id
103
+ },
104
+ isExperience: !!item.is_exper
105
+ };
106
+ })
79
107
  };
80
108
  }
81
- async getDevVersionInfos() {
109
+ async submitAudit(options) {
82
110
  if (!this.page) {
83
111
  throw new Error('请先进行初始化');
84
112
  }
85
- const versionManageLink = await this.page.$eval('#menuBar a[title="版本管理"]', node => node.href);
86
- await this.page.goto(versionManageLink);
87
- await this.page.waitForSelector('.main_bd .code_version_dev .mod_default_bd:nth-child(2) .code_version_logs .code_version_log');
88
- const originVersionInfos = await this.page.$$eval('.main_bd .code_version_dev .mod_default_bd:nth-child(2) .code_version_logs .code_version_log .simple_preview_value', nodes => nodes.map(node => node.firstChild?.textContent?.trim() || ''));
89
- if (!originVersionInfos.length) {
90
- throw new Error('请先上传版本');
113
+ const url = new URL(this.page.url());
114
+ const urlToken = url.searchParams.get('token');
115
+ if (!urlToken) {
116
+ throw new Error('获取token失败');
91
117
  }
92
- const versionInfos = [];
93
- for (let A = 0; A < originVersionInfos.length; A = A + 4) {
94
- const version = originVersionInfos[A];
95
- const uploader = originVersionInfos[A + 1];
96
- const time = originVersionInfos[A + 2];
97
- const message = originVersionInfos[A + 3];
98
- versionInfos.push({
99
- uploader,
100
- time,
101
- version,
102
- message
103
- });
104
- }
105
- return versionInfos;
118
+ const searchParams = new URLSearchParams({
119
+ action: 'get_class',
120
+ token: urlToken,
121
+ lang: 'zh-CN',
122
+ openid: options.uploaderOfTargetVersion.openid,
123
+ user_name: encodeURIComponent(options.uploaderOfTargetVersion.name)
124
+ });
125
+ await this.page.goto(`https://mp.weixin.qq.com/wxamp/wadevelopcode/get_class?${searchParams.toString()}`);
126
+ await this.page.waitForSelector('.weui-desktop-form__control-group textarea');
127
+ await this.page.locator('.weui-desktop-form__control-group textarea').fill(options.message);
128
+ await this.page.locator('.btn.btn_primary[data-msgid="提交审核"]').click();
129
+ // 也可以等待 https://mp.weixin.qq.com/wxamp/cgi/route?path=%2Fwxopen%2Fwadevelopcode%3Faction%3Dsubmit_check&token=283379953&lang=zh_CN&random=0.8360122102877674
130
+ await this.page.waitForSelector('div[data-component="sumbitPage"] .main_bd *[data-msgid="已提交审核"]');
131
+ return;
106
132
  }
107
133
  }
package/dist/type.d.ts CHANGED
@@ -1,6 +1,44 @@
1
- export type UploadVersionInfo = {
2
- uploader: string;
1
+ export type VersionInfo = {
2
+ uploader: {
3
+ name: string;
4
+ openId: string;
5
+ };
3
6
  version: string;
4
- time: string;
7
+ time: number;
5
8
  message: string;
9
+ isExperience: boolean;
10
+ };
11
+ export type OriginVersionInfo = {
12
+ online_info: {
13
+ basic_info: {
14
+ open_id: string;
15
+ version: string;
16
+ nick_name: string;
17
+ time: number;
18
+ describe: string;
19
+ warning_api_list: string[];
20
+ avatar: string;
21
+ inner_version: number;
22
+ };
23
+ };
24
+ develop_info: {
25
+ info_list: Array<{
26
+ basic_info: {
27
+ open_id: string;
28
+ version: string;
29
+ nick_name: string;
30
+ time: number;
31
+ describe: string;
32
+ status: number;
33
+ is_plugin_auto_update: number;
34
+ warning_api_list: string[];
35
+ avatar: string;
36
+ };
37
+ is_exper?: boolean;
38
+ }>;
39
+ developer_size: number;
40
+ preview_info_list: any[];
41
+ };
42
+ need_finance_audit: number;
43
+ qr_path: string;
6
44
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wechat-mp-controller",
3
- "version": "0.0.4",
3
+ "version": "0.1.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -19,7 +19,8 @@
19
19
  "prepare": "husky",
20
20
  "exec:ts-node": "node --disable-warning=ExperimentalWarning --es-module-specifier-resolution=node --loader ts-node/esm",
21
21
  "release": "pnpm exec:ts-node \"./scripts/release.ts\"",
22
- "prepublishOnly": "pnpm build && pnpm exec:ts-node \"./scripts/publish.ts\""
22
+ "prepublishOnly": "pnpm build && pnpm exec:ts-node \"./scripts/publish.ts\"",
23
+ "test": "tsx ./test/index.ts"
23
24
  },
24
25
  "files": [
25
26
  "dist",
@@ -29,7 +30,6 @@
29
30
  "author": "ArcherCube",
30
31
  "dependencies": {
31
32
  "jimp": "^1.6.0",
32
- "ora": "^9.0.0",
33
33
  "puppeteer-core": "^24.22.0",
34
34
  "qrcode-reader": "^1.0.4",
35
35
  "qrcode-terminal": "^0.12.0"
@@ -60,8 +60,10 @@
60
60
  "husky": "^9.1.6",
61
61
  "inquirer": "^12.9.6",
62
62
  "lint-staged": "^15.2.10",
63
+ "ora": "^9.0.0",
63
64
  "prettier": "^3.3.3",
64
65
  "ts-node": "^10.9.2",
66
+ "tsx": "^4.20.6",
65
67
  "typescript": "^5.7.2",
66
68
  "watch": "^1.0.2"
67
69
  },