@lazyneoaz/metachat 6.0.6 → 6.0.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.
package/dist/index.cjs CHANGED
@@ -90865,6 +90865,7 @@ function pinMessage_default(defaultFuncs, api, ctx) {
90865
90865
  }
90866
90866
 
90867
90867
  // src/deltas/apis/mqtt/sendMessageMqtt.ts
90868
+ var DEFAULT_RETRY_DELAYS_MS = [900, 1600, 2400, 3500, 5e3, 7e3];
90868
90869
  function preUploadedId(item) {
90869
90870
  if (typeof item === "number" && Number.isFinite(item)) return String(item);
90870
90871
  if (typeof item === "string" && /^\d{6,}$/.test(item.trim())) return item.trim();
@@ -91094,6 +91095,7 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91094
91095
  let threadIDFromAck = null;
91095
91096
  let failure = null;
91096
91097
  let serverError = null;
91098
+ let softFailure = null;
91097
91099
  const steps = parsed.payload?.step;
91098
91100
  const visit = (node) => {
91099
91101
  if (!Array.isArray(node)) return;
@@ -91105,12 +91107,10 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91105
91107
  threadIDFromAck = String(node[2][1]);
91106
91108
  }
91107
91109
  if (node[1] === "markOptimisticMessageFailed") {
91108
- const detail = typeof node[3] === "string" ? node[3] : "Message failed on server.";
91109
- failure = { error: detail, errorDescription: "Message failed on server." };
91110
+ softFailure = typeof node[3] === "string" ? node[3] : "Message failed on server.";
91110
91111
  }
91111
91112
  if (node[1] === "updateSubscriptErrorMessage" || node[1] === "fatalError") {
91112
- const detail = typeof node[3] === "string" ? node[3] : typeof node[4] === "string" ? node[4] : "Couldn't send.";
91113
- serverError = detail;
91113
+ softFailure = typeof node[3] === "string" ? node[3] : typeof node[4] === "string" ? node[4] : "Couldn't send.";
91114
91114
  }
91115
91115
  }
91116
91116
  for (const child of node) visit(child);
@@ -91120,7 +91120,8 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91120
91120
  messageID: resolvedMessageID,
91121
91121
  threadID: threadIDFromAck,
91122
91122
  failure,
91123
- serverError
91123
+ serverError,
91124
+ softFailure
91124
91125
  });
91125
91126
  };
91126
91127
  if (mqttClient && typeof mqttClient.on === "function") {
@@ -91131,14 +91132,21 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91131
91132
  });
91132
91133
  timer = setTimeout(() => settle2({ timeout: true }), 15e3);
91133
91134
  });
91135
+ const retryDelays = (() => {
91136
+ const override = ctx.globalOptions && ctx.globalOptions.mqttSendRetryDelaysMs;
91137
+ return Array.isArray(override) && override.length ? override : DEFAULT_RETRY_DELAYS_MS;
91138
+ })();
91134
91139
  let result = null;
91135
91140
  let lastOtid = "";
91136
- for (let attempt = 0; attempt < 3; attempt++) {
91141
+ for (let attempt = 0; attempt <= retryDelays.length; attempt++) {
91137
91142
  const built = buildForm();
91138
91143
  lastOtid = built.otid;
91139
91144
  result = await publishAndWait(built.form, built.request_id);
91140
- if (!result.failure && !result.serverError) break;
91141
- if (attempt < 2) await sleep(700 + attempt * 900 + Math.floor(Math.random() * 400));
91145
+ if (!result.failure && !result.serverError && !result.softFailure) break;
91146
+ if ((result.failure || result.serverError) && attempt >= 2) break;
91147
+ if (attempt < retryDelays.length) {
91148
+ await sleep(retryDelays[attempt] + Math.floor(Math.random() * 400));
91149
+ }
91142
91150
  }
91143
91151
  if (result.failure || result.serverError) {
91144
91152
  const err = result.failure || { error: result.serverError };
@@ -91151,6 +91159,21 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91151
91159
  finish(err);
91152
91160
  return done();
91153
91161
  }
91162
+ if (result.softFailure) {
91163
+ warn(
91164
+ "sendMessageMqtt [MQTT]",
91165
+ `Facebook rejected the message (${result.softFailure}); thread ${threadID}. Retried ${retryDelays.length} times without success; continuing without failing the bot.`
91166
+ );
91167
+ finish(null, {
91168
+ threadID: result.threadID || threadID.toString(),
91169
+ messageID: result.messageID || null,
91170
+ timestamp,
91171
+ type: replyToMessage ? "message_reply" : "message",
91172
+ error: result.softFailure,
91173
+ success: false
91174
+ });
91175
+ return done();
91176
+ }
91154
91177
  finish(null, {
91155
91178
  threadID: result.threadID || threadID.toString(),
91156
91179
  messageID: result.messageID || `mid.${lastOtid}`,
package/dist/index.mjs CHANGED
@@ -90833,6 +90833,7 @@ function pinMessage_default(defaultFuncs, api, ctx) {
90833
90833
  }
90834
90834
 
90835
90835
  // src/deltas/apis/mqtt/sendMessageMqtt.ts
90836
+ var DEFAULT_RETRY_DELAYS_MS = [900, 1600, 2400, 3500, 5e3, 7e3];
90836
90837
  function preUploadedId(item) {
90837
90838
  if (typeof item === "number" && Number.isFinite(item)) return String(item);
90838
90839
  if (typeof item === "string" && /^\d{6,}$/.test(item.trim())) return item.trim();
@@ -91062,6 +91063,7 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91062
91063
  let threadIDFromAck = null;
91063
91064
  let failure = null;
91064
91065
  let serverError = null;
91066
+ let softFailure = null;
91065
91067
  const steps = parsed.payload?.step;
91066
91068
  const visit = (node) => {
91067
91069
  if (!Array.isArray(node)) return;
@@ -91073,12 +91075,10 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91073
91075
  threadIDFromAck = String(node[2][1]);
91074
91076
  }
91075
91077
  if (node[1] === "markOptimisticMessageFailed") {
91076
- const detail = typeof node[3] === "string" ? node[3] : "Message failed on server.";
91077
- failure = { error: detail, errorDescription: "Message failed on server." };
91078
+ softFailure = typeof node[3] === "string" ? node[3] : "Message failed on server.";
91078
91079
  }
91079
91080
  if (node[1] === "updateSubscriptErrorMessage" || node[1] === "fatalError") {
91080
- const detail = typeof node[3] === "string" ? node[3] : typeof node[4] === "string" ? node[4] : "Couldn't send.";
91081
- serverError = detail;
91081
+ softFailure = typeof node[3] === "string" ? node[3] : typeof node[4] === "string" ? node[4] : "Couldn't send.";
91082
91082
  }
91083
91083
  }
91084
91084
  for (const child of node) visit(child);
@@ -91088,7 +91088,8 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91088
91088
  messageID: resolvedMessageID,
91089
91089
  threadID: threadIDFromAck,
91090
91090
  failure,
91091
- serverError
91091
+ serverError,
91092
+ softFailure
91092
91093
  });
91093
91094
  };
91094
91095
  if (mqttClient && typeof mqttClient.on === "function") {
@@ -91099,14 +91100,21 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91099
91100
  });
91100
91101
  timer = setTimeout(() => settle2({ timeout: true }), 15e3);
91101
91102
  });
91103
+ const retryDelays = (() => {
91104
+ const override = ctx.globalOptions && ctx.globalOptions.mqttSendRetryDelaysMs;
91105
+ return Array.isArray(override) && override.length ? override : DEFAULT_RETRY_DELAYS_MS;
91106
+ })();
91102
91107
  let result = null;
91103
91108
  let lastOtid = "";
91104
- for (let attempt = 0; attempt < 3; attempt++) {
91109
+ for (let attempt = 0; attempt <= retryDelays.length; attempt++) {
91105
91110
  const built = buildForm();
91106
91111
  lastOtid = built.otid;
91107
91112
  result = await publishAndWait(built.form, built.request_id);
91108
- if (!result.failure && !result.serverError) break;
91109
- if (attempt < 2) await sleep(700 + attempt * 900 + Math.floor(Math.random() * 400));
91113
+ if (!result.failure && !result.serverError && !result.softFailure) break;
91114
+ if ((result.failure || result.serverError) && attempt >= 2) break;
91115
+ if (attempt < retryDelays.length) {
91116
+ await sleep(retryDelays[attempt] + Math.floor(Math.random() * 400));
91117
+ }
91110
91118
  }
91111
91119
  if (result.failure || result.serverError) {
91112
91120
  const err = result.failure || { error: result.serverError };
@@ -91119,6 +91127,21 @@ var sendMessageMqtt_default = (defaultFuncs, api, ctx) => {
91119
91127
  finish(err);
91120
91128
  return done();
91121
91129
  }
91130
+ if (result.softFailure) {
91131
+ warn(
91132
+ "sendMessageMqtt [MQTT]",
91133
+ `Facebook rejected the message (${result.softFailure}); thread ${threadID}. Retried ${retryDelays.length} times without success; continuing without failing the bot.`
91134
+ );
91135
+ finish(null, {
91136
+ threadID: result.threadID || threadID.toString(),
91137
+ messageID: result.messageID || null,
91138
+ timestamp,
91139
+ type: replyToMessage ? "message_reply" : "message",
91140
+ error: result.softFailure,
91141
+ success: false
91142
+ });
91143
+ return done();
91144
+ }
91122
91145
  finish(null, {
91123
91146
  threadID: result.threadID || threadID.toString(),
91124
91147
  messageID: result.messageID || `mid.${lastOtid}`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lazyneoaz/metachat",
3
- "version": "6.0.6",
3
+ "version": "6.0.7",
4
4
  "description": "A modern TypeScript Facebook Chat API client for building reliable Messenger bots, with built-in anti-detection protection, automatic cookie refresh, music search, and AI theme support.",
5
5
  "license": "MIT",
6
6
  "author": {