@iflyrpa/actions 4.0.0-beta.6 → 5.0.0-beta.1

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.js CHANGED
@@ -5489,7 +5489,7 @@ var __webpack_exports__ = {};
5489
5489
  });
5490
5490
  const package_json_namespaceObject = require("@iflyrpa/share/package.json");
5491
5491
  var package_json_default = /*#__PURE__*/ __webpack_require__.n(package_json_namespaceObject);
5492
- var package_namespaceObject = JSON.parse('{"i8":"4.0.0-beta.5"}');
5492
+ var package_namespaceObject = JSON.parse('{"i8":"4.0.1-beta.0"}');
5493
5493
  const share_namespaceObject = require("@iflyrpa/share");
5494
5494
  const external_node_fs_namespaceObject = require("node:fs");
5495
5495
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
@@ -5590,7 +5590,8 @@ var __webpack_exports__ = {};
5590
5590
  url: error.config?.url,
5591
5591
  isProxyRequest: !!(error.config && (error.config.httpAgent || error.config.httpsAgent)),
5592
5592
  params: error.config?.params,
5593
- data: error.config?.data
5593
+ data: error.config?.data,
5594
+ serverDate: error.response?.headers?.date
5594
5595
  }
5595
5596
  };
5596
5597
  if (foundError) Object.assign(errorResponse, foundError);
@@ -5668,7 +5669,7 @@ var __webpack_exports__ = {};
5668
5669
  try {
5669
5670
  this.proxyInfo = agent ? `${agent.ip}:${agent.port}` : void 0;
5670
5671
  const controller = new AbortController();
5671
- const timeoutId = setTimeout(()=>controller.abort(), reqTimeout);
5672
+ const timeoutId = setTimeout(()=>controller.abort(), reqTimeout + 500);
5672
5673
  const response = await this.apiClient({
5673
5674
  ...config,
5674
5675
  timeout: reqTimeout,
@@ -5692,7 +5693,7 @@ var __webpack_exports__ = {};
5692
5693
  599
5693
5694
  ].includes(handledError.code);
5694
5695
  if (Rtimes < retries && isRetry) {
5695
- this.logger?.info(`进入第${Rtimes + 1}次重试!`);
5696
+ this.logger?.info(`进入第${Rtimes + 1}次重试!错误码: ${handledError.code}`);
5696
5697
  await new Promise((resolve)=>setTimeout(resolve, retryDelay));
5697
5698
  return sessionRt(Rtimes + 1);
5698
5699
  }
@@ -9909,23 +9910,26 @@ var __webpack_exports__ = {};
9909
9910
  };
9910
9911
  }
9911
9912
  case types_ExecutionState.SUCCESS:
9912
- await updateTaskState?.({
9913
- state: share_namespaceObject.TaskState.SUCCESS,
9914
- result: {
9915
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()).replace(/\\"/g, ""),
9916
- token,
9917
- userInfo: userInfo
9918
- }
9919
- });
9920
- return {
9921
- code: 0,
9922
- message: "成功",
9923
- data: {
9924
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()).replace(/\\"/g, ""),
9925
- token,
9926
- userInfo
9927
- }
9928
- };
9913
+ {
9914
+ const cookie = JSON.stringify(await task.steelBrowserContext?.cookies());
9915
+ await updateTaskState?.({
9916
+ state: share_namespaceObject.TaskState.SUCCESS,
9917
+ result: {
9918
+ cookie,
9919
+ token,
9920
+ userInfo: userInfo
9921
+ }
9922
+ });
9923
+ return {
9924
+ code: 0,
9925
+ message: "成功",
9926
+ data: {
9927
+ cookie,
9928
+ token,
9929
+ userInfo
9930
+ }
9931
+ };
9932
+ }
9929
9933
  default:
9930
9934
  return {
9931
9935
  code: 500,
@@ -10284,20 +10288,11 @@ var __webpack_exports__ = {};
10284
10288
  };
10285
10289
  const rpa_rpaAction = async (task, params)=>{
10286
10290
  const tmpCachePath = task.getTmpPath();
10287
- const commonCookies = {
10288
- path: "/",
10289
- secure: true,
10290
- domain: "baijiahao.baidu.com",
10291
- url: "https://baijiahao.baidu.com",
10292
- httpOnly: true
10293
- };
10291
+ const validCookies = (params.cookies || []).filter((it)=>it.name && it.value && "undefined" !== it.value);
10294
10292
  const page = await task.createPage({
10295
10293
  show: task.debug,
10296
10294
  url: params.url || "https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1",
10297
- cookies: params.cookies?.map((it)=>({
10298
- ...it,
10299
- ...commonCookies
10300
- })) || []
10295
+ cookies: validCookies
10301
10296
  });
10302
10297
  page.setDefaultTimeout(60000);
10303
10298
  page.setDefaultNavigationTimeout(60000);
@@ -11832,6 +11827,8 @@ var __webpack_exports__ = {};
11832
11827
  }
11833
11828
  new Xhshow();
11834
11829
  const sessionCheck_xsEncrypt = new Xhshow();
11830
+ let lastEnvLogTime = 0;
11831
+ const ENV_LOG_INTERVAL_MS = 5000;
11835
11832
  const SessionCheckResultSchema = schemas_object({
11836
11833
  isValidSession: schemas_boolean()
11837
11834
  });
@@ -11896,6 +11893,23 @@ var __webpack_exports__ = {};
11896
11893
  }, "微信账号有效性检测完成!");
11897
11894
  };
11898
11895
  const XhsSessionCheck = async (_task, params)=>{
11896
+ const now = Date.now();
11897
+ const shouldLogEnv = now - lastEnvLogTime >= ENV_LOG_INTERVAL_MS;
11898
+ if (shouldLogEnv) {
11899
+ lastEnvLogTime = now;
11900
+ _task.logger?.debug("[XhsSessionCheck] 环境信息", {
11901
+ processType: process.type,
11902
+ pid: process.pid,
11903
+ nodeVersion: process.version,
11904
+ platform: process.platform,
11905
+ memoryUsage: {
11906
+ heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
11907
+ heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
11908
+ },
11909
+ accountId: params.accountId,
11910
+ hasProxy: !!(params.proxyLoc || params.localIP)
11911
+ });
11912
+ }
11899
11913
  const check = {
11900
11914
  isValidSession: false,
11901
11915
  isValidWebSession: false
@@ -11932,7 +11946,32 @@ var __webpack_exports__ = {};
11932
11946
  if (cookie.name && cookie.value) acc[cookie.name] = cookie.value;
11933
11947
  return acc;
11934
11948
  }, {});
11935
- const loginBaseXsHeader = sessionCheck_xsEncrypt.signHeadersGet(loginBasePath, recordCookie, "xhs-pc-web", null);
11949
+ let loginBaseXsHeader;
11950
+ try {
11951
+ loginBaseXsHeader = sessionCheck_xsEncrypt.signHeadersGet(loginBasePath, recordCookie, "xhs-pc-web", null);
11952
+ } catch (signError) {
11953
+ _task.logger?.error("[XhsSessionCheck] 签名生成失败 - 环境快照", {
11954
+ accountId: params.accountId,
11955
+ error: signError instanceof Error ? signError.message : String(signError),
11956
+ stack: _task.debug ? signError instanceof Error ? signError.stack : void 0 : void 0,
11957
+ hasA1: !!recordCookie.a1,
11958
+ env: {
11959
+ processType: process.type,
11960
+ memoryUsage: {
11961
+ heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
11962
+ heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
11963
+ },
11964
+ hasProxy: !!(params.proxyLoc || params.localIP),
11965
+ timeSinceLastLog: Date.now() - lastEnvLogTime
11966
+ }
11967
+ });
11968
+ return {
11969
+ code: 500,
11970
+ message: "账号签名生成失败,请稍后重试。",
11971
+ data: check
11972
+ };
11973
+ }
11974
+ const baseInfoStart = Date.now();
11936
11975
  const _baseInfo = http.api({
11937
11976
  method: "get",
11938
11977
  baseURL: "https://creator.xiaohongshu.com",
@@ -11941,23 +11980,43 @@ var __webpack_exports__ = {};
11941
11980
  }, {
11942
11981
  retries: 3,
11943
11982
  retryDelay: 20,
11944
- timeout: 3000
11945
- }).catch((e)=>e.data);
11983
+ timeout: 5000
11984
+ }).catch((e)=>{
11985
+ const clientTimestamp = Date.now();
11986
+ const serverDate = e?.extra?.serverDate;
11987
+ const serverTimestamp = serverDate ? new Date(serverDate).getTime() : null;
11988
+ const timeDriftMs = serverTimestamp ? clientTimestamp - serverTimestamp : null;
11989
+ _task.logger?.warn("[XhsSessionCheck] creator base 接口请求失败", {
11990
+ accountId: params.accountId,
11991
+ duration: Date.now() - baseInfoStart,
11992
+ code: e?.code,
11993
+ message: e?.message,
11994
+ data: e?.data,
11995
+ extra: e?.extra,
11996
+ proxyInfo: http.proxyInfo,
11997
+ clientTimestamp,
11998
+ serverDate,
11999
+ serverTimestamp,
12000
+ timeDriftMs,
12001
+ isLikelyClockDrift: null !== timeDriftMs && Math.abs(timeDriftMs) > 300000
12002
+ });
12003
+ return e.data;
12004
+ });
11946
12005
  const _web_session = http.api({
11947
12006
  method: "get",
11948
12007
  url: "https://edith.xiaohongshu.com/api/sns/web/unread_count"
11949
12008
  }, {
11950
12009
  retries: 3,
11951
12010
  retryDelay: 20,
11952
- timeout: 3000
12011
+ timeout: 5000
11953
12012
  });
11954
12013
  const [baseInfo, web_session] = await Promise.all([
11955
12014
  _baseInfo,
11956
12015
  _web_session
11957
12016
  ]);
11958
12017
  if (baseInfo?.code === 0) check.isValidSession = true;
11959
- if (0 === web_session.code) check.isValidWebSession = true;
11960
- baseInfo?.code, web_session.code;
12018
+ if (web_session?.code === 0) check.isValidWebSession = true;
12019
+ baseInfo?.code, web_session?.code;
11961
12020
  const message = `小红书账号有效性检测成功${_task.debug ? ` ${http.proxyInfo}` : ""}`;
11962
12021
  return (0, share_namespaceObject.success)(check, message);
11963
12022
  };
@@ -14492,7 +14551,10 @@ var __webpack_exports__ = {};
14492
14551
  task.logger.info(`拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
14493
14552
  decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
14494
14553
  if (needsVerification(decision)) {
14495
- task.logger.info(`需要验证: ${JSON.stringify(decision)}`);
14554
+ task.logger.warn(`检测到需要验证: ${JSON.stringify(decision)}`);
14555
+ task.logger.warn(`验证类型: ${decision?.verify_ways?.join(", ")}`);
14556
+ task.logger.warn(`验证标题: ${decision?.verify_title}`);
14557
+ task.logger.warn(`验证描述: ${decision?.verify_desc}`);
14496
14558
  return;
14497
14559
  }
14498
14560
  if (!response || !response.data) return;
@@ -14519,38 +14581,116 @@ var __webpack_exports__ = {};
14519
14581
  });
14520
14582
  return (0, share_namespaceObject.response)(0, message, data);
14521
14583
  }
14522
- const webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
14523
- const ticket = webProtectData.ticket;
14524
- const ts_sign = webProtectData.ts_sign;
14525
- const ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
14526
- const certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
14584
+ let webProtectData;
14585
+ try {
14586
+ webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
14587
+ if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
14588
+ task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
14589
+ return (0, share_namespaceObject.response)(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
14590
+ }
14591
+ } catch (error) {
14592
+ task.logger.error(`解析 webProtectData 失败: ${error}`);
14593
+ return (0, share_namespaceObject.response)(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
14594
+ }
14595
+ let ticket = webProtectData.ticket;
14596
+ let ts_sign = webProtectData.ts_sign;
14597
+ const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
14598
+ if (serverDataCookie) try {
14599
+ const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
14600
+ if (decoded.ticket && decoded.ts_sign) {
14601
+ if (decoded.ticket !== ticket) task.logger.info("使用 cookie 中的最新 ticket(web_protect 已过期)");
14602
+ ticket = decoded.ticket;
14603
+ ts_sign = decoded.ts_sign;
14604
+ }
14605
+ } catch (error) {
14606
+ task.logger.warn(`解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
14607
+ }
14608
+ let ec_privateKey;
14609
+ try {
14610
+ ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
14611
+ if (!ec_privateKey) {
14612
+ task.logger.error("ec_privateKey 为空");
14613
+ return (0, share_namespaceObject.response)(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
14614
+ }
14615
+ } catch (error) {
14616
+ task.logger.error(`解析 ec_privateKey 失败: ${error}`);
14617
+ return (0, share_namespaceObject.response)(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
14618
+ }
14619
+ let certificate;
14620
+ try {
14621
+ certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
14622
+ if (!certificate) {
14623
+ task.logger.error("certificate 为空");
14624
+ return (0, share_namespaceObject.response)(414, "安全参数 certificate 缺失,请重新获取后重试", "");
14625
+ }
14626
+ } catch (error) {
14627
+ task.logger.error(`解析 certificate 失败: ${error}`);
14628
+ return (0, share_namespaceObject.response)(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
14629
+ }
14527
14630
  const ree_public_key = webProtectData.client_cert.replace("pub.", "");
14528
- task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket}, ts_sign: ${ts_sign}, ec_privateKey: ${ec_privateKey}, certificate: ${certificate}, ree_public_key: ${ree_public_key}`);
14529
- const bdTicketGuardClientData = getBdV2({
14530
- ticket,
14531
- ts_sign: ts_sign,
14532
- ec_privateKey: ec_privateKey,
14533
- certificate: certificate,
14534
- bd_ticket_guard_ree_public_key: ree_public_key
14535
- });
14536
- task.logger.info("bdTicketGuardClientData", {
14537
- bdTicketGuardClientData
14538
- });
14631
+ task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket?.substring(0, 20)}..., ts_sign: ${ts_sign}, ree_public_key: ${ree_public_key?.substring(0, 20)}...`);
14632
+ let bdTicketGuardClientData;
14633
+ try {
14634
+ bdTicketGuardClientData = getBdV2({
14635
+ ticket,
14636
+ ts_sign: ts_sign,
14637
+ ec_privateKey: ec_privateKey,
14638
+ certificate: certificate,
14639
+ bd_ticket_guard_ree_public_key: ree_public_key
14640
+ });
14641
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
14642
+ task.logger.error(`bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
14643
+ return (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
14644
+ }
14645
+ } catch (error) {
14646
+ task.logger.error(`生成 bdTicketGuardClientData 失败: ${error}`);
14647
+ return (0, share_namespaceObject.response)(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
14648
+ }
14649
+ task.logger.info("bdTicketGuardClientData 生成成功");
14539
14650
  const publishQuery = {
14540
14651
  ...publishParams,
14541
14652
  a_bogus: ""
14542
14653
  };
14543
14654
  const queryString = new URLSearchParams(publishQuery).toString();
14544
- const aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
14655
+ let aBogus;
14656
+ try {
14657
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
14658
+ if (!aBogus || aBogus.length < 10) {
14659
+ task.logger.error(`a_bogus 生成异常,长度过短: ${aBogus}`);
14660
+ return (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成失败,请重试", "");
14661
+ }
14662
+ task.logger.info(`a_bogus 生成成功: ${aBogus.substring(0, 20)}...`);
14663
+ } catch (error) {
14664
+ task.logger.error(`生成 a_bogus 失败: ${error}`);
14665
+ return (0, share_namespaceObject.response)(414, "安全参数 a_bogus 生成异常,请重试", "");
14666
+ }
14545
14667
  publishQuery.a_bogus = aBogus;
14546
14668
  const publishQueryParams = new URLSearchParams(publishQuery).toString();
14547
- const csrfToken = mock_generateCsrfTokenAdvanced({
14548
- cookies: params.cookies,
14549
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
14550
- method: "POST",
14551
- userAgent
14552
- });
14553
- const sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
14669
+ let csrfToken;
14670
+ try {
14671
+ csrfToken = mock_generateCsrfTokenAdvanced({
14672
+ cookies: params.cookies,
14673
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
14674
+ method: "POST",
14675
+ userAgent
14676
+ });
14677
+ if (!csrfToken || csrfToken.length < 10) {
14678
+ task.logger.error(`csrfToken 生成异常,长度过短: ${csrfToken}`);
14679
+ return (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成失败,请重试", "");
14680
+ }
14681
+ task.logger.info(`csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
14682
+ } catch (error) {
14683
+ task.logger.error(`生成 csrfToken 失败: ${error}`);
14684
+ return (0, share_namespaceObject.response)(414, "安全参数 csrfToken 生成异常,请重试", "");
14685
+ }
14686
+ let sessionDtrait;
14687
+ try {
14688
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
14689
+ task.logger.info(`sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
14690
+ } catch (error) {
14691
+ task.logger.error(`生成 sessionDtrait 失败: ${error}`);
14692
+ return (0, share_namespaceObject.response)(414, "安全参数 sessionDtrait 生成异常,请重试", "");
14693
+ }
14554
14694
  task.logger.info("发布数据", {
14555
14695
  data: JSON.stringify(publishData)
14556
14696
  });
@@ -23157,6 +23297,33 @@ var __webpack_exports__ = {};
23157
23297
  const encode_mnsv2 = __webpack_require__("./src/utils/xhs_ob/x_s.encoder.js");
23158
23298
  const xiaohongshuLogin_rpa_server_scanRetryMaxCount = 60;
23159
23299
  const xiaohongshuLogin_rpa_server_waitQrcodeResultMaxTime = 2000 * xiaohongshuLogin_rpa_server_scanRetryMaxCount;
23300
+ async function collectCookiesWithA1(task) {
23301
+ const hasA1 = (cookies)=>cookies.some((c)=>"a1" === c.name && !!c.value);
23302
+ let cookies = await task.steelBrowserContext?.cookies() ?? [];
23303
+ if (hasA1(cookies)) return cookies;
23304
+ task.logger?.warn("[XhsLogin] 首次抓取缺失 a1,尝试补救……");
23305
+ try {
23306
+ const page = task.steelBrowserContext?.pages?.()[0];
23307
+ if (page) {
23308
+ await page.goto("https://www.xiaohongshu.com", {
23309
+ waitUntil: "domcontentloaded",
23310
+ timeout: 15000
23311
+ });
23312
+ for(let i = 0; i < 10; i++){
23313
+ cookies = await task.steelBrowserContext?.cookies() ?? [];
23314
+ if (hasA1(cookies)) {
23315
+ task.logger?.info(`[XhsLogin] a1 补救成功,第 ${i + 1} 次轮询命中`);
23316
+ return cookies;
23317
+ }
23318
+ await new Promise((resolve)=>setTimeout(resolve, 500));
23319
+ }
23320
+ }
23321
+ } catch (err) {
23322
+ task.logger?.warn("[XhsLogin] a1 补救访问主站失败", err);
23323
+ }
23324
+ cookies = await task.steelBrowserContext?.cookies() ?? [];
23325
+ return cookies;
23326
+ }
23160
23327
  const xiaohongshuLogin_rpa_server_rpaServer = async (task, params)=>{
23161
23328
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
23162
23329
  const reporter = task.reportService?.reportLoginStatus ?? (()=>Promise.resolve());
@@ -23357,21 +23524,29 @@ var __webpack_exports__ = {};
23357
23524
  };
23358
23525
  }
23359
23526
  case types_ExecutionState.SUCCESS:
23360
- await updateTaskState?.({
23361
- state: share_namespaceObject.TaskState.SUCCESS,
23362
- result: {
23363
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),
23364
- userInfo: userInfo
23365
- }
23366
- });
23367
- return {
23368
- code: 0,
23369
- message: "成功",
23370
- data: {
23371
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),
23372
- userInfo
23373
- }
23374
- };
23527
+ {
23528
+ const cookies = await collectCookiesWithA1(task);
23529
+ const hasA1 = cookies.some((c)=>"a1" === c.name && !!c.value);
23530
+ if (!hasA1) task.logger?.warn("[XhsLogin] 登录成功但缺失关键 cookie a1,后续检测可能失败", {
23531
+ cookieNames: cookies.map((c)=>c.name)
23532
+ });
23533
+ const cookieStr = JSON.stringify(cookies);
23534
+ await updateTaskState?.({
23535
+ state: share_namespaceObject.TaskState.SUCCESS,
23536
+ result: {
23537
+ cookie: cookieStr,
23538
+ userInfo: userInfo
23539
+ }
23540
+ });
23541
+ return {
23542
+ code: 0,
23543
+ message: "成功",
23544
+ data: {
23545
+ cookie: cookieStr,
23546
+ userInfo
23547
+ }
23548
+ };
23549
+ }
23375
23550
  default:
23376
23551
  return {
23377
23552
  code: 500,
@@ -23572,6 +23747,14 @@ var __webpack_exports__ = {};
23572
23747
  const fileName = (0, share_namespaceObject.getFilenameFromUrl)(url);
23573
23748
  const localUrl = await (0, share_namespaceObject.downloadImage)(url, external_node_path_default().join(tmpCachePath, fileName));
23574
23749
  const fileBuffer = external_node_fs_default().readFileSync(localUrl);
23750
+ let width = 0;
23751
+ let height = 0;
23752
+ try {
23753
+ const dimensions = external_image_size_default()(fileBuffer);
23754
+ width = dimensions.width ?? 0;
23755
+ height = dimensions.height ?? 0;
23756
+ } catch {}
23757
+ const originSize = fileBuffer.byteLength / 1024;
23575
23758
  const MAX_RETRIES = uploadInfos.length;
23576
23759
  let attempt = 0;
23577
23760
  while(attempt < MAX_RETRIES){
@@ -23593,7 +23776,10 @@ var __webpack_exports__ = {};
23593
23776
  });
23594
23777
  return {
23595
23778
  ossFileId,
23596
- ossToken
23779
+ ossToken,
23780
+ width,
23781
+ height,
23782
+ originSize
23597
23783
  };
23598
23784
  } catch (error) {
23599
23785
  attempt++;
@@ -23601,7 +23787,10 @@ var __webpack_exports__ = {};
23601
23787
  }
23602
23788
  return {
23603
23789
  ossFileId: "",
23604
- ossToken: ""
23790
+ ossToken: "",
23791
+ width,
23792
+ height,
23793
+ originSize
23605
23794
  };
23606
23795
  };
23607
23796
  const coverInfos = await Promise.all(params.banners.map((it, idx)=>uploadFile(it, idx)));
@@ -23666,8 +23855,16 @@ var __webpack_exports__ = {};
23666
23855
  },
23667
23856
  image_info: {
23668
23857
  images: coverInfos.map((it)=>({
23669
- extra_info_json: '{"mimeType":"image/png"}',
23858
+ extra_info_json: JSON.stringify({
23859
+ mimeType: "image/png",
23860
+ image_metadata: {
23861
+ bg_color: "",
23862
+ origin_size: it.originSize
23863
+ }
23864
+ }),
23670
23865
  file_id: it.ossFileId,
23866
+ width: it.width,
23867
+ height: it.height,
23671
23868
  metadata: {
23672
23869
  source: -1
23673
23870
  },