@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/bundle.js CHANGED
@@ -8734,9 +8734,9 @@ var __webpack_exports__ = {};
8734
8734
  origin: ()=>utils_origin
8735
8735
  });
8736
8736
  var package_namespaceObject = {
8737
- i8: "0.1.1"
8737
+ i8: "0.1.2"
8738
8738
  };
8739
- var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.0-beta.5"}');
8739
+ var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.1-beta.0"}');
8740
8740
  const external_node_fs_namespaceObject = require("node:fs");
8741
8741
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
8742
8742
  const external_node_http_namespaceObject = require("node:http");
@@ -23368,7 +23368,8 @@ var __webpack_exports__ = {};
23368
23368
  url: error.config?.url,
23369
23369
  isProxyRequest: !!(error.config && (error.config.httpAgent || error.config.httpsAgent)),
23370
23370
  params: error.config?.params,
23371
- data: error.config?.data
23371
+ data: error.config?.data,
23372
+ serverDate: error.response?.headers?.date
23372
23373
  }
23373
23374
  };
23374
23375
  if (foundError) Object.assign(errorResponse, foundError);
@@ -23446,7 +23447,7 @@ var __webpack_exports__ = {};
23446
23447
  try {
23447
23448
  this.proxyInfo = agent ? `${agent.ip}:${agent.port}` : void 0;
23448
23449
  const controller = new AbortController();
23449
- const timeoutId = setTimeout(()=>controller.abort(), reqTimeout);
23450
+ const timeoutId = setTimeout(()=>controller.abort(), reqTimeout + 500);
23450
23451
  const response = await this.apiClient({
23451
23452
  ...config,
23452
23453
  timeout: reqTimeout,
@@ -23470,7 +23471,7 @@ var __webpack_exports__ = {};
23470
23471
  599
23471
23472
  ].includes(handledError.code);
23472
23473
  if (Rtimes < retries && isRetry) {
23473
- this.logger?.info(`进入第${Rtimes + 1}次重试!`);
23474
+ this.logger?.info(`进入第${Rtimes + 1}次重试!错误码: ${handledError.code}`);
23474
23475
  await new Promise((resolve)=>setTimeout(resolve, retryDelay));
23475
23476
  return sessionRt(Rtimes + 1);
23476
23477
  }
@@ -28655,23 +28656,26 @@ var __webpack_exports__ = {};
28655
28656
  };
28656
28657
  }
28657
28658
  case types_ExecutionState.SUCCESS:
28658
- await updateTaskState?.({
28659
- state: types_TaskState.SUCCESS,
28660
- result: {
28661
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()).replace(/\\"/g, ""),
28662
- token,
28663
- userInfo: userInfo
28664
- }
28665
- });
28666
- return {
28667
- code: 0,
28668
- message: "成功",
28669
- data: {
28670
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()).replace(/\\"/g, ""),
28671
- token,
28672
- userInfo
28673
- }
28674
- };
28659
+ {
28660
+ const cookie = JSON.stringify(await task.steelBrowserContext?.cookies());
28661
+ await updateTaskState?.({
28662
+ state: types_TaskState.SUCCESS,
28663
+ result: {
28664
+ cookie,
28665
+ token,
28666
+ userInfo: userInfo
28667
+ }
28668
+ });
28669
+ return {
28670
+ code: 0,
28671
+ message: "成功",
28672
+ data: {
28673
+ cookie,
28674
+ token,
28675
+ userInfo
28676
+ }
28677
+ };
28678
+ }
28675
28679
  default:
28676
28680
  return {
28677
28681
  code: 500,
@@ -29028,20 +29032,11 @@ var __webpack_exports__ = {};
29028
29032
  };
29029
29033
  const rpa_rpaAction = async (task, params)=>{
29030
29034
  const tmpCachePath = task.getTmpPath();
29031
- const commonCookies = {
29032
- path: "/",
29033
- secure: true,
29034
- domain: "baijiahao.baidu.com",
29035
- url: "https://baijiahao.baidu.com",
29036
- httpOnly: true
29037
- };
29035
+ const validCookies = (params.cookies || []).filter((it)=>it.name && it.value && "undefined" !== it.value);
29038
29036
  const page = await task.createPage({
29039
29037
  show: task.debug,
29040
29038
  url: params.url || "https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1",
29041
- cookies: params.cookies?.map((it)=>({
29042
- ...it,
29043
- ...commonCookies
29044
- })) || []
29039
+ cookies: validCookies
29045
29040
  });
29046
29041
  page.setDefaultTimeout(60000);
29047
29042
  page.setDefaultNavigationTimeout(60000);
@@ -30574,6 +30569,8 @@ var __webpack_exports__ = {};
30574
30569
  }
30575
30570
  new Xhshow();
30576
30571
  const sessionCheck_xsEncrypt = new Xhshow();
30572
+ let lastEnvLogTime = 0;
30573
+ const ENV_LOG_INTERVAL_MS = 5000;
30577
30574
  const SessionCheckResultSchema = classic_schemas_object({
30578
30575
  isValidSession: classic_schemas_boolean()
30579
30576
  });
@@ -30638,6 +30635,23 @@ var __webpack_exports__ = {};
30638
30635
  }, "微信账号有效性检测完成!");
30639
30636
  };
30640
30637
  const XhsSessionCheck = async (_task, params)=>{
30638
+ const now = Date.now();
30639
+ const shouldLogEnv = now - lastEnvLogTime >= ENV_LOG_INTERVAL_MS;
30640
+ if (shouldLogEnv) {
30641
+ lastEnvLogTime = now;
30642
+ _task.logger?.debug("[XhsSessionCheck] 环境信息", {
30643
+ processType: process.type,
30644
+ pid: process.pid,
30645
+ nodeVersion: process.version,
30646
+ platform: process.platform,
30647
+ memoryUsage: {
30648
+ heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
30649
+ heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
30650
+ },
30651
+ accountId: params.accountId,
30652
+ hasProxy: !!(params.proxyLoc || params.localIP)
30653
+ });
30654
+ }
30641
30655
  const check = {
30642
30656
  isValidSession: false,
30643
30657
  isValidWebSession: false
@@ -30674,7 +30688,32 @@ var __webpack_exports__ = {};
30674
30688
  if (cookie.name && cookie.value) acc[cookie.name] = cookie.value;
30675
30689
  return acc;
30676
30690
  }, {});
30677
- const loginBaseXsHeader = sessionCheck_xsEncrypt.signHeadersGet(loginBasePath, recordCookie, "xhs-pc-web", null);
30691
+ let loginBaseXsHeader;
30692
+ try {
30693
+ loginBaseXsHeader = sessionCheck_xsEncrypt.signHeadersGet(loginBasePath, recordCookie, "xhs-pc-web", null);
30694
+ } catch (signError) {
30695
+ _task.logger?.error("[XhsSessionCheck] 签名生成失败 - 环境快照", {
30696
+ accountId: params.accountId,
30697
+ error: signError instanceof Error ? signError.message : String(signError),
30698
+ stack: _task.debug ? signError instanceof Error ? signError.stack : void 0 : void 0,
30699
+ hasA1: !!recordCookie.a1,
30700
+ env: {
30701
+ processType: process.type,
30702
+ memoryUsage: {
30703
+ heapUsed: `${Math.round(process.memoryUsage().heapUsed / 1024 / 1024)} MB`,
30704
+ heapTotal: `${Math.round(process.memoryUsage().heapTotal / 1024 / 1024)} MB`
30705
+ },
30706
+ hasProxy: !!(params.proxyLoc || params.localIP),
30707
+ timeSinceLastLog: Date.now() - lastEnvLogTime
30708
+ }
30709
+ });
30710
+ return {
30711
+ code: 500,
30712
+ message: "账号签名生成失败,请稍后重试。",
30713
+ data: check
30714
+ };
30715
+ }
30716
+ const baseInfoStart = Date.now();
30678
30717
  const _baseInfo = http.api({
30679
30718
  method: "get",
30680
30719
  baseURL: "https://creator.xiaohongshu.com",
@@ -30683,23 +30722,43 @@ var __webpack_exports__ = {};
30683
30722
  }, {
30684
30723
  retries: 3,
30685
30724
  retryDelay: 20,
30686
- timeout: 3000
30687
- }).catch((e)=>e.data);
30725
+ timeout: 5000
30726
+ }).catch((e)=>{
30727
+ const clientTimestamp = Date.now();
30728
+ const serverDate = e?.extra?.serverDate;
30729
+ const serverTimestamp = serverDate ? new Date(serverDate).getTime() : null;
30730
+ const timeDriftMs = serverTimestamp ? clientTimestamp - serverTimestamp : null;
30731
+ _task.logger?.warn("[XhsSessionCheck] creator base 接口请求失败", {
30732
+ accountId: params.accountId,
30733
+ duration: Date.now() - baseInfoStart,
30734
+ code: e?.code,
30735
+ message: e?.message,
30736
+ data: e?.data,
30737
+ extra: e?.extra,
30738
+ proxyInfo: http.proxyInfo,
30739
+ clientTimestamp,
30740
+ serverDate,
30741
+ serverTimestamp,
30742
+ timeDriftMs,
30743
+ isLikelyClockDrift: null !== timeDriftMs && Math.abs(timeDriftMs) > 300000
30744
+ });
30745
+ return e.data;
30746
+ });
30688
30747
  const _web_session = http.api({
30689
30748
  method: "get",
30690
30749
  url: "https://edith.xiaohongshu.com/api/sns/web/unread_count"
30691
30750
  }, {
30692
30751
  retries: 3,
30693
30752
  retryDelay: 20,
30694
- timeout: 3000
30753
+ timeout: 5000
30695
30754
  });
30696
30755
  const [baseInfo, web_session] = await Promise.all([
30697
30756
  _baseInfo,
30698
30757
  _web_session
30699
30758
  ]);
30700
30759
  if (baseInfo?.code === 0) check.isValidSession = true;
30701
- if (0 === web_session.code) check.isValidWebSession = true;
30702
- baseInfo?.code, web_session.code;
30760
+ if (web_session?.code === 0) check.isValidWebSession = true;
30761
+ baseInfo?.code, web_session?.code;
30703
30762
  const message = `小红书账号有效性检测成功${_task.debug ? ` ${http.proxyInfo}` : ""}`;
30704
30763
  return success(check, message);
30705
30764
  };
@@ -34720,7 +34779,10 @@ var __webpack_exports__ = {};
34720
34779
  task.logger.info(`拦截器收到响应response.data: ${JSON.stringify(response.data)} `);
34721
34780
  decision = parseVerifyPassportDecision(response.headers["x-tt-verify-passport-decision"]);
34722
34781
  if (needsVerification(decision)) {
34723
- task.logger.info(`需要验证: ${JSON.stringify(decision)}`);
34782
+ task.logger.warn(`检测到需要验证: ${JSON.stringify(decision)}`);
34783
+ task.logger.warn(`验证类型: ${decision?.verify_ways?.join(", ")}`);
34784
+ task.logger.warn(`验证标题: ${decision?.verify_title}`);
34785
+ task.logger.warn(`验证描述: ${decision?.verify_desc}`);
34724
34786
  return;
34725
34787
  }
34726
34788
  if (!response || !response.data) return;
@@ -34747,38 +34809,116 @@ var __webpack_exports__ = {};
34747
34809
  });
34748
34810
  return utils_response(0, message, data);
34749
34811
  }
34750
- const webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
34751
- const ticket = webProtectData.ticket;
34752
- const ts_sign = webProtectData.ts_sign;
34753
- const ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
34754
- const certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
34812
+ let webProtectData;
34813
+ try {
34814
+ webProtectData = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_sign_data_key/web_protect"] || "{}").data || "{}");
34815
+ if (!webProtectData.ticket || !webProtectData.ts_sign || !webProtectData.client_cert) {
34816
+ task.logger.error(`webProtectData 关键字段缺失: ${JSON.stringify(webProtectData)}`);
34817
+ return utils_response(414, "安全参数 webProtectData 不完整,请重新获取后重试", "");
34818
+ }
34819
+ } catch (error) {
34820
+ task.logger.error(`解析 webProtectData 失败: ${error}`);
34821
+ return utils_response(414, "安全参数 webProtectData 解析失败,请重新获取后重试", "");
34822
+ }
34823
+ let ticket = webProtectData.ticket;
34824
+ let ts_sign = webProtectData.ts_sign;
34825
+ const serverDataCookie = params.cookies.find((it)=>"bd_ticket_guard_server_data" === it.name)?.value;
34826
+ if (serverDataCookie) try {
34827
+ const decoded = JSON.parse(Buffer.from(decodeURIComponent(serverDataCookie), "base64").toString("utf8"));
34828
+ if (decoded.ticket && decoded.ts_sign) {
34829
+ if (decoded.ticket !== ticket) task.logger.info("使用 cookie 中的最新 ticket(web_protect 已过期)");
34830
+ ticket = decoded.ticket;
34831
+ ts_sign = decoded.ts_sign;
34832
+ }
34833
+ } catch (error) {
34834
+ task.logger.warn(`解析 bd_ticket_guard_server_data 失败,回退到 web_protect: ${error}`);
34835
+ }
34836
+ let ec_privateKey;
34837
+ try {
34838
+ ec_privateKey = JSON.parse(JSON.parse(params.extraParam["security-sdk/s_sdk_crypt_sdk"] || "{}").data || "{}").ec_privateKey;
34839
+ if (!ec_privateKey) {
34840
+ task.logger.error("ec_privateKey 为空");
34841
+ return utils_response(414, "安全参数 ec_privateKey 缺失,请重新获取后重试", "");
34842
+ }
34843
+ } catch (error) {
34844
+ task.logger.error(`解析 ec_privateKey 失败: ${error}`);
34845
+ return utils_response(414, "安全参数 ec_privateKey 解析失败,请重新获取后重试", "");
34846
+ }
34847
+ let certificate;
34848
+ try {
34849
+ certificate = JSON.parse(params.extraParam["security-sdk/s_sdk_server_cert_key"] || "{}").cert;
34850
+ if (!certificate) {
34851
+ task.logger.error("certificate 为空");
34852
+ return utils_response(414, "安全参数 certificate 缺失,请重新获取后重试", "");
34853
+ }
34854
+ } catch (error) {
34855
+ task.logger.error(`解析 certificate 失败: ${error}`);
34856
+ return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
34857
+ }
34755
34858
  const ree_public_key = webProtectData.client_cert.replace("pub.", "");
34756
- task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket}, ts_sign: ${ts_sign}, ec_privateKey: ${ec_privateKey}, certificate: ${certificate}, ree_public_key: ${ree_public_key}`);
34757
- const bdTicketGuardClientData = getBdV2({
34758
- ticket,
34759
- ts_sign: ts_sign,
34760
- ec_privateKey: ec_privateKey,
34761
- certificate: certificate,
34762
- bd_ticket_guard_ree_public_key: ree_public_key
34763
- });
34764
- task.logger.info("bdTicketGuardClientData", {
34765
- bdTicketGuardClientData
34766
- });
34859
+ task.logger.info(`生成 bdTicketGuardClientData 的参数: ticket: ${ticket?.substring(0, 20)}..., ts_sign: ${ts_sign}, ree_public_key: ${ree_public_key?.substring(0, 20)}...`);
34860
+ let bdTicketGuardClientData;
34861
+ try {
34862
+ bdTicketGuardClientData = getBdV2({
34863
+ ticket,
34864
+ ts_sign: ts_sign,
34865
+ ec_privateKey: ec_privateKey,
34866
+ certificate: certificate,
34867
+ bd_ticket_guard_ree_public_key: ree_public_key
34868
+ });
34869
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
34870
+ task.logger.error(`bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
34871
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
34872
+ }
34873
+ } catch (error) {
34874
+ task.logger.error(`生成 bdTicketGuardClientData 失败: ${error}`);
34875
+ return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
34876
+ }
34877
+ task.logger.info("bdTicketGuardClientData 生成成功");
34767
34878
  const publishQuery = {
34768
34879
  ...publishParams,
34769
34880
  a_bogus: ""
34770
34881
  };
34771
34882
  const queryString = new URLSearchParams(publishQuery).toString();
34772
- const aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
34883
+ let aBogus;
34884
+ try {
34885
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
34886
+ if (!aBogus || aBogus.length < 10) {
34887
+ task.logger.error(`a_bogus 生成异常,长度过短: ${aBogus}`);
34888
+ return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
34889
+ }
34890
+ task.logger.info(`a_bogus 生成成功: ${aBogus.substring(0, 20)}...`);
34891
+ } catch (error) {
34892
+ task.logger.error(`生成 a_bogus 失败: ${error}`);
34893
+ return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
34894
+ }
34773
34895
  publishQuery.a_bogus = aBogus;
34774
34896
  const publishQueryParams = new URLSearchParams(publishQuery).toString();
34775
- const csrfToken = mock_generateCsrfTokenAdvanced({
34776
- cookies: params.cookies,
34777
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
34778
- method: "POST",
34779
- userAgent
34780
- });
34781
- const sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
34897
+ let csrfToken;
34898
+ try {
34899
+ csrfToken = mock_generateCsrfTokenAdvanced({
34900
+ cookies: params.cookies,
34901
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
34902
+ method: "POST",
34903
+ userAgent
34904
+ });
34905
+ if (!csrfToken || csrfToken.length < 10) {
34906
+ task.logger.error(`csrfToken 生成异常,长度过短: ${csrfToken}`);
34907
+ return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
34908
+ }
34909
+ task.logger.info(`csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
34910
+ } catch (error) {
34911
+ task.logger.error(`生成 csrfToken 失败: ${error}`);
34912
+ return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
34913
+ }
34914
+ let sessionDtrait;
34915
+ try {
34916
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
34917
+ task.logger.info(`sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
34918
+ } catch (error) {
34919
+ task.logger.error(`生成 sessionDtrait 失败: ${error}`);
34920
+ return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
34921
+ }
34782
34922
  task.logger.info("发布数据", {
34783
34923
  data: JSON.stringify(publishData)
34784
34924
  });
@@ -43385,6 +43525,33 @@ var __webpack_exports__ = {};
43385
43525
  const encode_mnsv2 = __webpack_require__("./src/utils/xhs_ob/x_s.encoder.js");
43386
43526
  const xiaohongshuLogin_rpa_server_scanRetryMaxCount = 60;
43387
43527
  const xiaohongshuLogin_rpa_server_waitQrcodeResultMaxTime = 2000 * xiaohongshuLogin_rpa_server_scanRetryMaxCount;
43528
+ async function collectCookiesWithA1(task) {
43529
+ const hasA1 = (cookies)=>cookies.some((c)=>"a1" === c.name && !!c.value);
43530
+ let cookies = await task.steelBrowserContext?.cookies() ?? [];
43531
+ if (hasA1(cookies)) return cookies;
43532
+ task.logger?.warn("[XhsLogin] 首次抓取缺失 a1,尝试补救……");
43533
+ try {
43534
+ const page = task.steelBrowserContext?.pages?.()[0];
43535
+ if (page) {
43536
+ await page.goto("https://www.xiaohongshu.com", {
43537
+ waitUntil: "domcontentloaded",
43538
+ timeout: 15000
43539
+ });
43540
+ for(let i = 0; i < 10; i++){
43541
+ cookies = await task.steelBrowserContext?.cookies() ?? [];
43542
+ if (hasA1(cookies)) {
43543
+ task.logger?.info(`[XhsLogin] a1 补救成功,第 ${i + 1} 次轮询命中`);
43544
+ return cookies;
43545
+ }
43546
+ await new Promise((resolve)=>setTimeout(resolve, 500));
43547
+ }
43548
+ }
43549
+ } catch (err) {
43550
+ task.logger?.warn("[XhsLogin] a1 补救访问主站失败", err);
43551
+ }
43552
+ cookies = await task.steelBrowserContext?.cookies() ?? [];
43553
+ return cookies;
43554
+ }
43388
43555
  const xiaohongshuLogin_rpa_server_rpaServer = async (task, params)=>{
43389
43556
  const updateTaskState = task.taskStageStore?.update?.bind(task.taskStageStore, task.taskId || "");
43390
43557
  const reporter = task.reportService?.reportLoginStatus ?? (()=>Promise.resolve());
@@ -43585,21 +43752,29 @@ var __webpack_exports__ = {};
43585
43752
  };
43586
43753
  }
43587
43754
  case types_ExecutionState.SUCCESS:
43588
- await updateTaskState?.({
43589
- state: types_TaskState.SUCCESS,
43590
- result: {
43591
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),
43592
- userInfo: userInfo
43593
- }
43594
- });
43595
- return {
43596
- code: 0,
43597
- message: "成功",
43598
- data: {
43599
- cookie: JSON.stringify(await task.steelBrowserContext?.cookies()),
43600
- userInfo
43601
- }
43602
- };
43755
+ {
43756
+ const cookies = await collectCookiesWithA1(task);
43757
+ const hasA1 = cookies.some((c)=>"a1" === c.name && !!c.value);
43758
+ if (!hasA1) task.logger?.warn("[XhsLogin] 登录成功但缺失关键 cookie a1,后续检测可能失败", {
43759
+ cookieNames: cookies.map((c)=>c.name)
43760
+ });
43761
+ const cookieStr = JSON.stringify(cookies);
43762
+ await updateTaskState?.({
43763
+ state: types_TaskState.SUCCESS,
43764
+ result: {
43765
+ cookie: cookieStr,
43766
+ userInfo: userInfo
43767
+ }
43768
+ });
43769
+ return {
43770
+ code: 0,
43771
+ message: "成功",
43772
+ data: {
43773
+ cookie: cookieStr,
43774
+ userInfo
43775
+ }
43776
+ };
43777
+ }
43603
43778
  default:
43604
43779
  return {
43605
43780
  code: 500,
@@ -43800,6 +43975,14 @@ var __webpack_exports__ = {};
43800
43975
  const fileName = getFilenameFromUrl(url);
43801
43976
  const localUrl = await downloadImage(url, external_node_path_default().join(tmpCachePath, fileName));
43802
43977
  const fileBuffer = external_node_fs_default().readFileSync(localUrl);
43978
+ let width = 0;
43979
+ let height = 0;
43980
+ try {
43981
+ const dimensions = imageSize(fileBuffer);
43982
+ width = dimensions.width ?? 0;
43983
+ height = dimensions.height ?? 0;
43984
+ } catch {}
43985
+ const originSize = fileBuffer.byteLength / 1024;
43803
43986
  const MAX_RETRIES = uploadInfos.length;
43804
43987
  let attempt = 0;
43805
43988
  while(attempt < MAX_RETRIES){
@@ -43821,7 +44004,10 @@ var __webpack_exports__ = {};
43821
44004
  });
43822
44005
  return {
43823
44006
  ossFileId,
43824
- ossToken
44007
+ ossToken,
44008
+ width,
44009
+ height,
44010
+ originSize
43825
44011
  };
43826
44012
  } catch (error) {
43827
44013
  attempt++;
@@ -43829,7 +44015,10 @@ var __webpack_exports__ = {};
43829
44015
  }
43830
44016
  return {
43831
44017
  ossFileId: "",
43832
- ossToken: ""
44018
+ ossToken: "",
44019
+ width,
44020
+ height,
44021
+ originSize
43833
44022
  };
43834
44023
  };
43835
44024
  const coverInfos = await Promise.all(params.banners.map((it, idx)=>uploadFile(it, idx)));
@@ -43894,8 +44083,16 @@ var __webpack_exports__ = {};
43894
44083
  },
43895
44084
  image_info: {
43896
44085
  images: coverInfos.map((it)=>({
43897
- extra_info_json: '{"mimeType":"image/png"}',
44086
+ extra_info_json: JSON.stringify({
44087
+ mimeType: "image/png",
44088
+ image_metadata: {
44089
+ bg_color: "",
44090
+ origin_size: it.originSize
44091
+ }
44092
+ }),
43898
44093
  file_id: it.ossFileId,
44094
+ width: it.width,
44095
+ height: it.height,
43899
44096
  metadata: {
43900
44097
  source: -1
43901
44098
  },