@realvare/based 2.7.70 → 2.7.71

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.
@@ -56,6 +56,7 @@ const assertColor = async (color) => {
56
56
  let assertedColor;
57
57
  if (typeof color === 'number') {
58
58
  assertedColor = color > 0 ? color : 0xffffffff + Number(color) + 1;
59
+ return assertedColor;
59
60
  }
60
61
  else {
61
62
  let hex = color.trim().replace('#', '');
@@ -245,41 +246,35 @@ const generateWAMessageContent = async (message, options) => {
245
246
  var _p, _q;
246
247
 
247
248
  // Cross-platform externalAdReply thumbnail handling
248
- if (message.contextInfo?.externalAdReply) {
249
- const externalAdReply = message.contextInfo.externalAdReply;
250
-
251
- // If thumbnailUrl is provided but no thumbnail binary data, try to fetch and convert for all platforms
252
- if (externalAdReply.thumbnailUrl && !externalAdReply.thumbnail) {
249
+ const fixupExternalAdReplyThumb = async (externalAdReply) => {
250
+ const thumbUrl = externalAdReply.originalImageUrl || externalAdReply.thumbnailUrl;
251
+ const currentThumb = externalAdReply.thumbnail;
252
+ const currentThumbLen = currentThumb && typeof currentThumb.length === 'number' ? currentThumb.length : 0;
253
+ if (thumbUrl && (!currentThumb || currentThumbLen < 2000)) {
253
254
  try {
254
- // Attempt to download the thumbnail image for cross-platform compatibility
255
- const axiosResponse = await axios_1.default.get(externalAdReply.thumbnailUrl, {
256
- responseType: 'arraybuffer',
257
- timeout: 5000,
255
+ const stream = await (0, messages_media_1.getHttpStream)(thumbUrl, {
256
+ timeout: 8000,
258
257
  headers: {
259
258
  'User-Agent': 'WhatsApp/2.23.20.15 iOS/16.0 Device/iPhone'
260
259
  }
261
260
  });
262
-
263
- if (axiosResponse.status === 200) {
264
- externalAdReply.thumbnail = Buffer.from(axiosResponse.data);
265
- // Clear thumbnailUrl since we now have binary data
266
- delete externalAdReply.thumbnailUrl;
267
- options.logger?.debug('Successfully downloaded externalAdReply thumbnail for cross-platform compatibility');
268
- }
269
- } catch (error) {
270
- // If thumbnail download fails, keep thumbnailUrl as fallback
271
- options.logger?.warn('Failed to download externalAdReply thumbnail for cross-platform compatibility:', error.message);
261
+ const { buffer } = await (0, messages_media_1.extractImageThumb)(stream, 512, 80);
262
+ externalAdReply.thumbnail = buffer;
263
+ }
264
+ catch (error) {
265
+ options.logger?.warn('Failed to generate externalAdReply thumbnail for cross-platform compatibility:', error.message);
272
266
  }
273
267
  }
274
-
275
- // Ensure renderLargerThumbnail is set for better display across platforms
276
268
  if (externalAdReply.renderLargerThumbnail === undefined) {
277
- externalAdReply.renderLargerThumbnail = false;
278
- options.logger?.debug('Set renderLargerThumbnail=false for improved cross-platform display');
269
+ externalAdReply.renderLargerThumbnail = true;
279
270
  }
280
-
281
- // Update the contextInfo with modified externalAdReply
282
- message.contextInfo.externalAdReply = externalAdReply;
271
+ return externalAdReply;
272
+ };
273
+ if (message.contextInfo?.externalAdReply) {
274
+ message.contextInfo.externalAdReply = await fixupExternalAdReplyThumb(message.contextInfo.externalAdReply);
275
+ }
276
+ if (message.externalAdReply) {
277
+ message.externalAdReply = await fixupExternalAdReplyThumb(message.externalAdReply);
283
278
  }
284
279
 
285
280
  let m = {};
@@ -447,13 +442,28 @@ const generateWAMessageContent = async (message, options) => {
447
442
  m.keepInChatMessage.timestampMs = Date.now();
448
443
  }
449
444
  else if ('call' in message) {
450
- m = {
451
- scheduledCallCreationMessage: {
452
- scheduledTimestampMs: (_a = message.call.time) !== null && _a !== void 0 ? _a : Date.now(),
453
- callType: (_b = message.call.type) !== null && _b !== void 0 ? _b : 1,
454
- title: message.call.title
455
- }
456
- };
445
+ const call = message.call;
446
+ if (call && typeof call === 'object' && (
447
+ 'callKey' in call
448
+ || 'conversionSource' in call
449
+ || 'conversionData' in call
450
+ || 'conversionDelaySeconds' in call
451
+ || 'ctwaSignals' in call
452
+ || 'ctwaPayload' in call
453
+ || 'nativeFlowCallButtonPayload' in call
454
+ || 'deeplinkPayload' in call
455
+ )) {
456
+ m.call = WAProto_1.proto.Message.Call.fromObject(call);
457
+ }
458
+ else {
459
+ m = {
460
+ scheduledCallCreationMessage: {
461
+ scheduledTimestampMs: (_a = call === null || call === void 0 ? void 0 : call.time) !== null && _a !== void 0 ? _a : Date.now(),
462
+ callType: (_b = call === null || call === void 0 ? void 0 : call.type) !== null && _b !== void 0 ? _b : 1,
463
+ title: call === null || call === void 0 ? void 0 : call.title
464
+ }
465
+ };
466
+ }
457
467
  }
458
468
  else if ('paymentInvite' in message) {
459
469
  m.paymentInviteMessage = {
@@ -619,12 +629,12 @@ const generateWAMessageContent = async (message, options) => {
619
629
  };
620
630
  }
621
631
  else if ('richResponse' in message) {
622
- m.richResponseMessage = {
632
+ m.richResponseMessage = WAProto_1.proto.AIRichResponseMessage.fromObject({
623
633
  messageType: message.richResponse.messageType !== undefined ? message.richResponse.messageType : 1, // AI_RICH_RESPONSE_TYPE_STANDARD
624
634
  submessages: message.richResponse.submessages || [],
625
635
  unifiedResponse: message.richResponse.unifiedResponse,
626
636
  contextInfo: message.richResponse.contextInfo
627
- };
637
+ });
628
638
  }
629
639
  else if ('eventResponse' in message && !!message.eventResponse) {
630
640
  m.eventResponseMessage = {
@@ -813,7 +823,7 @@ const generateWAMessageContent = async (message, options) => {
813
823
  else if ('requestPayment' in message) {
814
824
  const reqPayment = message.requestPayment;
815
825
  const sticker = reqPayment.sticker ?
816
- await (0, exports.prepareWAMessageMedia)({ sticker: reqPayment.sticker, ...options }, options)
826
+ await (0, exports.prepareWAMessageMedia)({ sticker: reqPayment.sticker }, options)
817
827
  : null;
818
828
  let notes = {};
819
829
  if (reqPayment.sticker) {
@@ -863,9 +873,6 @@ const generateWAMessageContent = async (message, options) => {
863
873
  else if ('requestPhoneNumber' in message) {
864
874
  m.requestPhoneNumberMessage = {};
865
875
  }
866
- else if ('call' in message) {
867
- m.callMessage = Types_1.WAProto.Message.CallMessage.fromObject(message.call);
868
- }
869
876
  else if ('newsletterMessage' in message) {
870
877
  m.newsletterMessage = Types_1.WAProto.Message.NewsletterMessage.fromObject(message.newsletterMessage);
871
878
  }
@@ -960,6 +967,46 @@ const generateWAMessageContent = async (message, options) => {
960
967
  background: message.payment.background
961
968
  });
962
969
  }
970
+ else if ('comment' in message) {
971
+ m.commentMessage = {
972
+ message: message.comment.message,
973
+ targetMessageKey: message.comment.targetMessageKey
974
+ };
975
+ }
976
+ else if ('question' in message) {
977
+ m.questionMessage = {
978
+ text: message.question.text,
979
+ contextInfo: message.question.contextInfo
980
+ };
981
+ }
982
+ else if ('questionResponse' in message) {
983
+ m.questionResponseMessage = {
984
+ key: message.questionResponse.key,
985
+ text: message.questionResponse.text
986
+ };
987
+ }
988
+ else if ('statusQuestionAnswer' in message) {
989
+ m.statusQuestionAnswerMessage = {
990
+ key: message.statusQuestionAnswer.key,
991
+ text: message.statusQuestionAnswer.text
992
+ };
993
+ }
994
+ else if ('statusQuoted' in message) {
995
+ m.statusQuotedMessage = {
996
+ type: message.statusQuoted.type,
997
+ text: message.statusQuoted.text,
998
+ thumbnail: message.statusQuoted.thumbnail,
999
+ jid: message.statusQuoted.jid,
1000
+ originalStatusId: message.statusQuoted.originalStatusId
1001
+ };
1002
+ }
1003
+ else if ('statusStickerInteraction' in message) {
1004
+ m.statusStickerInteractionMessage = {
1005
+ key: message.statusStickerInteraction.key,
1006
+ stickerKey: message.statusStickerInteraction.stickerKey,
1007
+ type: message.statusStickerInteraction.type
1008
+ };
1009
+ }
963
1010
  else if ('album' in message) {
964
1011
  const imageMessages = message.album.filter(item => 'image' in item);
965
1012
  const videoMessages = message.album.filter(item => 'video' in item);
@@ -1056,7 +1103,7 @@ const generateWAMessageContent = async (message, options) => {
1056
1103
  interactiveMessage.header = {
1057
1104
  title: message.title,
1058
1105
  subtitle: message.subtitle,
1059
- hasMediaAttachment: (_j = message === null || message === void 0 ? void 0 : message.media) !== null && _j !== void 0 ? _j : false,
1106
+ hasMediaAttachment: !!(message === null || message === void 0 ? void 0 : message.media),
1060
1107
  };
1061
1108
  Object.assign(interactiveMessage.header, m);
1062
1109
  }
@@ -1077,11 +1124,35 @@ const generateWAMessageContent = async (message, options) => {
1077
1124
  }
1078
1125
  }
1079
1126
  if ('title' in message && !!message.title) {
1080
- interactiveMessage.header = {
1127
+ const headerData = {
1081
1128
  title: message.title,
1082
1129
  subtitle: message.subtitle,
1083
- hasMediaAttachment: (_k = message === null || message === void 0 ? void 0 : message.media) !== null && _k !== void 0 ? _k : false,
1130
+ hasMediaAttachment: !!message.media,
1084
1131
  };
1132
+
1133
+ // Process media attachments for interactive buttons
1134
+ if (message.media) {
1135
+ if (message.media.image) {
1136
+ const mediaMessage = await (0, exports.prepareWAMessageMedia)({ image: message.media.image }, options);
1137
+ if (mediaMessage.imageMessage) {
1138
+ headerData.imageMessage = mediaMessage.imageMessage;
1139
+ }
1140
+ }
1141
+ else if (message.media.video) {
1142
+ const mediaMessage = await (0, exports.prepareWAMessageMedia)({ video: message.media.video }, options);
1143
+ if (mediaMessage.videoMessage) {
1144
+ headerData.videoMessage = mediaMessage.videoMessage;
1145
+ }
1146
+ }
1147
+ else if (message.media.document) {
1148
+ const mediaMessage = await (0, exports.prepareWAMessageMedia)({ document: message.media.document }, options);
1149
+ if (mediaMessage.documentMessage) {
1150
+ headerData.documentMessage = mediaMessage.documentMessage;
1151
+ }
1152
+ }
1153
+ }
1154
+
1155
+ interactiveMessage.header = headerData;
1085
1156
  // Support for ProductMessage in header
1086
1157
  if (message.headerProduct) {
1087
1158
  const productMedia = await (0, exports.prepareWAMessageMedia)({ image: message.headerProduct.productImage }, options);
@@ -1123,7 +1194,7 @@ const generateWAMessageContent = async (message, options) => {
1123
1194
  interactiveMessage.header = {
1124
1195
  title: message.title,
1125
1196
  subtitle: message.subtitle,
1126
- hasMediaAttachment: (_l = message === null || message === void 0 ? void 0 : message.media) !== null && _l !== void 0 ? _l : false,
1197
+ hasMediaAttachment: !!(message === null || message === void 0 ? void 0 : message.media),
1127
1198
  };
1128
1199
  Object.assign(interactiveMessage.header, m);
1129
1200
  }
@@ -1136,7 +1207,7 @@ const generateWAMessageContent = async (message, options) => {
1136
1207
  interactiveMessage.header = {
1137
1208
  title: message.title,
1138
1209
  subtitle: message.subtitle,
1139
- hasMediaAttachment: (_m = message === null || message === void 0 ? void 0 : message.media) !== null && _m !== void 0 ? _m : false,
1210
+ hasMediaAttachment: !!(message === null || message === void 0 ? void 0 : message.media),
1140
1211
  };
1141
1212
  Object.assign(interactiveMessage.header, m);
1142
1213
  }
@@ -1719,4 +1790,4 @@ const clearCache = () => {
1719
1790
  // Silently fail if cache manager is not available
1720
1791
  }
1721
1792
  };
1722
- exports.clearCache = clearCache;
1793
+ exports.clearCache = clearCache;
@@ -54,7 +54,11 @@ exports.getBinaryNodeChildUInt = getBinaryNodeChildUInt;
54
54
  const assertNodeErrorFree = (node) => {
55
55
  const errNode = (0, exports.getBinaryNodeChild)(node, 'error');
56
56
  if (errNode) {
57
- throw new boom_1.Boom(errNode.attrs.text || 'Unknown error', { data: +errNode.attrs.code });
57
+ const code = +errNode.attrs.code;
58
+ throw new boom_1.Boom(errNode.attrs.text || 'Unknown error', {
59
+ data: code,
60
+ statusCode: code || undefined
61
+ });
58
62
  }
59
63
  };
60
64
  exports.assertNodeErrorFree = assertNodeErrorFree;
@@ -34,4 +34,5 @@ export declare const isJidStatusBroadcast: (jid: string) => jid is "status@broad
34
34
  export declare const isJidBot: (jid: string | undefined) => boolean | "" | undefined;
35
35
  export declare const jidNormalizedUser: (jid: string | undefined) => string;
36
36
  export declare const lidToJid: (jid: string) => string;
37
+ export declare const resolveJid: (jid: string | undefined) => string | undefined;
37
38
  export declare const getBotJid: (jid: string) => string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateAndConvertLidToJid = exports.validateAndCleanJid = exports.lidToJidEnhanced = exports.lidToJid = exports.getBotJid = exports.jidNormalizedUser = exports.isJidBot = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidNewsletter = exports.isJidBroadcast = exports.isLid = exports.assertLid = exports.isJidUser = exports.isJidMetaAi = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.META_AI_JID = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
3
+ exports.validateAndConvertLidToJid = exports.validateAndCleanJid = exports.lidToJidEnhanced = exports.resolveJid = exports.lidToJid = exports.getBotJid = exports.jidNormalizedUser = exports.isJidBot = exports.isJidStatusBroadcast = exports.isJidGroup = exports.isJidNewsletter = exports.isJidBroadcast = exports.isLid = exports.assertLid = exports.isJidUser = exports.isJidMetaAi = exports.areJidsSameUser = exports.jidDecode = exports.jidEncode = exports.META_AI_JID = exports.STORIES_JID = exports.PSA_WID = exports.SERVER_JID = exports.OFFICIAL_BIZ_JID = exports.S_WHATSAPP_NET = void 0;
4
4
  exports.S_WHATSAPP_NET = '@s.whatsapp.net';
5
5
  exports.OFFICIAL_BIZ_JID = '16505361212@c.us';
6
6
  exports.SERVER_JID = 'server@c.us';
@@ -161,6 +161,14 @@ const lidToJid = (jid) => {
161
161
  };
162
162
  exports.lidToJid = lidToJid;
163
163
 
164
+ const resolveJid = (jid) => {
165
+ if (typeof jid === 'string' && jid.endsWith('@lid')) {
166
+ return lidToJid(jid);
167
+ }
168
+ return jid;
169
+ };
170
+ exports.resolveJid = resolveJid;
171
+
164
172
  /**
165
173
  * Enhanced LID to JID conversion with phone number validation
166
174
  * Validates that the phone number has a valid international format
package/lib/index.js CHANGED
@@ -1,12 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  const chalk = require("chalk");
4
- const gradient = require("gradient-string");
5
4
 
6
- // Only show banner if not in test environment and not explicitly disabled
7
5
  if (process.env.NODE_ENV !== 'test' && process.env.SUPPRESS_BANNER !== 'true') {
8
6
  const samakavare = 'baileys by sam aka vare - https://github.com/realvare • https://www.npmjs.com/~realvare';
9
- console.log('\n' + gradient(['#520f8dff', '#431888ff'])(samakavare) + '\n');
7
+ console.log('\n' + chalk.hex('#6349d8ff')(samakavare) + '\n');
10
8
  }
11
9
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
10
  if (k2 === undefined) k2 = k;
@@ -52,4 +50,4 @@ __exportStar(require("./WABinary"), exports);
52
50
  __exportStar(require("./WAM"), exports);
53
51
  __exportStar(require("./WAUSync"), exports);
54
52
 
55
- exports.default = Socket_1.default;
53
+ exports.default = Socket_1.default;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@realvare/based",
3
- "version": "2.7.70",
4
- "description": "whatsapp api by sam",
3
+ "version": "2.7.71",
4
+ "description": "Whatsapp api by Sam",
5
5
  "keywords": [
6
6
  "baileys",
7
7
  "whatsapp",
@@ -10,6 +10,8 @@
10
10
  "whatsapp-bot",
11
11
  "automation",
12
12
  "multi-device",
13
+ "samakavare",
14
+ "realvare",
13
15
  "based",
14
16
  "varebot"
15
17
  ],
@@ -50,7 +52,6 @@
50
52
  "cache-manager": "^7.2.5",
51
53
  "chalk": "^4.1.2",
52
54
  "cheerio": "^1.1.2",
53
- "gradient-string": "^2.0.2",
54
55
  "jimp": "^0.22.10",
55
56
  "libphonenumber-js": "^1.12.31",
56
57
  "libsignal": "github:realvare/libsignal",