long-git-cli 1.0.18 → 1.0.20

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.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 一键开户命令
3
+ */
4
+ import { Command } from "commander";
5
+ export declare function registerOpenAccountCommand(program: Command): void;
6
+ //# sourceMappingURL=open-account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-account.d.ts","sourceRoot":"","sources":["../../src/commands/open-account.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+IjE"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * 一键开户命令
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.registerOpenAccountCommand = registerOpenAccountCommand;
10
+ const open_account_1 = require("../utils/open-account");
11
+ const oa_config_manager_1 = require("../utils/oa-config-manager");
12
+ const inquirer_1 = __importDefault(require("inquirer"));
13
+ function registerOpenAccountCommand(program) {
14
+ program
15
+ .command("oa <email>")
16
+ .description("一键开户")
17
+ .option("-t, --test", "测试环境")
18
+ .option("-u, --uat", "UAT 环境")
19
+ .action(async (email, options) => {
20
+ try {
21
+ // 确定环境
22
+ let environment = "test";
23
+ if (options.uat) {
24
+ environment = "uat";
25
+ }
26
+ console.log(`开始开户流程...`);
27
+ console.log(`邮箱: ${email}`);
28
+ console.log(`环境: ${environment === "test" ? "测试环境" : "UAT 环境"}`);
29
+ // 检查是否已配置账户
30
+ let account = (0, oa_config_manager_1.getAccount)(environment);
31
+ if (!account) {
32
+ console.log(`\n${environment === "test" ? "测试环境" : "UAT 环境"}尚未配置账户`);
33
+ console.log("请输入账户信息(将保存到本地,下次自动使用):\n");
34
+ // 交互式输入账户密码
35
+ const answers = await inquirer_1.default.prompt([
36
+ {
37
+ type: "input",
38
+ name: "username",
39
+ message: "请输入用户名:",
40
+ validate: (input) => {
41
+ if (!input.trim()) {
42
+ return "用户名不能为空";
43
+ }
44
+ return true;
45
+ },
46
+ },
47
+ {
48
+ type: "password",
49
+ name: "password",
50
+ message: "请输入密码:",
51
+ mask: "*",
52
+ validate: (input) => {
53
+ if (!input.trim()) {
54
+ return "密码不能为空";
55
+ }
56
+ return true;
57
+ },
58
+ },
59
+ ]);
60
+ // 保存账户配置
61
+ (0, oa_config_manager_1.saveAccount)(environment, answers.username, answers.password);
62
+ console.log("账户配置已保存\n");
63
+ // 重新获取账户
64
+ account = (0, oa_config_manager_1.getAccount)(environment);
65
+ }
66
+ await (0, open_account_1.openAccount)(email, environment);
67
+ console.log("开户完成");
68
+ }
69
+ catch (error) {
70
+ console.error("开户失败:", error.message);
71
+ process.exit(1);
72
+ }
73
+ });
74
+ // 配置账户命令(可选,用于修改已保存的账户)
75
+ program
76
+ .command("oa-config")
77
+ .description("配置或修改开户系统账户")
78
+ .option("-t, --test", "配置测试环境账户")
79
+ .option("-u, --uat", "配置 UAT 环境账户")
80
+ .action(async (options) => {
81
+ try {
82
+ // 确定环境
83
+ let environment = "test";
84
+ if (options.uat) {
85
+ environment = "uat";
86
+ }
87
+ console.log(`配置 ${environment === "test" ? "测试环境" : "UAT 环境"} 账户`);
88
+ // 交互式输入账户密码
89
+ const answers = await inquirer_1.default.prompt([
90
+ {
91
+ type: "input",
92
+ name: "username",
93
+ message: "请输入用户名:",
94
+ validate: (input) => {
95
+ if (!input.trim()) {
96
+ return "用户名不能为空";
97
+ }
98
+ return true;
99
+ },
100
+ },
101
+ {
102
+ type: "password",
103
+ name: "password",
104
+ message: "请输入密码:",
105
+ mask: "*",
106
+ validate: (input) => {
107
+ if (!input.trim()) {
108
+ return "密码不能为空";
109
+ }
110
+ return true;
111
+ },
112
+ },
113
+ ]);
114
+ // 保存账户配置
115
+ (0, oa_config_manager_1.saveAccount)(environment, answers.username, answers.password);
116
+ console.log("账户配置成功!");
117
+ }
118
+ catch (error) {
119
+ console.error("配置失败:", error.message);
120
+ process.exit(1);
121
+ }
122
+ });
123
+ // 清除账户配置命令
124
+ program
125
+ .command("oa-clear")
126
+ .description("清除账户配置")
127
+ .option("-t, --test", "清除测试环境账户")
128
+ .option("-u, --uat", "清除 UAT 环境账户")
129
+ .option("-a, --all", "清除所有环境账户")
130
+ .action((options) => {
131
+ try {
132
+ if (options.all) {
133
+ (0, oa_config_manager_1.clearAccount)();
134
+ }
135
+ else if (options.test) {
136
+ (0, oa_config_manager_1.clearAccount)("test");
137
+ }
138
+ else if (options.uat) {
139
+ (0, oa_config_manager_1.clearAccount)("uat");
140
+ }
141
+ else {
142
+ console.log("请指定要清除的环境: -t (测试) / -u (UAT) / -a (全部)");
143
+ }
144
+ }
145
+ catch (error) {
146
+ console.error("清除失败:", error.message);
147
+ process.exit(1);
148
+ }
149
+ });
150
+ }
151
+ //# sourceMappingURL=open-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-account.js","sourceRoot":"","sources":["../../src/commands/open-account.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ const tag_1 = require("./commands/tag");
9
9
  const commit_1 = require("./commands/commit");
10
10
  const deploy_1 = require("./commands/deploy");
11
11
  const config_1 = require("./commands/config");
12
+ const open_account_1 = require("./commands/open-account");
12
13
  const chalk_1 = __importDefault(require("chalk"));
13
14
  const package_json_1 = __importDefault(require("../package.json"));
14
15
  const program = new commander_1.Command();
@@ -66,5 +67,7 @@ program
66
67
  process.exit(1);
67
68
  }
68
69
  });
70
+ // 注册 oa 命令
71
+ (0, open_account_1.registerOpenAccountCommand)(program);
69
72
  program.parse();
70
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,wCAA4C;AAC5C,8CAAkD;AAClD,8CAAkD;AAClD,8CAAkD;AAClD,kDAA0B;AAC1B,mEAAkC;AAElC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6BAA6B,CAAC;KAC1C,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,gBAAU,EAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,oBAAoB,EAAE,YAAY,EAAE,QAAQ,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,GAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,wCAA4C;AAC5C,8CAAkD;AAClD,8CAAkD;AAClD,8CAAkD;AAClD,0DAAqE;AACrE,kDAA0B;AAC1B,mEAAkC;AAElC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6BAA6B,CAAC;KAC1C,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY;AACZ,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;KAC1C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,gBAAU,EAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,oBAAoB,EAAE,YAAY,EAAE,QAAQ,CAAC;KACpD,MAAM,CAAC,YAAY,EAAE,2BAA2B,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gBAAgB,CAAC;KAC7B,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAA,sBAAa,GAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,WAAW;AACX,IAAA,yCAA0B,EAAC,OAAO,CAAC,CAAC;AAEpC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 开户系统账户配置管理
3
+ */
4
+ export interface OAAccount {
5
+ username: string;
6
+ password: string;
7
+ }
8
+ export interface OAAccountsConfig {
9
+ test: OAAccount | null;
10
+ uat: OAAccount | null;
11
+ }
12
+ /**
13
+ * 加载账户配置
14
+ */
15
+ export declare function loadAccounts(): OAAccountsConfig;
16
+ /**
17
+ * 保存账户配置
18
+ */
19
+ export declare function saveAccount(environment: "test" | "uat", username: string, password: string): void;
20
+ /**
21
+ * 获取账户
22
+ */
23
+ export declare function getAccount(environment: "test" | "uat"): OAAccount | null;
24
+ /**
25
+ * 清除账户配置
26
+ */
27
+ export declare function clearAccount(environment?: "test" | "uat"): void;
28
+ //# sourceMappingURL=oa-config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oa-config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/oa-config-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,CAY/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,GAAG,KAAK,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,CAGxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAiB/D"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * 开户系统账户配置管理
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.loadAccounts = loadAccounts;
40
+ exports.saveAccount = saveAccount;
41
+ exports.getAccount = getAccount;
42
+ exports.clearAccount = clearAccount;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const CONFIG_DIR = path.join(os.homedir(), ".long-cli");
47
+ const CONFIG_FILE = path.join(CONFIG_DIR, "oa-accounts.json");
48
+ /**
49
+ * 加载账户配置
50
+ */
51
+ function loadAccounts() {
52
+ if (!fs.existsSync(CONFIG_FILE)) {
53
+ return { test: null, uat: null };
54
+ }
55
+ try {
56
+ const content = fs.readFileSync(CONFIG_FILE, "utf-8");
57
+ return JSON.parse(content);
58
+ }
59
+ catch (error) {
60
+ console.error("读取账户配置失败:", error);
61
+ return { test: null, uat: null };
62
+ }
63
+ }
64
+ /**
65
+ * 保存账户配置
66
+ */
67
+ function saveAccount(environment, username, password) {
68
+ // 确保目录存在
69
+ if (!fs.existsSync(CONFIG_DIR)) {
70
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
71
+ }
72
+ // 读取现有配置
73
+ const config = loadAccounts();
74
+ // 更新对应环境的账户
75
+ config[environment] = { username, password };
76
+ // 保存到文件
77
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
78
+ console.log(`${environment} 环境账户已保存`);
79
+ }
80
+ /**
81
+ * 获取账户
82
+ */
83
+ function getAccount(environment) {
84
+ const config = loadAccounts();
85
+ return config[environment];
86
+ }
87
+ /**
88
+ * 清除账户配置
89
+ */
90
+ function clearAccount(environment) {
91
+ if (!fs.existsSync(CONFIG_FILE)) {
92
+ console.log("没有保存的账户配置");
93
+ return;
94
+ }
95
+ if (environment) {
96
+ // 清除指定环境的账户
97
+ const config = loadAccounts();
98
+ config[environment] = null;
99
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), "utf-8");
100
+ console.log(`已清除 ${environment} 环境的账户配置`);
101
+ }
102
+ else {
103
+ // 清除所有账户
104
+ fs.unlinkSync(CONFIG_FILE);
105
+ console.log("已清除所有账户配置");
106
+ }
107
+ }
108
+ //# sourceMappingURL=oa-config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oa-config-manager.js","sourceRoot":"","sources":["../../src/utils/oa-config-manager.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,oCAYC;AAKD,kCAmBC;AAKD,gCAGC;AAKD,oCAiBC;AAtFD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAY9D;;GAEG;AACH,SAAgB,YAAY;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,WAA2B,EAC3B,QAAgB,EAChB,QAAgB;IAEhB,SAAS;IACT,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;IACT,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,YAAY;IACZ,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAE7C,QAAQ;IACR,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,UAAU,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,WAA2B;IACpD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,WAA4B;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY;QACZ,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QAC3B,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,OAAO,WAAW,UAAU,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,SAAS;QACT,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 一键开户自动化
3
+ */
4
+ /**
5
+ * 一键开户
6
+ */
7
+ export declare function openAccount(email: string, environment: "test" | "uat"): Promise<void>;
8
+ //# sourceMappingURL=open-account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-account.d.ts","sourceRoot":"","sources":["../../src/utils/open-account.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,KAAK,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Ef"}
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ /**
3
+ * 一键开户自动化
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.openAccount = openAccount;
43
+ const puppeteer_1 = __importDefault(require("puppeteer"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const slider_captcha_1 = require("./slider-captcha");
47
+ const oa_config_manager_1 = require("./oa-config-manager");
48
+ const ENVIRONMENTS = {
49
+ test: "https://share-msg04-frontend.app-alpha.com/#/admin/user/openAccount",
50
+ uat: "https://share-srv-msg.app.bit-beta.com/#/admin/user/openAccount",
51
+ };
52
+ /**
53
+ * 为不同环境使用不同的 Profile 目录
54
+ */
55
+ function getProfileDir(environment) {
56
+ return path.join(os.homedir(), ".long-cli", `oa-chrome-profile-${environment}`);
57
+ }
58
+ /**
59
+ * 一键开户
60
+ */
61
+ async function openAccount(email, environment) {
62
+ const url = ENVIRONMENTS[environment];
63
+ const profileDir = getProfileDir(environment);
64
+ let browser = null;
65
+ // 获取配置的账户
66
+ const account = (0, oa_config_manager_1.getAccount)(environment);
67
+ if (!account) {
68
+ throw new Error(`${environment} 环境尚未配置账户,请先运行: long oa config -${environment === "test" ? "t" : "u"}`);
69
+ }
70
+ try {
71
+ console.log("启动浏览器...");
72
+ console.log(`使用 Profile 目录: ${profileDir}`);
73
+ browser = await puppeteer_1.default.launch({
74
+ headless: false,
75
+ userDataDir: profileDir,
76
+ args: [
77
+ "--no-sandbox",
78
+ "--disable-setuid-sandbox",
79
+ "--disable-blink-features=AutomationControlled",
80
+ ],
81
+ });
82
+ // 使用浏览器的第一个页面,而不是创建新页面
83
+ const pages = await browser.pages();
84
+ const page = pages.length > 0 ? pages[0] : await browser.newPage();
85
+ await page.setViewport({ width: 1280, height: 800 });
86
+ console.log(`打开页面: ${url}`);
87
+ await page.goto(url, { waitUntil: "networkidle2", timeout: 30000 });
88
+ // 等待页面加载
89
+ await new Promise((resolve) => setTimeout(resolve, 2000));
90
+ // 检测并处理 token 过期弹框
91
+ await handleTokenExpiredModal(page);
92
+ // 检测是否在登录页
93
+ const currentUrl = page.url();
94
+ console.log(`当前 URL: ${currentUrl}`);
95
+ if (currentUrl.includes("/#/login") || currentUrl.includes("#/login")) {
96
+ console.log("检测到登录页,需要登录");
97
+ console.log("提示:首次登录需要手动完成人机校验");
98
+ console.log("提示:登录成功后,下次将自动复用登录状态");
99
+ await handleLogin(page, environment);
100
+ // 登录后重新导航到开户页面
101
+ console.log("登录成功,跳转到开户页面...");
102
+ await page.goto(url, { waitUntil: "networkidle2", timeout: 30000 });
103
+ await new Promise((resolve) => setTimeout(resolve, 2000));
104
+ // 再次检测 token 过期弹框(以防万一)
105
+ await handleTokenExpiredModal(page);
106
+ }
107
+ else {
108
+ console.log("已登录,直接进入开户页面");
109
+ }
110
+ // 执行开户流程
111
+ console.log("开始开户流程...");
112
+ await performOpenAccount(page, email);
113
+ console.log("开户成功,3 秒后关闭浏览器...");
114
+ await new Promise((resolve) => setTimeout(resolve, 3000));
115
+ }
116
+ catch (error) {
117
+ console.error("开户过程出错:", error.message);
118
+ throw error;
119
+ }
120
+ finally {
121
+ if (browser) {
122
+ await browser.close();
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * 处理 token 过期弹框
128
+ */
129
+ async function handleTokenExpiredModal(page) {
130
+ try {
131
+ // 等待可能出现的弹框
132
+ await new Promise((resolve) => setTimeout(resolve, 1000));
133
+ // 检测弹框
134
+ const modal = await page.$(".el-message-box");
135
+ if (modal) {
136
+ // 检查是否包含 "令牌状态已过期" 文字
137
+ const messageElement = await modal.$(".el-message-box__message");
138
+ if (messageElement) {
139
+ const text = await page.evaluate((el) => el.textContent, messageElement);
140
+ if (text && text.includes("令牌状态已过期")) {
141
+ console.log("检测到 token 过期弹框,点击确定...");
142
+ // 点击确定按钮
143
+ const confirmButton = await modal.$(".el-message-box__btns .el-button");
144
+ if (confirmButton) {
145
+ await confirmButton.click();
146
+ await new Promise((resolve) => setTimeout(resolve, 2000));
147
+ }
148
+ }
149
+ }
150
+ }
151
+ }
152
+ catch (error) {
153
+ // 没有弹框或处理失败,继续执行
154
+ }
155
+ }
156
+ /**
157
+ * 处理登录
158
+ */
159
+ async function handleLogin(page, environment) {
160
+ try {
161
+ // 获取配置的账户
162
+ const account = (0, oa_config_manager_1.getAccount)(environment);
163
+ if (!account) {
164
+ throw new Error("未找到账户配置");
165
+ }
166
+ // 等待登录按钮出现
167
+ await page.waitForSelector(".login-content-submit", { timeout: 10000 });
168
+ // 等待页面完全加载
169
+ await new Promise((resolve) => setTimeout(resolve, 1000));
170
+ // 检查是否已经有账号密码填充
171
+ const usernameInput = await page.$('input[type="text"]');
172
+ const passwordInput = await page.$('input[type="password"]');
173
+ if (usernameInput && passwordInput) {
174
+ const username = await page.evaluate((el) => el.value, usernameInput);
175
+ const password = await page.evaluate((el) => el.value, passwordInput);
176
+ if (username && password) {
177
+ console.log("检测到已保存的账号密码,自动登录...");
178
+ }
179
+ else {
180
+ // 自动填充配置的账号密码
181
+ console.log("自动填充账号密码...");
182
+ await page.type('input[type="text"]', account.username, { delay: 100 });
183
+ await page.type('input[type="password"]', account.password, { delay: 100 });
184
+ await new Promise((resolve) => setTimeout(resolve, 500));
185
+ }
186
+ // 点击登录按钮
187
+ console.log("点击登录按钮...");
188
+ await page.click(".login-content-submit");
189
+ // 等待可能出现的滑块验证
190
+ await new Promise((resolve) => setTimeout(resolve, 2000));
191
+ // 尝试自动完成滑块验证(最多重试3次)
192
+ const hasSlider = await page.$(".verify-move-block");
193
+ if (hasSlider) {
194
+ console.log("检测到滑块验证,尝试自动完成...");
195
+ let success = false;
196
+ for (let attempt = 1; attempt <= 3; attempt++) {
197
+ console.log(`第 ${attempt} 次尝试...`);
198
+ success = await (0, slider_captcha_1.solveSliderCaptcha)(page);
199
+ if (success) {
200
+ console.log("滑块验证成功!");
201
+ break;
202
+ }
203
+ else {
204
+ console.log(`第 ${attempt} 次尝试失败`);
205
+ if (attempt < 3) {
206
+ // 等待验证码自动刷新或手动刷新
207
+ console.log("等待验证码刷新...");
208
+ await new Promise((resolve) => setTimeout(resolve, 2000));
209
+ // 检查是否还有滑块(可能已经刷新了)
210
+ const sliderExists = await page.$(".verify-move-block");
211
+ if (!sliderExists) {
212
+ console.log("验证码已刷新,继续尝试...");
213
+ }
214
+ }
215
+ }
216
+ }
217
+ if (!success) {
218
+ console.log("自动验证失败,请手动完成滑块验证...");
219
+ // 等待用户手动完成
220
+ await page.waitForFunction('!window.location.href.includes("/login")', { timeout: 60000 });
221
+ }
222
+ }
223
+ // 等待登录完成
224
+ await page.waitForFunction('!window.location.href.includes("/login")', { timeout: 10000 });
225
+ console.log("登录成功");
226
+ await new Promise((resolve) => setTimeout(resolve, 2000));
227
+ return;
228
+ }
229
+ // 没有找到输入框
230
+ throw new Error("未找到登录输入框");
231
+ }
232
+ catch (error) {
233
+ throw new Error(`登录失败: ${error.message}`);
234
+ }
235
+ }
236
+ /**
237
+ * 执行开户流程
238
+ */
239
+ async function performOpenAccount(page, email) {
240
+ try {
241
+ // 等待邮箱输入框出现
242
+ console.log("等待页面加载...");
243
+ await page.waitForSelector('input.el-input__inner[placeholder*="请输入用户邮箱"]', {
244
+ timeout: 10000,
245
+ });
246
+ // 输入邮箱
247
+ console.log(`输入邮箱: ${email}`);
248
+ await page.type('input.el-input__inner[placeholder*="请输入用户邮箱"]', email);
249
+ await new Promise((resolve) => setTimeout(resolve, 500));
250
+ // 点击开户按钮
251
+ console.log("点击开户按钮...");
252
+ // 查找包含"开户"文字的按钮
253
+ const buttons = await page.$$("button.el-button--primary");
254
+ let clicked = false;
255
+ for (const button of buttons) {
256
+ const text = await page.evaluate((el) => el.textContent, button);
257
+ if (text && text.includes("开户")) {
258
+ await button.click();
259
+ clicked = true;
260
+ break;
261
+ }
262
+ }
263
+ if (!clicked) {
264
+ throw new Error("未找到开户按钮");
265
+ }
266
+ // 等待开户结果
267
+ console.log("等待开户结果...");
268
+ await new Promise((resolve) => setTimeout(resolve, 2000));
269
+ // 等待成功日志出现
270
+ await page.waitForSelector(".log-container", { timeout: 30000 });
271
+ // 检查是否有成功标志
272
+ const logContainer = await page.$(".log-container");
273
+ if (logContainer) {
274
+ const logText = await page.evaluate((el) => el.textContent, logContainer);
275
+ if (logText && logText.includes("请前往账户收集表更新信息")) {
276
+ console.log("开户成功!");
277
+ return;
278
+ }
279
+ }
280
+ // 如果没有找到成功标志,等待更长时间再检查
281
+ await new Promise((resolve) => setTimeout(resolve, 3000));
282
+ const logContainer2 = await page.$(".log-container");
283
+ if (logContainer2) {
284
+ const logText = await page.evaluate((el) => el.textContent, logContainer2);
285
+ if (logText && logText.includes("请前往账户收集表更新信息")) {
286
+ console.log("开户成功!");
287
+ return;
288
+ }
289
+ // 打印日志内容以便调试
290
+ console.log("日志内容:", logText);
291
+ }
292
+ throw new Error("未检测到开户成功标志");
293
+ }
294
+ catch (error) {
295
+ throw new Error(`开户流程失败: ${error.message}`);
296
+ }
297
+ }
298
+ //# sourceMappingURL=open-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-account.js","sourceRoot":"","sources":["../../src/utils/open-account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 滑块验证码自动识别(改进的边缘检测算法)
3
+ */
4
+ import { Page } from "puppeteer";
5
+ /**
6
+ * 自动完成滑块验证
7
+ */
8
+ export declare function solveSliderCaptcha(page: Page): Promise<boolean>;
9
+ //# sourceMappingURL=slider-captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-captcha.d.ts","sourceRoot":"","sources":["../../src/utils/slider-captcha.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiHjC;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAkIrE"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /**
3
+ * 滑块验证码自动识别(改进的边缘检测算法)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.solveSliderCaptcha = solveSliderCaptcha;
7
+ const canvas_1 = require("canvas");
8
+ /**
9
+ * 使用改进的边缘检测识别滑块缺口位置
10
+ */
11
+ async function detectGapPosition(bgImageUrl) {
12
+ try {
13
+ console.log(" 加载背景图...");
14
+ const bgImage = await (0, canvas_1.loadImage)(bgImageUrl);
15
+ console.log(` 背景图尺寸: ${bgImage.width}x${bgImage.height}`);
16
+ const canvas = (0, canvas_1.createCanvas)(bgImage.width, bgImage.height);
17
+ const ctx = canvas.getContext("2d");
18
+ // 绘制背景图
19
+ ctx.drawImage(bgImage, 0, 0);
20
+ const imageData = ctx.getImageData(0, 0, bgImage.width, bgImage.height);
21
+ const data = imageData.data;
22
+ console.log(" 分析图像,寻找缺口...");
23
+ // 转换为灰度图并计算梯度
24
+ const width = bgImage.width;
25
+ const height = bgImage.height;
26
+ const gradients = [];
27
+ // 计算每一列的垂直边缘强度
28
+ for (let x = 10; x < width - 10; x++) {
29
+ let columnGradient = 0;
30
+ // 在垂直方向上采样
31
+ for (let y = Math.floor(height * 0.2); y < Math.floor(height * 0.8); y++) {
32
+ const idx = (y * width + x) * 4;
33
+ // 获取当前像素和相邻像素的灰度值
34
+ const gray = (data[idx] + data[idx + 1] + data[idx + 2]) / 3;
35
+ // 左侧像素
36
+ const idxLeft = (y * width + (x - 1)) * 4;
37
+ const grayLeft = (data[idxLeft] + data[idxLeft + 1] + data[idxLeft + 2]) / 3;
38
+ // 右侧像素
39
+ const idxRight = (y * width + (x + 1)) * 4;
40
+ const grayRight = (data[idxRight] + data[idxRight + 1] + data[idxRight + 2]) / 3;
41
+ // 计算水平梯度(Sobel 算子)
42
+ const gradient = Math.abs(grayRight - grayLeft);
43
+ if (gradient > 20) {
44
+ columnGradient += gradient;
45
+ }
46
+ }
47
+ gradients.push(columnGradient);
48
+ }
49
+ // 找到梯度最大的位置(缺口的左边缘)
50
+ let maxGradient = 0;
51
+ let gapX = 0;
52
+ for (let i = 0; i < gradients.length; i++) {
53
+ if (gradients[i] > maxGradient) {
54
+ maxGradient = gradients[i];
55
+ gapX = i + 10; // 加上起始偏移
56
+ }
57
+ }
58
+ console.log(` 检测到缺口位置: ${gapX}px (梯度强度: ${maxGradient})`);
59
+ return gapX;
60
+ }
61
+ catch (error) {
62
+ console.error(" 图像识别失败:", error.message);
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * 生成人类滑动轨迹(改进版)
68
+ */
69
+ function generateTrack(distance) {
70
+ const track = [];
71
+ let current = 0;
72
+ const mid = distance * 0.7; // 70% 的位置开始减速
73
+ while (current < distance) {
74
+ let move;
75
+ let delay;
76
+ if (current < mid) {
77
+ // 加速阶段:快速移动
78
+ move = Math.random() * 5 + 5; // 5-10px
79
+ delay = Math.random() * 10 + 10; // 10-20ms
80
+ }
81
+ else {
82
+ // 减速阶段:慢速移动
83
+ move = Math.random() * 2 + 1; // 1-3px
84
+ delay = Math.random() * 20 + 15; // 15-35ms
85
+ }
86
+ current += move;
87
+ // 不要超过目标距离
88
+ if (current > distance) {
89
+ move = move - (current - distance);
90
+ current = distance;
91
+ }
92
+ track.push({ x: move, delay });
93
+ }
94
+ return track;
95
+ }
96
+ /**
97
+ * 自动完成滑块验证
98
+ */
99
+ async function solveSliderCaptcha(page) {
100
+ try {
101
+ console.log("检测滑块验证...");
102
+ // 等待滑块元素出现
103
+ await page.waitForSelector(".verify-move-block", { timeout: 5000 });
104
+ console.log("检测到滑块验证");
105
+ // 获取背景图的图片 URL
106
+ const bgImageUrl = await page.$eval(".verify-img-panel > img", (el) => el.src);
107
+ console.log("分析图片,识别缺口位置...");
108
+ // 识别缺口位置
109
+ const gapX = await detectGapPosition(bgImageUrl);
110
+ console.log(`缺口位置: ${gapX}px`);
111
+ // 获取背景图的实际显示尺寸和位置
112
+ const bgImageElement = await page.$(".verify-img-panel > img");
113
+ const bgImageBox = await bgImageElement?.boundingBox();
114
+ if (!bgImageBox) {
115
+ throw new Error("无法获取背景图位置");
116
+ }
117
+ console.log(`背景图显示尺寸: ${bgImageBox.width}x${bgImageBox.height}`);
118
+ // 获取背景图的原始尺寸
119
+ const bgImageSize = await page.$eval(".verify-img-panel > img", (el) => ({ width: el.naturalWidth, height: el.naturalHeight }));
120
+ console.log(`背景图原始尺寸: ${bgImageSize.width}x${bgImageSize.height}`);
121
+ // 计算缩放比例
122
+ const scale = bgImageBox.width / bgImageSize.width;
123
+ console.log(`缩放比例: ${scale}`);
124
+ // 计算实际需要滑动的距离(考虑缩放)
125
+ const actualGapX = gapX * scale;
126
+ console.log(`实际缺口位置: ${actualGapX}px`);
127
+ // 获取滑块按钮
128
+ const slider = await page.$(".verify-move-block");
129
+ if (!slider) {
130
+ throw new Error("未找到滑块按钮");
131
+ }
132
+ // 获取滑块的位置
133
+ const sliderBox = await slider.boundingBox();
134
+ if (!sliderBox) {
135
+ throw new Error("无法获取滑块位置");
136
+ }
137
+ console.log(`滑块初始位置: x=${sliderBox.x}, y=${sliderBox.y}`);
138
+ // 计算需要滑动的距离
139
+ // 滑块需要移动到缺口位置,距离 = 缺口位置 - 滑块当前位置(相对于背景图)
140
+ const sliderRelativeX = sliderBox.x - bgImageBox.x;
141
+ const distance = actualGapX - sliderRelativeX;
142
+ console.log(`滑块相对位置: ${sliderRelativeX}px`);
143
+ console.log(`需要滑动距离: ${distance}px`);
144
+ // 如果距离太小或为负数,说明识别有问题
145
+ if (distance < 10) {
146
+ console.log("识别的距离异常,使用备用方案");
147
+ // 可以尝试手动完成或重试
148
+ return false;
149
+ }
150
+ // 生成滑动轨迹
151
+ const track = generateTrack(distance);
152
+ console.log(`生成轨迹,共 ${track.length} 步`);
153
+ // 移动到滑块中心
154
+ const startX = sliderBox.x + sliderBox.width / 2;
155
+ const startY = sliderBox.y + sliderBox.height / 2;
156
+ await page.mouse.move(startX, startY);
157
+ console.log(`鼠标移动到滑块中心: (${startX}, ${startY})`);
158
+ // 按下鼠标
159
+ await page.mouse.down();
160
+ console.log("按下鼠标");
161
+ await new Promise((resolve) => setTimeout(resolve, 100));
162
+ // 按照轨迹滑动
163
+ let currentX = startX;
164
+ for (let i = 0; i < track.length; i++) {
165
+ currentX += track[i].x;
166
+ await page.mouse.move(currentX, startY);
167
+ await new Promise((resolve) => setTimeout(resolve, track[i].delay));
168
+ }
169
+ console.log(`滑动到位置: ${currentX}`);
170
+ // 微调:如果还没到位,再移动一点
171
+ const finalTargetX = startX + distance;
172
+ if (Math.abs(currentX - finalTargetX) > 2) {
173
+ const adjustment = finalTargetX - currentX;
174
+ console.log(`微调距离: ${adjustment}px`);
175
+ await page.mouse.move(finalTargetX, startY, { steps: 3 });
176
+ await new Promise((resolve) => setTimeout(resolve, 100));
177
+ }
178
+ // 在目标位置停留一下
179
+ await new Promise((resolve) => setTimeout(resolve, 300));
180
+ // 松开鼠标
181
+ await page.mouse.up();
182
+ console.log("松开鼠标");
183
+ console.log("滑动完成,等待验证结果...");
184
+ // 等待验证结果(增加等待时间)
185
+ await new Promise((resolve) => setTimeout(resolve, 3000));
186
+ // 检查是否验证成功(滑块消失)
187
+ const sliderStillExists = await page.$(".verify-move-block");
188
+ if (!sliderStillExists) {
189
+ console.log("滑块验证成功!");
190
+ return true;
191
+ }
192
+ else {
193
+ console.log("滑块验证失败");
194
+ return false;
195
+ }
196
+ }
197
+ catch (error) {
198
+ console.error("滑块验证出错:", error.message);
199
+ return false;
200
+ }
201
+ }
202
+ //# sourceMappingURL=slider-captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-captcha.js","sourceRoot":"","sources":["../../src/utils/slider-captcha.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "long-git-cli",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "description": "A CLI tool for Git tag management.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -43,6 +43,7 @@
43
43
  "@types/inquirer": "^8.2.3",
44
44
  "axios": "^1.13.2",
45
45
  "bcrypt": "^6.0.0",
46
+ "canvas": "^3.2.0",
46
47
  "chalk": "^4.1.2",
47
48
  "commander": "^11.1.0",
48
49
  "inquirer": "^8.2.4",
@@ -51,6 +52,8 @@
51
52
  "koa-static": "^5.0.0",
52
53
  "open": "^11.0.0",
53
54
  "ora": "^5.4.1",
55
+ "pixelmatch": "^7.1.0",
56
+ "pngjs": "^7.0.0",
54
57
  "puppeteer": "^24.34.0",
55
58
  "simple-git": "^3.22.0"
56
59
  },