@iflyrpa/actions 4.0.4-beta.5 → 4.0.4-beta.7

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.
@@ -82,6 +82,7 @@ export declare const ShipinhaoArticleSchema: z.ZodObject<{
82
82
  objectId: z.ZodString;
83
83
  postType: z.ZodString;
84
84
  postStatus: z.ZodNumber;
85
+ effectiveTime: z.ZodOptional<z.ZodNumber>;
85
86
  }, z.core.$strip>;
86
87
  export type ShipinhaoArticle = z.infer<typeof ShipinhaoArticleSchema>;
87
88
  export declare const FetchArticlesDataSchema: z.ZodObject<{
@@ -158,6 +159,7 @@ export declare const FetchArticlesDataSchema: z.ZodObject<{
158
159
  objectId: z.ZodString;
159
160
  postType: z.ZodString;
160
161
  postStatus: z.ZodNumber;
162
+ effectiveTime: z.ZodOptional<z.ZodNumber>;
161
163
  }, z.core.$strip>]>>>;
162
164
  timerPublish: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
163
165
  title: z.ZodString;
@@ -232,6 +234,7 @@ export declare const FetchArticlesDataSchema: z.ZodObject<{
232
234
  objectId: z.ZodString;
233
235
  postType: z.ZodString;
234
236
  postStatus: z.ZodNumber;
237
+ effectiveTime: z.ZodOptional<z.ZodNumber>;
235
238
  }, z.core.$strip>]>>>;
236
239
  pagination: z.ZodOptional<z.ZodObject<{
237
240
  total: z.ZodOptional<z.ZodNumber>;
package/dist/bundle.js CHANGED
@@ -1,6 +1,4 @@
1
1
  /*! For license information please see bundle.js.LICENSE.txt */
2
-
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="02f852b8-8ea2-52b0-ae8a-9884ff70f64a")}catch(e){}}();
4
2
  var __webpack_modules__ = {
5
3
  "../../node_modules/.pnpm/agent-base@7.1.4/node_modules/agent-base/dist/helpers.js": function(__unused_webpack_module, exports1, __webpack_require__) {
6
4
  "use strict";
@@ -12492,7 +12490,7 @@ var __webpack_exports__ = {};
12492
12490
  var package_namespaceObject = {
12493
12491
  i8: "0.1.2"
12494
12492
  };
12495
- var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.4-beta.5"}');
12493
+ var package_namespaceObject_0 = JSON.parse('{"i8":"4.0.4-beta.7"}');
12496
12494
  const external_node_fs_namespaceObject = require("node:fs");
12497
12495
  var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
12498
12496
  const external_node_http_namespaceObject = require("node:http");
@@ -38662,8 +38660,8 @@ var __webpack_exports__ = {};
38662
38660
  if (!response || !response.data) return;
38663
38661
  const responseData = response.data;
38664
38662
  if (response && responseData?.status_code && 0 !== responseData.status_code) {
38665
- const errorCode = 4 === responseData.status_code ? 500 : responseData.status_code;
38666
- if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] 抖音服务器错误 status_code: 4,映射为 500 触发重试。原始响应: ${JSON.stringify(responseData)}`);
38663
+ const errorCode = 4 === responseData.status_code ? 590 : responseData.status_code;
38664
+ if (4 === responseData.status_code) task.logger.warn(`[douyinPublish] status_code:4(ticket-guard 伪装拒绝),映射为 590 触发重新签名重试。原始响应: ${JSON.stringify(responseData)}`);
38667
38665
  return {
38668
38666
  code: errorCode,
38669
38667
  message: responseData.status_msg || "文章发布异常,请稍后重试。",
@@ -38730,132 +38728,141 @@ var __webpack_exports__ = {};
38730
38728
  return utils_response(414, "安全参数 certificate 解析失败,请重新获取后重试", "");
38731
38729
  }
38732
38730
  const ree_public_key = webProtectData.client_cert.replace("pub.", "");
38733
- let bdTicketGuardClientData;
38734
- try {
38735
- bdTicketGuardClientData = getBdV2({
38736
- ticket,
38737
- ts_sign: ts_sign,
38738
- ec_privateKey: ec_privateKey,
38739
- certificate: certificate,
38740
- bd_ticket_guard_ree_public_key: ree_public_key
38741
- });
38742
- if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38743
- task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38744
- return utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38731
+ const MAX_SIGN_RETRIES = 3;
38732
+ const SIGN_RETRY_DELAY = 2000;
38733
+ const signAndPublish = async ()=>{
38734
+ let bdTicketGuardClientData;
38735
+ try {
38736
+ bdTicketGuardClientData = getBdV2({
38737
+ ticket,
38738
+ ts_sign: ts_sign,
38739
+ ec_privateKey: ec_privateKey,
38740
+ certificate: certificate,
38741
+ bd_ticket_guard_ree_public_key: ree_public_key
38742
+ });
38743
+ if (!bdTicketGuardClientData || !bdTicketGuardClientData["headers_bd_ticket_guard_client_data"]) {
38744
+ task.logger.error(`[douyinPublish] bdTicketGuardClientData 生成失败或不完整: ${JSON.stringify(bdTicketGuardClientData)}`);
38745
+ throw utils_response(414, "安全参数 bdTicketGuardClientData 生成失败,请重新获取后重试", "");
38746
+ }
38747
+ } catch (error) {
38748
+ if (error && "object" == typeof error && "code" in error) throw error;
38749
+ task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38750
+ throw utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38751
+ }
38752
+ task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38753
+ const publishQuery = {
38754
+ ...publishParams,
38755
+ a_bogus: ""
38756
+ };
38757
+ const queryString = new URLSearchParams(publishQuery).toString();
38758
+ let aBogus;
38759
+ try {
38760
+ aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38761
+ if (!aBogus || aBogus.length < 10) {
38762
+ task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38763
+ throw utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38764
+ }
38765
+ } catch (error) {
38766
+ if (error && "object" == typeof error && "code" in error) throw error;
38767
+ task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38768
+ throw utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38745
38769
  }
38746
- } catch (error) {
38747
- task.logger.error(`[douyinPublish] 生成 bdTicketGuardClientData 失败: ${error}`);
38748
- return utils_response(414, "安全参数 bdTicketGuardClientData 生成异常,请重新获取后重试", "");
38749
- }
38750
- task.logger.info("[douyinPublish] bdTicketGuardClientData 生成成功");
38751
- const publishQuery = {
38752
- ...publishParams,
38753
- a_bogus: ""
38754
- };
38755
- const queryString = new URLSearchParams(publishQuery).toString();
38756
- let aBogus;
38757
- try {
38758
- aBogus = mock_getABogus(`https://creator.douyin.com/web/api/media/aweme/create_v2/?${queryString}`, publishData, userAgent);
38759
- if (!aBogus || aBogus.length < 10) {
38760
- task.logger.error(`[douyinPublish] a_bogus 生成异常,长度过短: ${aBogus}`);
38761
- return utils_response(414, "安全参数 a_bogus 生成失败,请重试", "");
38770
+ publishQuery.a_bogus = aBogus;
38771
+ const publishQueryParams = new URLSearchParams(publishQuery).toString();
38772
+ let csrfToken;
38773
+ try {
38774
+ csrfToken = mock_generateCsrfTokenAdvanced({
38775
+ cookies: params.cookies,
38776
+ url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38777
+ method: "POST",
38778
+ userAgent
38779
+ });
38780
+ if (!csrfToken || csrfToken.length < 10) {
38781
+ task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38782
+ throw utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38783
+ }
38784
+ task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38785
+ } catch (error) {
38786
+ if (error && "object" == typeof error && "code" in error) throw error;
38787
+ task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38788
+ throw utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38762
38789
  }
38763
- } catch (error) {
38764
- task.logger.error(`[douyinPublish] 生成 a_bogus 失败: ${error}`);
38765
- return utils_response(414, "安全参数 a_bogus 生成异常,请重试", "");
38766
- }
38767
- publishQuery.a_bogus = aBogus;
38768
- const publishQueryParams = new URLSearchParams(publishQuery).toString();
38769
- let csrfToken;
38770
- try {
38771
- csrfToken = mock_generateCsrfTokenAdvanced({
38772
- cookies: params.cookies,
38773
- url: "https://creator.douyin.com/web/api/media/aweme/create_v2/",
38774
- method: "POST",
38775
- userAgent
38776
- });
38777
- if (!csrfToken || csrfToken.length < 10) {
38778
- task.logger.error(`[douyinPublish] csrfToken 生成异常,长度过短: ${csrfToken}`);
38779
- return utils_response(414, "安全参数 csrfToken 生成失败,请重试", "");
38790
+ let sessionDtrait;
38791
+ try {
38792
+ sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38793
+ task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38794
+ } catch (error) {
38795
+ task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38796
+ throw utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38780
38797
  }
38781
- task.logger.info(`[douyinPublish] csrfToken 生成成功: ${csrfToken.substring(0, 20)}...`);
38782
- } catch (error) {
38783
- task.logger.error(`[douyinPublish] 生成 csrfToken 失败: ${error}`);
38784
- return utils_response(414, "安全参数 csrfToken 生成异常,请重试", "");
38785
- }
38786
- let sessionDtrait;
38787
- try {
38788
- sessionDtrait = mock_generateDtrait("/web/api/media/aweme/create_v2/");
38789
- task.logger.info(`[douyinPublish] sessionDtrait 生成成功: ${sessionDtrait || "(空)"}`);
38790
- } catch (error) {
38791
- task.logger.error(`[douyinPublish] 生成 sessionDtrait 失败: ${error}`);
38792
- return utils_response(414, "安全参数 sessionDtrait 生成异常,请重试", "");
38793
- }
38794
- task.logger.info(`[douyinPublish] headers: ${JSON.stringify({
38795
- ...headers,
38796
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38797
- "Content-Type": "application/json",
38798
- Accept: "application/json, text/plain, */*",
38799
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38800
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38801
- "bd-ticket-guard-version": "2",
38802
- "bd-ticket-guard-web-sign-type": "1",
38803
- "bd-ticket-guard-web-version": "2",
38804
- "x-secsdk-csrf-token": csrfToken,
38805
- "x-tt-session-dtrait": sessionDtrait || ""
38806
- })}`);
38807
- task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38808
- let publishResult;
38809
- try {
38810
- publishResult = await proxyHttp.api({
38798
+ const requestHeaders = {
38799
+ ...headers,
38800
+ Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38801
+ "Content-Type": "application/json",
38802
+ Accept: "application/json, text/plain, */*",
38803
+ "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38804
+ "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38805
+ "bd-ticket-guard-version": "2",
38806
+ "bd-ticket-guard-web-sign-type": "1",
38807
+ "bd-ticket-guard-web-version": "2",
38808
+ "x-secsdk-csrf-token": csrfToken,
38809
+ "x-tt-session-dtrait": sessionDtrait || ""
38810
+ };
38811
+ task.logger.info(`[douyinPublish] headers: ${JSON.stringify(requestHeaders)}`);
38812
+ task.logger.info(`[douyinPublish] url: https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`);
38813
+ return proxyHttp.api({
38811
38814
  method: "post",
38812
38815
  url: `https://creator.douyin.com/web/api/media/aweme/create_v2/?${publishQueryParams}`,
38813
38816
  data: publishData,
38814
38817
  defaultErrorMsg: "发布异常,请稍后重试。",
38815
- headers: {
38816
- ...headers,
38817
- Referer: "https://creator.douyin.com/creator-micro/content/post/image?default-tab=3&enter_from=publish_page&media_type=image&type=new",
38818
- "Content-Type": "application/json",
38819
- Accept: "application/json, text/plain, */*",
38820
- "bd-ticket-guard-client-data": bdTicketGuardClientData["headers_bd_ticket_guard_client_data"],
38821
- "bd-ticket-guard-ree-public-key": bdTicketGuardClientData["headers_bd_ticket_guard_ree_public_key"],
38822
- "bd-ticket-guard-version": "2",
38823
- "bd-ticket-guard-web-sign-type": "1",
38824
- "bd-ticket-guard-web-version": "2",
38825
- "x-secsdk-csrf-token": csrfToken,
38826
- "x-tt-session-dtrait": sessionDtrait || ""
38827
- }
38818
+ headers: requestHeaders
38828
38819
  }, {
38829
38820
  timeout: 60000,
38830
- retries: 3,
38831
- retryDelay: 2000
38821
+ retries: 0
38832
38822
  });
38833
- } catch (error) {
38834
- const handledError = Http.handleApiError(error);
38835
- const isProxyOrNetworkError = [
38836
- 599,
38837
- 500,
38838
- 502,
38839
- 503,
38840
- 504
38841
- ].includes(handledError.code);
38842
- if (isProxyOrNetworkError) {
38843
- const isProxyRequest = handledError.extra?.isProxyRequest === true;
38844
- const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38845
- const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38846
- task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38847
- await updateTaskState?.({
38848
- state: types_TaskState.FAILED,
38849
- error: message
38850
- });
38851
- return {
38852
- code: 414,
38853
- data: "",
38854
- message
38855
- };
38823
+ };
38824
+ let publishResult;
38825
+ for(let attempt = 0; attempt < MAX_SIGN_RETRIES; attempt++){
38826
+ if (attempt > 0) {
38827
+ task.logger.warn(`[douyinPublish] 第 ${attempt} 次重新签名后重试(上次为 ticket-guard 拒绝)`);
38828
+ await new Promise((resolve)=>setTimeout(resolve, SIGN_RETRY_DELAY));
38829
+ }
38830
+ try {
38831
+ publishResult = await signAndPublish();
38832
+ break;
38833
+ } catch (error) {
38834
+ const handledError = Http.handleApiError(error);
38835
+ if (590 === handledError.code) {
38836
+ if (attempt < MAX_SIGN_RETRIES - 1) continue;
38837
+ task.logger.error(`[douyinPublish] ticket-guard 拒绝重试已用尽(${MAX_SIGN_RETRIES} 次),走兜底`);
38838
+ throw error;
38839
+ }
38840
+ const isProxyOrNetworkError = [
38841
+ 599,
38842
+ 500,
38843
+ 502,
38844
+ 503,
38845
+ 504
38846
+ ].includes(handledError.code);
38847
+ if (isProxyOrNetworkError) {
38848
+ const isProxyRequest = handledError.extra?.isProxyRequest === true;
38849
+ const errorType = 599 === handledError.code || isProxyRequest ? "代理错误" : "网络错误";
38850
+ const message = `图文发布失败,${errorType}:${handledError.message}${task.debug ? ` ${http.proxyInfo}` : ""}`;
38851
+ task.logger.error(`[douyinPublish] ${errorType},直接返回: ${message}`, stringifyError(handledError));
38852
+ await updateTaskState?.({
38853
+ state: types_TaskState.FAILED,
38854
+ error: message
38855
+ });
38856
+ return {
38857
+ code: 414,
38858
+ data: "",
38859
+ message
38860
+ };
38861
+ }
38862
+ throw error;
38856
38863
  }
38857
- throw error;
38858
38864
  }
38865
+ if (!publishResult) throw utils_response(414, "发布异常,请稍后重试。", "");
38859
38866
  task.logger.info(`[douyinPublish] decision值: ${JSON.stringify(decision)}, needsVerification(decision): ${needsVerification(decision)}`);
38860
38867
  if (needsVerification(decision)) {
38861
38868
  const details = [
@@ -41002,7 +41009,8 @@ var __webpack_exports__ = {};
41002
41009
  favNum: classic_schemas_number(),
41003
41010
  objectId: classic_schemas_string(),
41004
41011
  postType: classic_schemas_string(),
41005
- postStatus: classic_schemas_number()
41012
+ postStatus: classic_schemas_number(),
41013
+ effectiveTime: classic_schemas_number().optional()
41006
41014
  });
41007
41015
  const FetchArticlesDataSchema = classic_schemas_object({
41008
41016
  articleCell: classic_schemas_array(schemas_union([
@@ -41338,6 +41346,9 @@ var __webpack_exports__ = {};
41338
41346
  objectId: item.exportId || item.objectId || "",
41339
41347
  postType: forcePostType,
41340
41348
  postStatus: item.status || item.post_status || 0,
41349
+ ...item.effectiveTime ? {
41350
+ effectiveTime: item.effectiveTime
41351
+ } : {},
41341
41352
  ...showOriginalData ? {
41342
41353
  originalData: item
41343
41354
  } : {}
@@ -50746,5 +50757,4 @@ if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_targe
50746
50757
  value: true
50747
50758
  });
50748
50759
 
50749
- //# sourceMappingURL=bundle.js.map
50750
- //# debugId=02f852b8-8ea2-52b0-ae8a-9884ff70f64a
50760
+ //# sourceMappingURL=bundle.js.map