@mamans2973/maman 0.0.0-stage → 1.0.0

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.
Files changed (164) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1275 -2
  3. package/WAProto/index.d.ts +37016 -0
  4. package/WAProto/index.js +2972 -0
  5. package/WASignalGroup/GroupProtocol.js +1697 -0
  6. package/WASignalGroup/ciphertext_message.js +16 -0
  7. package/WASignalGroup/group_cipher.js +120 -0
  8. package/WASignalGroup/group_session_builder.js +46 -0
  9. package/WASignalGroup/index.js +5 -0
  10. package/WASignalGroup/keyhelper.js +21 -0
  11. package/WASignalGroup/protobufs.js +3 -0
  12. package/WASignalGroup/queue_job.js +69 -0
  13. package/WASignalGroup/sender_chain_key.js +50 -0
  14. package/WASignalGroup/sender_key_distribution_message.js +78 -0
  15. package/WASignalGroup/sender_key_message.js +92 -0
  16. package/WASignalGroup/sender_key_name.js +70 -0
  17. package/WASignalGroup/sender_key_record.js +56 -0
  18. package/WASignalGroup/sender_key_state.js +129 -0
  19. package/WASignalGroup/sender_message_key.js +39 -0
  20. package/engine-requirements.js +1 -0
  21. package/lib/Defaults/baileys-version.json +3 -0
  22. package/lib/Defaults/index.d.ts +51 -0
  23. package/lib/Defaults/index.js +10 -0
  24. package/lib/Signal/libsignal.d.ts +3 -0
  25. package/lib/Signal/libsignal.js +9 -0
  26. package/lib/Socket/Client/index.d.ts +2 -0
  27. package/lib/Socket/Client/index.js +2 -0
  28. package/lib/Socket/Client/types.d.ts +15 -0
  29. package/lib/Socket/Client/types.js +1 -0
  30. package/lib/Socket/Client/websocket.d.ts +12 -0
  31. package/lib/Socket/Client/websocket.js +4 -0
  32. package/lib/Socket/business.d.ts +146 -0
  33. package/lib/Socket/business.js +8 -0
  34. package/lib/Socket/chats.d.ts +85 -0
  35. package/lib/Socket/chats.js +29 -0
  36. package/lib/Socket/groups.d.ts +124 -0
  37. package/lib/Socket/groups.js +14 -0
  38. package/lib/Socket/index.d.ts +146 -0
  39. package/lib/Socket/index.js +1 -0
  40. package/lib/Socket/messages-recv.d.ts +135 -0
  41. package/lib/Socket/messages-recv.js +39 -0
  42. package/lib/Socket/messages-send.d.ts +130 -0
  43. package/lib/Socket/messages-send.js +26 -0
  44. package/lib/Socket/socket.d.ts +42 -0
  45. package/lib/Socket/socket.js +25 -0
  46. package/lib/Socket/usync.d.ts +36 -0
  47. package/lib/Socket/usync.js +3 -0
  48. package/lib/Types/Auth.d.ts +103 -0
  49. package/lib/Types/Auth.js +1 -0
  50. package/lib/Types/Call.d.ts +13 -0
  51. package/lib/Types/Call.js +1 -0
  52. package/lib/Types/Chat.d.ts +112 -0
  53. package/lib/Types/Chat.js +1 -0
  54. package/lib/Types/Contact.d.ts +19 -0
  55. package/lib/Types/Contact.js +1 -0
  56. package/lib/Types/Events.d.ts +172 -0
  57. package/lib/Types/Events.js +1 -0
  58. package/lib/Types/GroupMetadata.d.ts +58 -0
  59. package/lib/Types/GroupMetadata.js +1 -0
  60. package/lib/Types/Label.d.ts +46 -0
  61. package/lib/Types/Label.js +3 -0
  62. package/lib/Types/LabelAssociation.d.ts +29 -0
  63. package/lib/Types/LabelAssociation.js +1 -0
  64. package/lib/Types/Message.d.ts +267 -0
  65. package/lib/Types/Message.js +1 -0
  66. package/lib/Types/Product.d.ts +78 -0
  67. package/lib/Types/Product.js +1 -0
  68. package/lib/Types/Signal.d.ts +57 -0
  69. package/lib/Types/Signal.js +1 -0
  70. package/lib/Types/Socket.d.ts +121 -0
  71. package/lib/Types/Socket.js +1 -0
  72. package/lib/Types/State.d.ts +27 -0
  73. package/lib/Types/State.js +1 -0
  74. package/lib/Types/USync.d.ts +25 -0
  75. package/lib/Types/USync.js +1 -0
  76. package/lib/Types/index.d.ts +63 -0
  77. package/lib/Types/index.js +4 -0
  78. package/lib/Utils/auth-utils.d.ts +18 -0
  79. package/lib/Utils/auth-utils.js +8 -0
  80. package/lib/Utils/baileys-event-stream.d.ts +16 -0
  81. package/lib/Utils/baileys-event-stream.js +3 -0
  82. package/lib/Utils/business.d.ts +22 -0
  83. package/lib/Utils/business.js +14 -0
  84. package/lib/Utils/chat-utils.d.ts +70 -0
  85. package/lib/Utils/chat-utils.js +36 -0
  86. package/lib/Utils/crypto.d.ts +40 -0
  87. package/lib/Utils/crypto.js +11 -0
  88. package/lib/Utils/decode-wa-message.d.ts +36 -0
  89. package/lib/Utils/decode-wa-message.js +9 -0
  90. package/lib/Utils/event-buffer.d.ts +35 -0
  91. package/lib/Utils/event-buffer.js +19 -0
  92. package/lib/Utils/generics.d.ts +90 -0
  93. package/lib/Utils/generics.js +22 -0
  94. package/lib/Utils/history.d.ts +19 -0
  95. package/lib/Utils/history.js +7 -0
  96. package/lib/Utils/index.d.ts +17 -0
  97. package/lib/Utils/index.js +3 -0
  98. package/lib/Utils/link-preview.d.ts +21 -0
  99. package/lib/Utils/link-preview.js +5 -0
  100. package/lib/Utils/logger.d.ts +11 -0
  101. package/lib/Utils/logger.js +1 -0
  102. package/lib/Utils/lt-hash.d.ts +12 -0
  103. package/lib/Utils/lt-hash.js +3 -0
  104. package/lib/Utils/make-mutex.d.ts +7 -0
  105. package/lib/Utils/make-mutex.js +1 -0
  106. package/lib/Utils/messages-media.d.ts +103 -0
  107. package/lib/Utils/messages-media.js +35 -0
  108. package/lib/Utils/messages.d.ts +75 -0
  109. package/lib/Utils/messages.js +43 -0
  110. package/lib/Utils/noise-handler.d.ts +19 -0
  111. package/lib/Utils/noise-handler.js +6 -0
  112. package/lib/Utils/process-message.d.ts +41 -0
  113. package/lib/Utils/process-message.js +19 -0
  114. package/lib/Utils/signal.d.ts +33 -0
  115. package/lib/Utils/signal.js +10 -0
  116. package/lib/Utils/use-multi-file-auth-state.d.ts +12 -0
  117. package/lib/Utils/use-multi-file-auth-state.js +5 -0
  118. package/lib/Utils/validate-connection.d.ts +10 -0
  119. package/lib/Utils/validate-connection.js +10 -0
  120. package/lib/WABinary/constants.d.ts +27 -0
  121. package/lib/WABinary/constants.js +6 -0
  122. package/lib/WABinary/decode.d.ts +6 -0
  123. package/lib/WABinary/decode.js +9 -0
  124. package/lib/WABinary/encode.d.ts +2 -0
  125. package/lib/WABinary/encode.js +9 -0
  126. package/lib/WABinary/generic-utils.d.ts +14 -0
  127. package/lib/WABinary/generic-utils.js +7 -0
  128. package/lib/WABinary/index.d.ts +5 -0
  129. package/lib/WABinary/index.js +2 -0
  130. package/lib/WABinary/jid-utils.d.ts +35 -0
  131. package/lib/WABinary/jid-utils.js +5 -0
  132. package/lib/WABinary/types.d.ts +18 -0
  133. package/lib/WABinary/types.js +1 -0
  134. package/lib/WAM/BinaryInfo.d.ts +8 -0
  135. package/lib/WAM/BinaryInfo.js +1 -0
  136. package/lib/WAM/constants.d.ts +39 -0
  137. package/lib/WAM/constants.js +492 -0
  138. package/lib/WAM/encode.d.ts +2 -0
  139. package/lib/WAM/encode.js +7 -0
  140. package/lib/WAM/index.d.ts +3 -0
  141. package/lib/WAM/index.js +2 -0
  142. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +9 -0
  143. package/lib/WAUSync/Protocols/USyncContactProtocol.js +2 -0
  144. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +22 -0
  145. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +3 -0
  146. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +12 -0
  147. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +2 -0
  148. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +12 -0
  149. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +2 -0
  150. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.d.ts +25 -0
  151. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +4 -0
  152. package/lib/WAUSync/Protocols/UsyncLIDProtocol.d.ts +8 -0
  153. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +1 -0
  154. package/lib/WAUSync/Protocols/index.d.ts +4 -0
  155. package/lib/WAUSync/Protocols/index.js +2 -0
  156. package/lib/WAUSync/USyncQuery.d.ts +28 -0
  157. package/lib/WAUSync/USyncQuery.js +4 -0
  158. package/lib/WAUSync/USyncUser.d.ts +12 -0
  159. package/lib/WAUSync/USyncUser.js +1 -0
  160. package/lib/WAUSync/index.d.ts +3 -0
  161. package/lib/WAUSync/index.js +2 -0
  162. package/lib/index.d.ts +11 -0
  163. package/lib/index.js +3 -0
  164. package/package.json +94 -4
@@ -0,0 +1,75 @@
1
+ import { type Transform } from 'stream';
2
+ import { proto } from '../../WAProto';
3
+ import { AnyMediaMessageContent, AnyMessageContent, MediaGenerationOptions, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, MessageUserReceipt, WAMessage, WAMessageContent, WAProto } from '../Types';
4
+ import { ILogger } from './logger';
5
+ import { MediaDownloadOptions } from './messages-media';
6
+ /**
7
+ * Uses a regex to test whether the string contains a URL, and returns the URL if it does.
8
+ * @param text eg. hello https://google.com
9
+ * @returns the URL, eg. https://google.com
10
+ */
11
+ export declare const extractUrlFromText: (text: string) => string | undefined;
12
+ export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"]) => Promise<import("../Types").WAUrlInfo | undefined>;
13
+ export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MediaGenerationOptions) => Promise<proto.Message>;
14
+ export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
15
+ /**
16
+ * Generate forwarded message content like WA does
17
+ * @param message the message to forward
18
+ * @param options.forceForward will show the message as forwarded even if it is from you
19
+ */
20
+ export declare const generateForwardMessageContent: (message: WAMessage, forceForward?: boolean) => proto.IMessage;
21
+ export declare const generateWAMessageContent: (message: AnyMessageContent, options: MessageContentGenerationOptions) => Promise<proto.Message>;
22
+ export declare const generateWAMessageFromContent: (jid: string, message: WAMessageContent, options: MessageGenerationOptionsFromContent) => proto.WebMessageInfo;
23
+ export declare const generateWAMessage: (jid: string, content: AnyMessageContent, options: MessageGenerationOptions) => Promise<proto.WebMessageInfo>;
24
+ /** Get the key to access the true type of content */
25
+ export declare const getContentType: (content: WAProto.IMessage | undefined) => keyof proto.IMessage | undefined;
26
+ /**
27
+ * Normalizes ephemeral, view once messages to regular message content
28
+ * Eg. image messages in ephemeral messages, in view once messages etc.
29
+ * @param content
30
+ * @returns
31
+ */
32
+ export declare const normalizeMessageContent: (content: WAMessageContent | null | undefined) => WAMessageContent | undefined;
33
+ /**
34
+ * Extract the true message content from a message
35
+ * Eg. extracts the inner message from a disappearing message/view once message
36
+ */
37
+ export declare const extractMessageContent: (content: WAMessageContent | undefined | null) => WAMessageContent | undefined;
38
+ /**
39
+ * Returns the device predicted by message ID
40
+ */
41
+ export declare const getDevice: (id: string) => "android" | "unknown" | "web" | "ios" | "desktop";
42
+ /** Upserts a receipt in the message */
43
+ export declare const updateMessageWithReceipt: (msg: Pick<WAMessage, "userReceipt">, receipt: MessageUserReceipt) => void;
44
+ /** Update the message with a new reaction */
45
+ export declare const updateMessageWithReaction: (msg: Pick<WAMessage, "reactions">, reaction: proto.IReaction) => void;
46
+ /** Update the message with a new poll update */
47
+ export declare const updateMessageWithPollUpdate: (msg: Pick<WAMessage, "pollUpdates">, update: proto.IPollUpdate) => void;
48
+ type VoteAggregation = {
49
+ name: string;
50
+ voters: string[];
51
+ };
52
+ /**
53
+ * Aggregates all poll updates in a poll.
54
+ * @param msg the poll creation message
55
+ * @param meId your jid
56
+ * @returns A list of options & their voters
57
+ */
58
+ export declare function getAggregateVotesInPollMessage({ message, pollUpdates }: Pick<WAMessage, 'pollUpdates' | 'message'>, meId?: string): VoteAggregation[];
59
+ /** Given a list of message keys, aggregates them by chat & sender. Useful for sending read receipts in bulk */
60
+ export declare const aggregateMessageKeysNotFromMe: (keys: proto.IMessageKey[]) => {
61
+ jid: string;
62
+ participant: string | undefined;
63
+ messageIds: string[];
64
+ }[];
65
+ type DownloadMediaMessageContext = {
66
+ reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
67
+ logger: ILogger;
68
+ };
69
+ /**
70
+ * Downloads the given message. Throws an error if it's not a media message
71
+ */
72
+ export declare const downloadMediaMessage: <Type extends "buffer" | "stream">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx?: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer<ArrayBufferLike> : Transform>;
73
+ /** Checks whether the given message is a media message; if it is returns the inner content */
74
+ export declare const assertMediaContent: (content: proto.IMessage | null | undefined) => proto.Message.IVideoMessage | proto.Message.IImageMessage | proto.Message.IAudioMessage | proto.Message.IDocumentMessage | proto.Message.IStickerMessage;
75
+ export {};
@@ -0,0 +1,43 @@
1
+ var __importDefault=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{"default":a}};Object.defineProperty(exports,"__esModule",{value:!0});
2
+ exports.assertMediaContent=exports.downloadMediaMessage=exports.aggregateMessageKeysNotFromMe=exports.updateMessageWithPollUpdate=exports.updateMessageWithReaction=exports.updateMessageWithReceipt=exports.getDevice=exports.extractMessageContent=exports.normalizeMessageContent=exports.getContentType=exports.generateWAMessage=exports.generateWAMessageFromContent=exports.generateWAMessageContent=exports.generateForwardMessageContent=exports.prepareDisappearingMessageSettingContent=exports.prepareWAMessageMedia=
3
+ exports.generateLinkPreviewIfRequired=exports.extractUrlFromText=void 0;exports.getAggregateVotesInPollMessage=getAggregateVotesInPollMessage;
4
+ const boom_1=require("@hapi/boom"),axios_1=__importDefault(require("axios")),crypto_1=require("crypto"),fs_1=require("fs"),WAProto_1=require("../../WAProto"),Defaults_1=require("../Defaults"),Types_1=require("../Types"),WABinary_1=require("../WABinary"),crypto_2=require("./crypto"),generics_1=require("./generics"),messages_media_1=require("./messages-media"),MIMETYPE_MAP={image:"image/jpeg",video:"video/mp4",document:"application/pdf",audio:"audio/ogg; codecs=opus",sticker:"image/webp","product-catalog-image":"image/jpeg"},
5
+ MessageTypeProto={image:Types_1.WAProto.Message.ImageMessage,video:Types_1.WAProto.Message.VideoMessage,audio:Types_1.WAProto.Message.AudioMessage,sticker:Types_1.WAProto.Message.StickerMessage,document:Types_1.WAProto.Message.DocumentMessage},ButtonType=WAProto_1.proto.Message.ButtonsMessage.HeaderType,extractUrlFromText=a=>{var c;return null===(c=a.match(Defaults_1.URL_REGEX))||void 0===c?void 0:c[0]};exports.extractUrlFromText=extractUrlFromText;
6
+ const generateLinkPreviewIfRequired=async(a,c,d)=>{a=(0,exports.extractUrlFromText)(a);if(c&&a)try{return await c(a)}catch(b){null===d||void 0===d||d.warn({trace:b.stack},"url generation failed")}};exports.generateLinkPreviewIfRequired=generateLinkPreviewIfRequired;
7
+ const assertColor=async a=>{if("number"!==typeof a)return a=a.trim().replace("#",""),6>=a.length&&(a="FF"+a.padStart(6,"0")),a=parseInt(a,16)},prepareWAMessageMedia=async(a,c)=>{const d=c.logger;let b;for(const l of Defaults_1.MEDIA_KEYS)l in a&&(b=l);if(!b)throw new boom_1.Boom("Invalid media type",{statusCode:400});const e={...a,media:a[b]};delete e[b];const f="object"===typeof e.media&&"url"in e.media&&!!e.media.url&&!!c.mediaCache&&b+":"+e.media.url.toString();"document"!==b||e.fileName||(e.fileName=
8
+ "file");e.mimetype||(e.mimetype=MIMETYPE_MAP[b]);if(f&&(a=c.mediaCache.get(f)))return null===d||void 0===d||d.debug({cacheableKey:f},"got media cache hit"),a=Types_1.WAProto.Message.decode(a),Object.assign(a[`${b}Message`],{...e,media:void 0}),a;const g="audio"===b&&"undefined"===typeof e.seconds,k=("image"===b||"video"===b)&&"undefined"===typeof e.jpegThumbnail,h="audio"===b&&!0===e.ptt,p=c.backgroundColor&&"audio"===b&&!0===e.ptt,{mediaKey:m,encWriteStream:r,bodyPath:n,fileEncSha256:t,fileSha256:u,
9
+ fileLength:v,didSaveToTmpPath:w}=await (0,messages_media_1.encryptedStream)(e.media,c.mediaTypeOverride||b,{logger:d,saveOriginalFileIfRequired:g||k,opts:c.options}),x=t.toString("base64"),[{mediaUrl:y,directPath:z}]=await Promise.all([(async()=>{const l=await c.upload(r,{fileEncSha256B64:x,mediaType:b,timeoutMs:c.mediaUploadTimeoutMs});null===d||void 0===d||d.debug({mediaType:b,cacheableKey:f},"uploaded media");return l})(),(async()=>{try{if(k){const {thumbnail:l,originalImageDimensions:q}=await (0,messages_media_1.generateThumbnail)(n,
10
+ b,c);e.jpegThumbnail=l;!e.width&&q&&(e.width=q.width,e.height=q.height,null===d||void 0===d||d.debug("set dimensions"));null===d||void 0===d||d.debug("generated thumbnail")}g&&(e.seconds=await (0,messages_media_1.getAudioDuration)(n),null===d||void 0===d||d.debug("computed audio duration"));h&&(e.waveform=await (0,messages_media_1.getAudioWaveform)(n,d),null===d||void 0===d||d.debug("processed waveform"));p&&(e.backgroundArgb=await assertColor(c.backgroundColor),null===d||void 0===d||d.debug("computed backgroundColor audio status"))}catch(l){null===
11
+ d||void 0===d||d.warn({trace:l.stack},"failed to obtain extra info")}})()]).finally(async()=>{r.destroy();if(w&&n)try{await fs_1.promises.access(n),await fs_1.promises.unlink(n),null===d||void 0===d||d.debug("removed tmp file")}catch(l){null===d||void 0===d||d.warn("failed to remove tmp file")}});a=Types_1.WAProto.Message.fromObject({[`${b}Message`]:MessageTypeProto[b].fromObject({url:y,directPath:z,mediaKey:m,fileEncSha256:t,fileSha256:u,fileLength:v,mediaKeyTimestamp:(0,generics_1.unixTimestampSeconds)(),
12
+ ...e,media:void 0})});e.ptv&&(a.ptvMessage=a.videoMessage,delete a.videoMessage);f&&(null===d||void 0===d||d.debug({cacheableKey:f},"set cache"),c.mediaCache.set(f,Types_1.WAProto.Message.encode(a).finish()));return a};exports.prepareWAMessageMedia=prepareWAMessageMedia;const prepareDisappearingMessageSettingContent=a=>Types_1.WAProto.Message.fromObject({ephemeralMessage:{message:{protocolMessage:{type:Types_1.WAProto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING,ephemeralExpiration:a||0}}}});
13
+ exports.prepareDisappearingMessageSettingContent=prepareDisappearingMessageSettingContent;
14
+ const generateForwardMessageContent=(a,c)=>{var d;let b=a.message;if(!b)throw new boom_1.Boom("no content in message",{statusCode:400});b=(0,exports.normalizeMessageContent)(b);b=WAProto_1.proto.Message.decode(WAProto_1.proto.Message.encode(b).finish());let e=Object.keys(b)[0],f=(null===(d=b[e].contextInfo)||void 0===d?void 0:d.forwardingScore)||0;f+=a.key.fromMe&&!c?0:1;"conversation"===e&&(b.extendedTextMessage={text:b[e]},delete b.conversation,e="extendedTextMessage");b[e].contextInfo=0<f?{forwardingScore:f,
15
+ isForwarded:!0}:{};return b};exports.generateForwardMessageContent=generateForwardMessageContent;
16
+ const generateWAMessageContent=async(a,c)=>{var d;let b={};if("text"in a){var e={text:a.text};var f=a.linkPreview;"undefined"===typeof f&&(f=await (0,exports.generateLinkPreviewIfRequired)(a.text,c.getUrlInfo,c.logger));f&&(e.matchedText=f["matched-text"],e.jpegThumbnail=f.jpegThumbnail,e.description=f.description,e.title=f.title,e.previewType=0,f=f.highQualityThumbnail)&&(e.thumbnailDirectPath=f.directPath,e.mediaKey=f.mediaKey,e.mediaKeyTimestamp=f.mediaKeyTimestamp,e.thumbnailWidth=f.width,e.thumbnailHeight=
17
+ f.height,e.thumbnailSha256=f.fileSha256,e.thumbnailEncSha256=f.fileEncSha256);c.backgroundColor&&(e.backgroundArgb=await assertColor(c.backgroundColor));c.font&&(e.font=c.font);b.extendedTextMessage=e}else if("contacts"in a){c=a.contacts.contacts.length;if(!c)throw new boom_1.Boom("require atleast 1 contact",{statusCode:400});1===c?b.contactMessage=Types_1.WAProto.Message.ContactMessage.fromObject(a.contacts.contacts[0]):b.contactsArrayMessage=Types_1.WAProto.Message.ContactsArrayMessage.fromObject(a.contacts)}else if("location"in
18
+ a)b.locationMessage=Types_1.WAProto.Message.LocationMessage.fromObject(a.location);else if("react"in a)a.react.senderTimestampMs||(a.react.senderTimestampMs=Date.now()),b.reactionMessage=Types_1.WAProto.Message.ReactionMessage.fromObject(a.react);else if("delete"in a)b.protocolMessage={key:a.delete,type:Types_1.WAProto.Message.ProtocolMessage.Type.REVOKE};else if("forward"in a)b=(0,exports.generateForwardMessageContent)(a.forward,a.force);else if("disappearingMessagesInChat"in a)b=(0,exports.prepareDisappearingMessageSettingContent)("boolean"===
19
+ typeof a.disappearingMessagesInChat?a.disappearingMessagesInChat?Defaults_1.WA_DEFAULT_EPHEMERAL:0:a.disappearingMessagesInChat);else if("groupInvite"in a){if(b.groupInviteMessage={},b.groupInviteMessage.inviteCode=a.groupInvite.inviteCode,b.groupInviteMessage.inviteExpiration=a.groupInvite.inviteExpiration,b.groupInviteMessage.caption=a.groupInvite.text,b.groupInviteMessage.groupJid=a.groupInvite.jid,b.groupInviteMessage.groupName=a.groupInvite.subject,c.getProfilePicUrl&&(c=await c.getProfilePicUrl(a.groupInvite.jid,
20
+ "preview")))c=await axios_1.default.get(c,{responseType:"arraybuffer"}),200===c.status&&(b.groupInviteMessage.jpegThumbnail=c.data)}else if("pin"in a)b.pinInChatMessage={},b.messageContextInfo={},b.pinInChatMessage.key=a.pin,b.pinInChatMessage.type=a.type,b.pinInChatMessage.senderTimestampMs=Date.now(),b.messageContextInfo.messageAddOnDurationInSecs=1===a.type?a.time||86400:0;else if("buttonReply"in a)switch(a.type){case "template":b.templateButtonReplyMessage={selectedDisplayText:a.buttonReply.displayText,
21
+ selectedId:a.buttonReply.id,selectedIndex:a.buttonReply.index};break;case "plain":b.buttonsResponseMessage={selectedButtonId:a.buttonReply.id,selectedDisplayText:a.buttonReply.displayText,type:WAProto_1.proto.Message.ButtonsResponseMessage.Type.DISPLAY_TEXT}}else if("ptv"in a&&a.ptv)({videoMessage:c}=await (0,exports.prepareWAMessageMedia)({video:a.video},c)),b.ptvMessage=c;else if("product"in a)({imageMessage:c}=await (0,exports.prepareWAMessageMedia)({image:a.product.productImage},c)),b.productMessage=
22
+ Types_1.WAProto.Message.ProductMessage.fromObject({...a,product:{...a.product,productImage:c}});else if("listReply"in a)b.listResponseMessage={...a.listReply};else if("poll"in a){(e=a.poll).selectableCount||(e.selectableCount=0);(f=a.poll).toAnnouncementGroup||(f.toAnnouncementGroup=!1);if(!Array.isArray(a.poll.values))throw new boom_1.Boom("Invalid poll values",{statusCode:400});if(0>a.poll.selectableCount||a.poll.selectableCount>a.poll.values.length)throw new boom_1.Boom(`poll.selectableCount in poll should be >= 0 and <= ${a.poll.values.length}`,
23
+ {statusCode:400});b.messageContextInfo={messageSecret:a.poll.messageSecret||(0,crypto_1.randomBytes)(32)};c={name:a.poll.name,selectableOptionsCount:a.poll.selectableCount,options:a.poll.values.map(g=>({optionName:g}))};a.poll.toAnnouncementGroup?b.pollCreationMessageV2=c:0<a.poll.selectableCount?b.pollCreationMessageV3=c:b.pollCreationMessage=c}else"sharePhoneNumber"in a?b.protocolMessage={type:WAProto_1.proto.Message.ProtocolMessage.Type.SHARE_PHONE_NUMBER}:"requestPhoneNumber"in a?b.requestPhoneNumberMessage=
24
+ {}:b=await (0,exports.prepareWAMessageMedia)(a,c);"buttons"in a&&a.buttons?(c={buttons:a.buttons.map(g=>({...g,type:WAProto_1.proto.Message.ButtonsMessage.Button.Type.RESPONSE}))},"text"in a?(c.contentText=a.text,c.headerType=ButtonType.EMPTY):("caption"in a&&(c.contentText=a.caption),e=Object.keys(b)[0].replace("Message","").toUpperCase(),c.headerType=ButtonType[e],Object.assign(c,b)),"footer"in a&&a.footer&&(c.footerText=a.footer),b={buttonsMessage:c}):"templateButtons"in a&&a.templateButtons&&
25
+ (c={hydratedButtons:a.templateButtons},"text"in a?c.hydratedContentText=a.text:("caption"in a&&(c.hydratedContentText=a.caption),Object.assign(c,b)),"footer"in a&&a.footer&&(c.hydratedFooterText=a.footer),b={templateMessage:{fourRowTemplate:c,hydratedTemplate:c}});"sections"in a&&a.sections&&(b={listMessage:{sections:a.sections,buttonText:a.buttonText,title:a.title,footerText:a.footer,description:a.text,listType:WAProto_1.proto.Message.ListMessage.ListType.SINGLE_SELECT}});"viewOnce"in a&&a.viewOnce&&
26
+ (b={viewOnceMessage:{message:b}});"mentions"in a&&(null===(d=a.mentions)||void 0===d?0:d.length)&&([d]=Object.keys(b),b[d].contextInfo=b[d]||{},b[d].contextInfo.mentionedJid=a.mentions);"edit"in a&&(b={protocolMessage:{key:a.edit,editedMessage:b,timestampMs:Date.now(),type:Types_1.WAProto.Message.ProtocolMessage.Type.MESSAGE_EDIT}});"contextInfo"in a&&a.contextInfo&&([d]=Object.keys(b),b[d]=b[d]||{},b[d].contextInfo=a.contextInfo);return Types_1.WAProto.Message.fromObject(b)};
27
+ exports.generateWAMessageContent=generateWAMessageContent;
28
+ const generateWAMessageFromContent=(a,c,d)=>{d.timestamp||(d.timestamp=new Date);const b=(0,exports.normalizeMessageContent)(c),e=(0,exports.getContentType)(b),f=(0,generics_1.unixTimestampSeconds)(d.timestamp),{quoted:g,userJid:k}=d;if(g){const p=g.key.fromMe?k:g.participant||g.key.participant||g.key.remoteJid;let m=(0,exports.normalizeMessageContent)(g.message);var h=(0,exports.getContentType)(m);m=WAProto_1.proto.Message.fromObject({[h]:m[h]});h=m[h];"object"===typeof h&&h&&"contextInfo"in h&&
29
+ delete h.contextInfo;h=b[e].contextInfo||{};h.participant=(0,WABinary_1.jidNormalizedUser)(p);h.stanzaId=g.key.id;h.quotedMessage=m;a!==g.key.remoteJid&&(h.remoteJid=g.key.remoteJid);b[e].contextInfo=h}(null===d||void 0===d?0:d.ephemeralExpiration)&&"protocolMessage"!==e&&"ephemeralMessage"!==e&&(b[e].contextInfo={...(b[e].contextInfo||{}),expiration:d.ephemeralExpiration||Defaults_1.WA_DEFAULT_EPHEMERAL});c=Types_1.WAProto.Message.fromObject(c);a={key:{remoteJid:a,fromMe:!0,id:(null===d||void 0===
30
+ d?void 0:d.messageId)||(0,generics_1.generateMessageIDV2)()},message:c,messageTimestamp:f,messageStubParameters:[],participant:(0,WABinary_1.isJidGroup)(a)||(0,WABinary_1.isJidStatusBroadcast)(a)?k:void 0,status:Types_1.WAMessageStatus.PENDING};return Types_1.WAProto.WebMessageInfo.fromObject(a)};exports.generateWAMessageFromContent=generateWAMessageFromContent;
31
+ const generateWAMessage=async(a,c,d)=>{var b;d.logger=null===(b=null===d||void 0===d?void 0:d.logger)||void 0===b?void 0:b.child({msgId:d.messageId});return(0,exports.generateWAMessageFromContent)(a,await (0,exports.generateWAMessageContent)(c,d),d)};exports.generateWAMessage=generateWAMessage;const getContentType=a=>{if(a)return Object.keys(a).find(c=>("conversation"===c||c.includes("Message"))&&"senderKeyDistributionMessage"!==c)};exports.getContentType=getContentType;
32
+ const normalizeMessageContent=a=>{if(a){for(let c=0;5>c;c++){const d=(null===a||void 0===a?void 0:a.ephemeralMessage)||(null===a||void 0===a?void 0:a.viewOnceMessage)||(null===a||void 0===a?void 0:a.documentWithCaptionMessage)||(null===a||void 0===a?void 0:a.viewOnceMessageV2)||(null===a||void 0===a?void 0:a.viewOnceMessageV2Extension)||(null===a||void 0===a?void 0:a.editedMessage);if(!d)break;a=d.message}return a}};exports.normalizeMessageContent=normalizeMessageContent;
33
+ const extractMessageContent=a=>{var c,d,b,e,f,g;const k=h=>h.imageMessage?{imageMessage:h.imageMessage}:h.documentMessage?{documentMessage:h.documentMessage}:h.videoMessage?{videoMessage:h.videoMessage}:h.locationMessage?{locationMessage:h.locationMessage}:{conversation:"contentText"in h?h.contentText:"hydratedContentText"in h?h.hydratedContentText:""};a=(0,exports.normalizeMessageContent)(a);return(null===a||void 0===a?0:a.buttonsMessage)?k(a.buttonsMessage):(null===(c=null===a||void 0===a?void 0:
34
+ a.templateMessage)||void 0===c?0:c.hydratedFourRowTemplate)?k(null===(d=null===a||void 0===a?void 0:a.templateMessage)||void 0===d?void 0:d.hydratedFourRowTemplate):(null===(b=null===a||void 0===a?void 0:a.templateMessage)||void 0===b?0:b.hydratedTemplate)?k(null===(e=null===a||void 0===a?void 0:a.templateMessage)||void 0===e?void 0:e.hydratedTemplate):(null===(f=null===a||void 0===a?void 0:a.templateMessage)||void 0===f?0:f.fourRowTemplate)?k(null===(g=null===a||void 0===a?void 0:a.templateMessage)||
35
+ void 0===g?void 0:g.fourRowTemplate):a};exports.extractMessageContent=extractMessageContent;const getDevice=a=>/^3A.{18}$/.test(a)?"ios":/^3E.{20}$/.test(a)?"web":/^(.{21}|.{32})$/.test(a)?"android":/^(3F|.{18}$)/.test(a)?"desktop":"unknown";exports.getDevice=getDevice;const updateMessageWithReceipt=(a,c)=>{a.userReceipt=a.userReceipt||[];const d=a.userReceipt.find(b=>b.userJid===c.userJid);d?Object.assign(d,c):a.userReceipt.push(c)};exports.updateMessageWithReceipt=updateMessageWithReceipt;
36
+ const updateMessageWithReaction=(a,c)=>{const d=(0,generics_1.getKeyAuthor)(c.key),b=(a.reactions||[]).filter(e=>(0,generics_1.getKeyAuthor)(e.key)!==d);c.text&&b.push(c);a.reactions=b};exports.updateMessageWithReaction=updateMessageWithReaction;
37
+ const updateMessageWithPollUpdate=(a,c)=>{var d,b;const e=(0,generics_1.getKeyAuthor)(c.pollUpdateMessageKey),f=(a.pollUpdates||[]).filter(g=>(0,generics_1.getKeyAuthor)(g.pollUpdateMessageKey)!==e);(null===(b=null===(d=c.vote)||void 0===d?void 0:d.selectedOptions)||void 0===b?0:b.length)&&f.push(c);a.pollUpdates=f};exports.updateMessageWithPollUpdate=updateMessageWithPollUpdate;
38
+ function getAggregateVotesInPollMessage({message:a,pollUpdates:c},d){var b,e,f;const g=((null===(b=null===a||void 0===a?void 0:a.pollCreationMessage)||void 0===b?void 0:b.options)||(null===(e=null===a||void 0===a?void 0:a.pollCreationMessageV2)||void 0===e?void 0:e.options)||(null===(f=null===a||void 0===a?void 0:a.pollCreationMessageV3)||void 0===f?void 0:f.options)||[]).reduce((k,h)=>{const p=(0,crypto_2.sha256)(Buffer.from(h.optionName||"")).toString();k[p]={name:h.optionName||"",voters:[]};return k},
39
+ {});for(const k of c||[])if({vote:a}=k,a)for(const h of a.selectedOptions||[])a=h.toString(),c=g[a],c||(g[a]={name:"Unknown",voters:[]},c=g[a]),g[a].voters.push((0,generics_1.getKeyAuthor)(k.pollUpdateMessageKey,d));return Object.values(g)}const aggregateMessageKeysNotFromMe=a=>{const c={};for(const {remoteJid:d,id:b,participant:e,fromMe:f}of a)f||(a=`${d}:${e||""}`,c[a]||(c[a]={jid:d,participant:e,messageIds:[]}),c[a].messageIds.push(b));return Object.values(c)};
40
+ exports.aggregateMessageKeysNotFromMe=aggregateMessageKeysNotFromMe;
41
+ const REUPLOAD_REQUIRED_STATUS=[410,404],downloadMediaMessage=async(a,c,d,b)=>{async function e(){var f=(0,exports.extractMessageContent)(a.message);if(!f)throw new boom_1.Boom("No message present",{statusCode:400,data:a});var g=(0,exports.getContentType)(f),k=null===g||void 0===g?void 0:g.replace("Message","");f=f[g];if(!f||"object"!==typeof f||!("url"in f||"thumbnailDirectPath"in f))throw new boom_1.Boom(`"${g}" message is not a media message`);"thumbnailDirectPath"in f&&!("url"in f)?(g={directPath:f.thumbnailDirectPath,
42
+ mediaKey:f.mediaKey},k="thumbnail-link"):g=f;k=await (0,messages_media_1.downloadContentFromMessage)(g,k,d);if("buffer"===c){g=[];for await(const h of k)g.push(h);return Buffer.concat(g)}return k}return await e().catch(async f=>{var g;if(b&&axios_1.default.isAxiosError(f)&&REUPLOAD_REQUIRED_STATUS.includes(null===(g=f.response)||void 0===g?void 0:g.status))return b.logger.info({key:a.key},"sending reupload media request..."),a=await b.reuploadRequest(a),await e();throw f;})};
43
+ exports.downloadMediaMessage=downloadMediaMessage;const assertMediaContent=a=>{a=(0,exports.extractMessageContent)(a);const c=(null===a||void 0===a?void 0:a.documentMessage)||(null===a||void 0===a?void 0:a.imageMessage)||(null===a||void 0===a?void 0:a.videoMessage)||(null===a||void 0===a?void 0:a.audioMessage)||(null===a||void 0===a?void 0:a.stickerMessage);if(!c)throw new boom_1.Boom("given message is not a media message",{statusCode:400,data:a});return c};exports.assertMediaContent=assertMediaContent;
@@ -0,0 +1,19 @@
1
+ import { proto } from '../../WAProto';
2
+ import { KeyPair } from '../Types';
3
+ import { BinaryNode } from '../WABinary';
4
+ import { ILogger } from './logger';
5
+ export declare const makeNoiseHandler: ({ keyPair: { private: privateKey, public: publicKey }, NOISE_HEADER, logger, routingInfo }: {
6
+ keyPair: KeyPair;
7
+ NOISE_HEADER: Uint8Array;
8
+ logger: ILogger;
9
+ routingInfo?: Buffer | undefined;
10
+ }) => {
11
+ encrypt: (plaintext: Uint8Array) => Buffer<ArrayBuffer>;
12
+ decrypt: (ciphertext: Uint8Array) => Buffer<ArrayBuffer>;
13
+ authenticate: (data: Uint8Array) => void;
14
+ mixIntoKey: (data: Uint8Array) => Promise<void>;
15
+ finishInit: () => Promise<void>;
16
+ processHandshake: ({ serverHello }: proto.HandshakeMessage, noiseKey: KeyPair) => Promise<Buffer<ArrayBuffer>>;
17
+ encodeFrame: (data: Buffer | Uint8Array) => Buffer<ArrayBuffer>;
18
+ decodeFrame: (newData: Buffer | Uint8Array, onFrame: (buff: Uint8Array | BinaryNode) => void) => Promise<void>;
19
+ };
@@ -0,0 +1,6 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.makeNoiseHandler=void 0;
2
+ const boom_1=require("@hapi/boom"),WAProto_1=require("../../WAProto"),Defaults_1=require("../Defaults"),WABinary_1=require("../WABinary"),crypto_1=require("./crypto"),generateIV=m=>{const n=new ArrayBuffer(12);(new DataView(n)).setUint32(8,m);return new Uint8Array(n)},makeNoiseHandler=({keyPair:{private:m,public:n},NOISE_HEADER:v,logger:p,routingInfo:q})=>{p=p.child({class:"ns"});const h=a=>{g||(e=(0,crypto_1.sha256)(Buffer.concat([e,a])))},x=a=>{a=(0,crypto_1.aesEncryptGCM)(a,w,generateIV(k),e);
3
+ k+=1;h(a);return a},t=a=>{var b=generateIV(g?r:k);b=(0,crypto_1.aesDecryptGCM)(a,y,b,e);g?r+=1:k+=1;h(a);return b},C=async a=>{a=await (0,crypto_1.hkdf)(Buffer.from(a),64,{salt:B,info:""});return[a.slice(0,32),a.slice(32)]},u=async a=>{const [b,c]=await C(a);B=b;y=w=c;k=r=0},z=Buffer.from(Defaults_1.NOISE_MODE);let e=32===z.byteLength?z:(0,crypto_1.sha256)(z),B=e,w=e,y=e,r=0,k=0,g=!1,A=!1,d=Buffer.alloc(0);h(v);h(n);return{encrypt:x,decrypt:t,authenticate:h,mixIntoKey:u,finishInit:async()=>{const [a,
4
+ b]=await C(new Uint8Array(0));w=a;y=b;e=Buffer.from([]);k=r=0;g=!0},processHandshake:async({serverHello:a},b)=>{h(a.ephemeral);await u(crypto_1.Curve.sharedKey(m,a.ephemeral));var c=t(a.static);await u(crypto_1.Curve.sharedKey(m,c));c=t(a.payload);({intermediate:c}=WAProto_1.proto.CertChain.decode(c));({issuerSerial:c}=WAProto_1.proto.CertChain.NoiseCertificate.Details.decode(c.details));if(c!==Defaults_1.WA_CERT_DETAILS.SERIAL)throw new boom_1.Boom("certification match failed",{statusCode:400});
5
+ c=x(b.public);await u(crypto_1.Curve.sharedKey(b.private,a.ephemeral));return c},encodeFrame:a=>{g&&(a=x(a));let b;q?(b=Buffer.alloc(7),b.write("ED",0,"utf8"),b.writeUint8(0,2),b.writeUint8(1,3),b.writeUint8(q.byteLength>>16,4),b.writeUint16BE(q.byteLength&65535,5),b=Buffer.concat([b,q,v])):b=Buffer.from(v);const c=A?0:b.length,f=Buffer.alloc(c+3+a.byteLength);A||(f.set(b),A=!0);f.writeUInt8(a.byteLength>>16,c);f.writeUInt16BE(65535&a.byteLength,c+1);f.set(a,c+3);return f},decodeFrame:async(a,b)=>
6
+ {var c;const f=()=>{if(3<=d.length)return d.readUInt8()<<16|d.readUInt16BE(1)};d=Buffer.concat([d,a]);p.trace(`recv ${a.length} bytes, total recv ${d.length} bytes`);for(a=f();a&&d.length>=a+3;){let l=d.slice(3,a+3);d=d.slice(a+3);g&&(a=t(l),l=await (0,WABinary_1.decodeBinaryNode)(a));p.trace({msg:null===(c=null===l||void 0===l?void 0:l.attrs)||void 0===c?void 0:c.id},"recv frame");b(l);a=f()}}}};exports.makeNoiseHandler=makeNoiseHandler;
@@ -0,0 +1,41 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import { proto } from '../../WAProto';
3
+ import { AuthenticationCreds, BaileysEventEmitter, CacheStore, SignalKeyStoreWithTransaction } from '../Types';
4
+ import { ILogger } from './logger';
5
+ type ProcessMessageContext = {
6
+ shouldProcessHistoryMsg: boolean;
7
+ placeholderResendCache?: CacheStore;
8
+ creds: AuthenticationCreds;
9
+ keyStore: SignalKeyStoreWithTransaction;
10
+ ev: BaileysEventEmitter;
11
+ logger?: ILogger;
12
+ options: AxiosRequestConfig<{}>;
13
+ };
14
+ /** Cleans a received message to further processing */
15
+ export declare const cleanMessage: (message: proto.IWebMessageInfo, meId: string) => void;
16
+ export declare const isRealMessage: (message: proto.IWebMessageInfo, meId: string) => boolean | undefined;
17
+ export declare const shouldIncrementChatUnread: (message: proto.IWebMessageInfo) => boolean;
18
+ /**
19
+ * Get the ID of the chat from the given key.
20
+ * Typically -- that'll be the remoteJid, but for broadcasts, it'll be the participant
21
+ */
22
+ export declare const getChatId: ({ remoteJid, participant, fromMe }: proto.IMessageKey) => string;
23
+ type PollContext = {
24
+ /** normalised jid of the person that created the poll */
25
+ pollCreatorJid: string;
26
+ /** ID of the poll creation message */
27
+ pollMsgId: string;
28
+ /** poll creation message enc key */
29
+ pollEncKey: Uint8Array;
30
+ /** jid of the person that voted */
31
+ voterJid: string;
32
+ };
33
+ /**
34
+ * Decrypt a poll vote
35
+ * @param vote encrypted vote
36
+ * @param ctx additional info about the poll required for decryption
37
+ * @returns list of SHA256 options
38
+ */
39
+ export declare function decryptPollVote({ encPayload, encIv }: proto.Message.IPollEncValue, { pollCreatorJid, pollMsgId, pollEncKey, voterJid, }: PollContext): proto.Message.PollVoteMessage;
40
+ declare const processMessage: (message: proto.IWebMessageInfo, { shouldProcessHistoryMsg, placeholderResendCache, ev, creds, keyStore, logger, options }: ProcessMessageContext) => Promise<void>;
41
+ export default processMessage;
@@ -0,0 +1,19 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.getChatId=exports.shouldIncrementChatUnread=exports.isRealMessage=exports.cleanMessage=void 0;exports.decryptPollVote=decryptPollVote;
2
+ const WAProto_1=require("../../WAProto"),Types_1=require("../Types"),messages_1=require("../Utils/messages"),WABinary_1=require("../WABinary"),crypto_1=require("./crypto"),generics_1=require("./generics"),history_1=require("./history"),REAL_MSG_STUB_TYPES=new Set([Types_1.WAMessageStubType.CALL_MISSED_GROUP_VIDEO,Types_1.WAMessageStubType.CALL_MISSED_GROUP_VOICE,Types_1.WAMessageStubType.CALL_MISSED_VIDEO,Types_1.WAMessageStubType.CALL_MISSED_VOICE]),REAL_MSG_REQ_ME_STUB_TYPES=new Set([Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD]),
3
+ cleanMessage=(a,e)=>{function f(d){a.key.fromMe||(d.fromMe=d.fromMe?!1:(0,WABinary_1.areJidsSameUser)(d.participant||d.remoteJid,e),d.remoteJid=a.key.remoteJid,d.participant=d.participant||a.key.participant)}a.key.remoteJid=(0,WABinary_1.jidNormalizedUser)(a.key.remoteJid);a.key.participant=a.key.participant?(0,WABinary_1.jidNormalizedUser)(a.key.participant):void 0;const b=(0,messages_1.normalizeMessageContent)(a.message);(null===b||void 0===b?0:b.reactionMessage)&&f(b.reactionMessage.key);(null===
4
+ b||void 0===b?0:b.pollUpdateMessage)&&f(b.pollUpdateMessage.pollCreationMessageKey)};exports.cleanMessage=cleanMessage;
5
+ const isRealMessage=(a,e)=>{var f;const b=(0,messages_1.normalizeMessageContent)(a.message),d=!!(0,messages_1.getContentType)(b);return(!!b||REAL_MSG_STUB_TYPES.has(a.messageStubType)||REAL_MSG_REQ_ME_STUB_TYPES.has(a.messageStubType)&&(null===(f=a.messageStubParameters)||void 0===f?void 0:f.some(r=>(0,WABinary_1.areJidsSameUser)(e,r))))&&d&&!(null===b||void 0===b?0:b.protocolMessage)&&!(null===b||void 0===b?0:b.reactionMessage)&&!(null===b||void 0===b?0:b.pollUpdateMessage)};
6
+ exports.isRealMessage=isRealMessage;const shouldIncrementChatUnread=a=>!a.key.fromMe&&!a.messageStubType;exports.shouldIncrementChatUnread=shouldIncrementChatUnread;const getChatId=({remoteJid:a,participant:e,fromMe:f})=>!(0,WABinary_1.isJidBroadcast)(a)||(0,WABinary_1.isJidStatusBroadcast)(a)||f?a:e;exports.getChatId=getChatId;
7
+ function decryptPollVote({encPayload:a,encIv:e},{pollCreatorJid:f,pollMsgId:b,pollEncKey:d,voterJid:r}){f=Buffer.concat([Buffer.from(b),Buffer.from(f),Buffer.from(r),Buffer.from("Poll Vote"),new Uint8Array([1])]);d=(0,crypto_1.hmacSign)(d,new Uint8Array(32),"sha256");d=(0,crypto_1.hmacSign)(f,d,"sha256");b=Buffer.from(`${b}\u0000${r}`);a=(0,crypto_1.aesDecryptGCM)(a,d,e,b);return WAProto_1.proto.Message.PollVoteMessage.decode(a)}
8
+ const processMessage=async(a,{shouldProcessHistoryMsg:e,placeholderResendCache:f,ev:b,creds:d,keyStore:r,logger:n,options:w})=>{var g,x,y,z,A,B,v,C,D,E,F,G,H;const K=d.me.id,{accountSettings:I}=d,h={id:(0,WABinary_1.jidNormalizedUser)((0,exports.getChatId)(a.key))},L=(0,exports.isRealMessage)(a,K);L&&(h.messages=[{message:a}],h.conversationTimestamp=(0,generics_1.toNumber)(a.messageTimestamp),(0,exports.shouldIncrementChatUnread)(a)&&(h.unreadCount=(h.unreadCount||0)+1));const l=(0,messages_1.normalizeMessageContent)(a.message);
9
+ (L||(null===(x=null===(g=null===l||void 0===l?void 0:l.reactionMessage)||void 0===g?void 0:g.key)||void 0===x?0:x.fromMe))&&(null===I||void 0===I?0:I.unarchiveChats)&&(h.archived=!1,h.readOnly=!1);if(g=null===l||void 0===l?void 0:l.protocolMessage)switch(g.type){case WAProto_1.proto.Message.ProtocolMessage.Type.HISTORY_SYNC_NOTIFICATION:var c=g.historySyncNotification;var t=!(null===(y=d.processedHistoryMessages)||void 0===y?0:y.length);null===n||void 0===n||n.info({histNotification:c,process:e,id:a.key.id,
10
+ isLatest:t},"got history notification");if(e){c.syncType!==WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND&&b.emit("creds.update",{processedHistoryMessages:[...(d.processedHistoryMessages||[]),{key:a.key,messageTimestamp:a.messageTimestamp}]});var u=await (0,history_1.downloadAndProcessHistorySyncNotification)(c,w);b.emit("messaging-history.set",{...u,isLatest:c.syncType!==WAProto_1.proto.HistorySync.HistorySyncType.ON_DEMAND?t:void 0,peerDataRequestSessionId:c.peerDataRequestSessionId})}break;
11
+ case WAProto_1.proto.Message.ProtocolMessage.Type.APP_STATE_SYNC_KEY_SHARE:const p=g.appStateSyncKeyShare.keys;if(null===p||void 0===p?0:p.length){let m="";await r.transaction(async()=>{const q=[];for(const {keyData:M,keyId:N}of p){const J=Buffer.from(N.keyId).toString("base64");q.push(J);await r.set({"app-state-sync-key":{[J]:M}});m=J}null===n||void 0===n||n.info({newAppStateSyncKeyId:m,newKeys:q},"injecting new app state sync keys")});b.emit("creds.update",{myAppStateKeyId:m})}else null===n||void 0===
12
+ n||n.info({protocolMsg:g},"recv app state sync with 0 keys");break;case WAProto_1.proto.Message.ProtocolMessage.Type.REVOKE:b.emit("messages.update",[{key:{...a.key,id:g.key.id},update:{message:null,messageStubType:Types_1.WAMessageStubType.REVOKE,key:a.key}}]);break;case WAProto_1.proto.Message.ProtocolMessage.Type.EPHEMERAL_SETTING:Object.assign(h,{ephemeralSettingTimestamp:(0,generics_1.toNumber)(a.messageTimestamp),ephemeralExpiration:g.ephemeralExpiration||null});break;case WAProto_1.proto.Message.ProtocolMessage.Type.PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE:const k=
13
+ g.peerDataOperationRequestResponseMessage;if(k){null===f||void 0===f||f.del(k.stanzaId);({peerDataOperationResult:c}=k);for(const m of c)if({placeholderMessageResendResponse:c}=m,c){const q=WAProto_1.proto.WebMessageInfo.decode(c.webMessageInfoBytes);setTimeout(()=>{b.emit("messages.upsert",{messages:[q],type:"notify",requestId:k.stanzaId})},500)}}case WAProto_1.proto.Message.ProtocolMessage.Type.MESSAGE_EDIT:b.emit("messages.update",[{key:{...a.key,id:null===(z=g.key)||void 0===z?void 0:z.id},update:{message:{editedMessage:{message:g.editedMessage}},
14
+ messageTimestamp:g.timestampMs?Math.floor((0,generics_1.toNumber)(g.timestampMs)/1E3):a.messageTimestamp}}])}else if(null===l||void 0===l?0:l.reactionMessage)b.emit("messages.reaction",[{reaction:{...l.reactionMessage,key:a.key},key:null===(A=l.reactionMessage)||void 0===A?void 0:A.key}]);else if(a.messageStubType){const p=null===(B=a.key)||void 0===B?void 0:B.remoteJid;let k;d=m=>b.emit("group-participants.update",{id:p,author:a.participant,participants:k,action:m});e=m=>{var q;b.emit("groups.update",
15
+ [{id:p,...m,author:null!==(q=a.participant)&&void 0!==q?q:void 0}])};w=()=>k.find(m=>(0,WABinary_1.areJidsSameUser)(K,m));switch(a.messageStubType){case Types_1.WAMessageStubType.GROUP_PARTICIPANT_CHANGE_NUMBER:k=a.messageStubParameters||[];d("modify");break;case Types_1.WAMessageStubType.GROUP_PARTICIPANT_LEAVE:case Types_1.WAMessageStubType.GROUP_PARTICIPANT_REMOVE:k=a.messageStubParameters||[];d("remove");w()&&(h.readOnly=!0);break;case Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD:case Types_1.WAMessageStubType.GROUP_PARTICIPANT_INVITE:case Types_1.WAMessageStubType.GROUP_PARTICIPANT_ADD_REQUEST_JOIN:k=
16
+ a.messageStubParameters||[];w()&&(h.readOnly=!1);d("add");break;case Types_1.WAMessageStubType.GROUP_PARTICIPANT_DEMOTE:k=a.messageStubParameters||[];d("demote");break;case Types_1.WAMessageStubType.GROUP_PARTICIPANT_PROMOTE:k=a.messageStubParameters||[];d("promote");break;case Types_1.WAMessageStubType.GROUP_CHANGE_ANNOUNCE:c=null===(u=a.messageStubParameters)||void 0===u?void 0:u[0];e({announce:"true"===c||"on"===c});break;case Types_1.WAMessageStubType.GROUP_CHANGE_RESTRICT:c=null===(v=a.messageStubParameters)||
17
+ void 0===v?void 0:v[0];e({restrict:"true"===c||"on"===c});break;case Types_1.WAMessageStubType.GROUP_CHANGE_SUBJECT:c=null===(C=a.messageStubParameters)||void 0===C?void 0:C[0];h.name=c;e({subject:c});break;case Types_1.WAMessageStubType.GROUP_CHANGE_DESCRIPTION:c=null===(D=a.messageStubParameters)||void 0===D?void 0:D[0];h.description=c;e({desc:c});break;case Types_1.WAMessageStubType.GROUP_CHANGE_INVITE_LINK:c=null===(E=a.messageStubParameters)||void 0===E?void 0:E[0];e({inviteCode:c});break;case Types_1.WAMessageStubType.GROUP_MEMBER_ADD_MODE:c=
18
+ null===(F=a.messageStubParameters)||void 0===F?void 0:F[0];e({memberAddMode:"all_member_add"===c});break;case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE:c=null===(G=a.messageStubParameters)||void 0===G?void 0:G[0];e({joinApprovalMode:"on"===c});break;case Types_1.WAMessageStubType.GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD:u=null===(H=a.messageStubParameters)||void 0===H?void 0:H[0],v=null===(t=a.messageStubParameters)||void 0===t?void 0:t[1],t=null===(c=a.messageStubParameters)||
19
+ void 0===c?void 0:c[2],b.emit("group.join-request",{id:p,author:a.participant,participant:u,action:v,method:t})}}1<Object.keys(h).length&&b.emit("chats.update",[h])};exports.default=processMessage;
@@ -0,0 +1,33 @@
1
+ import { SignalRepository } from '../Types';
2
+ import { AuthenticationCreds, AuthenticationState, KeyPair, SignalIdentity, SignalKeyStore, SignedKeyPair } from '../Types/Auth';
3
+ import { BinaryNode, JidWithDevice } from '../WABinary';
4
+ import { USyncQueryResultList } from '../WAUSync';
5
+ export declare const createSignalIdentity: (wid: string, accountSignatureKey: Uint8Array) => SignalIdentity;
6
+ export declare const getPreKeys: ({ get }: SignalKeyStore, min: number, limit: number) => Promise<{
7
+ [id: string]: KeyPair;
8
+ }>;
9
+ export declare const generateOrGetPreKeys: (creds: AuthenticationCreds, range: number) => {
10
+ newPreKeys: {
11
+ [id: number]: KeyPair;
12
+ };
13
+ lastPreKeyId: number;
14
+ preKeysRange: readonly [number, number];
15
+ };
16
+ export declare const xmppSignedPreKey: (key: SignedKeyPair) => BinaryNode;
17
+ export declare const xmppPreKey: (pair: KeyPair, id: number) => BinaryNode;
18
+ export declare const parseAndInjectE2ESessions: (node: BinaryNode, repository: SignalRepository) => Promise<void>;
19
+ export declare const extractDeviceJids: (result: USyncQueryResultList[], myJid: string, excludeZeroDevices: boolean) => JidWithDevice[];
20
+ /**
21
+ * get the next N keys for upload or processing
22
+ * @param count number of pre-keys to get or generate
23
+ */
24
+ export declare const getNextPreKeys: ({ creds, keys }: AuthenticationState, count: number) => Promise<{
25
+ update: Partial<AuthenticationCreds>;
26
+ preKeys: {
27
+ [id: string]: KeyPair;
28
+ };
29
+ }>;
30
+ export declare const getNextPreKeysNode: (state: AuthenticationState, count: number) => Promise<{
31
+ update: Partial<AuthenticationCreds>;
32
+ node: BinaryNode;
33
+ }>;
@@ -0,0 +1,10 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.getNextPreKeysNode=exports.getNextPreKeys=exports.extractDeviceJids=exports.parseAndInjectE2ESessions=exports.xmppPreKey=exports.xmppSignedPreKey=exports.generateOrGetPreKeys=exports.getPreKeys=exports.createSignalIdentity=void 0;
2
+ const lodash_1=require("lodash"),Defaults_1=require("../Defaults"),WABinary_1=require("../WABinary"),crypto_1=require("./crypto"),generics_1=require("./generics"),createSignalIdentity=(a,b)=>({identifier:{name:a,deviceId:0},identifierKey:(0,crypto_1.generateSignalPubKey)(b)});exports.createSignalIdentity=createSignalIdentity;const getPreKeys=async({get:a},b,c)=>{const f=[];for(;b<c;b++)f.push(b.toString());return a("pre-key",f)};exports.getPreKeys=getPreKeys;
3
+ const generateOrGetPreKeys=(a,b)=>{var c=b-(a.nextPreKeyId-a.firstUnuploadedPreKeyId);const f=a.nextPreKeyId+c-1,d={};if(0<c)for(c=a.nextPreKeyId;c<=f;c++)d[c]=crypto_1.Curve.generateKeyPair();return{newPreKeys:d,lastPreKeyId:f,preKeysRange:[a.firstUnuploadedPreKeyId,b]}};exports.generateOrGetPreKeys=generateOrGetPreKeys;
4
+ const xmppSignedPreKey=a=>({tag:"skey",attrs:{},content:[{tag:"id",attrs:{},content:(0,generics_1.encodeBigEndian)(a.keyId,3)},{tag:"value",attrs:{},content:a.keyPair.public},{tag:"signature",attrs:{},content:a.signature}]});exports.xmppSignedPreKey=xmppSignedPreKey;const xmppPreKey=(a,b)=>({tag:"key",attrs:{},content:[{tag:"id",attrs:{},content:(0,generics_1.encodeBigEndian)(b,3)},{tag:"value",attrs:{},content:a.public}]});exports.xmppPreKey=xmppPreKey;
5
+ const parseAndInjectE2ESessions=async(a,b)=>{const c=d=>d?{keyId:(0,WABinary_1.getBinaryNodeChildUInt)(d,"id",3),publicKey:(0,crypto_1.generateSignalPubKey)((0,WABinary_1.getBinaryNodeChildBuffer)(d,"value")),signature:(0,WABinary_1.getBinaryNodeChildBuffer)(d,"signature")}:void 0;a=(0,WABinary_1.getBinaryNodeChildren)((0,WABinary_1.getBinaryNodeChild)(a,"list"),"user");for(var f of a)(0,WABinary_1.assertNodeErrorFree)(f);f=(0,lodash_1.chunk)(a,100);for(const d of f)await Promise.all(d.map(async e=>
6
+ {const h=(0,WABinary_1.getBinaryNodeChild)(e,"skey"),l=(0,WABinary_1.getBinaryNodeChild)(e,"key"),k=(0,WABinary_1.getBinaryNodeChildBuffer)(e,"identity"),g=e.attrs.jid;e=(0,WABinary_1.getBinaryNodeChildUInt)(e,"registration",4);await b.injectE2ESession({jid:g,session:{registrationId:e,identityKey:(0,crypto_1.generateSignalPubKey)(k),signedPreKey:c(h),preKey:c(l)}})}))};exports.parseAndInjectE2ESessions=parseAndInjectE2ESessions;
7
+ const extractDeviceJids=(a,b,c)=>{const {user:f,device:d}=(0,WABinary_1.jidDecode)(b);b=[];for(const e of a){const {devices:h,id:l}=e;({user:a}=(0,WABinary_1.jidDecode)(l));const k=null===h||void 0===h?void 0:h.deviceList;if(Array.isArray(k))for(const {id:g,keyIndex:m}of k)c&&0===g||f===a&&d===g||0!==g&&!m||b.push({user:a,device:g})}return b};exports.extractDeviceJids=extractDeviceJids;
8
+ const getNextPreKeys=async({creds:a,keys:b},c)=>{const {newPreKeys:f,lastPreKeyId:d,preKeysRange:e}=(0,exports.generateOrGetPreKeys)(a,c);a={nextPreKeyId:Math.max(d+1,a.nextPreKeyId),firstUnuploadedPreKeyId:Math.max(a.firstUnuploadedPreKeyId,d+1)};await b.set({"pre-key":f});b=await (0,exports.getPreKeys)(b,e[0],e[0]+e[1]);return{update:a,preKeys:b}};exports.getNextPreKeys=getNextPreKeys;
9
+ const getNextPreKeysNode=async(a,b)=>{const {creds:c}=a,{update:f,preKeys:d}=await (0,exports.getNextPreKeys)(a,b);a={tag:"iq",attrs:{xmlns:"encrypt",type:"set",to:WABinary_1.S_WHATSAPP_NET},content:[{tag:"registration",attrs:{},content:(0,generics_1.encodeBigEndian)(c.registrationId)},{tag:"type",attrs:{},content:Defaults_1.KEY_BUNDLE_TYPE},{tag:"identity",attrs:{},content:c.signedIdentityKey.public},{tag:"list",attrs:{},content:Object.keys(d).map(e=>(0,exports.xmppPreKey)(d[+e],+e))},(0,exports.xmppSignedPreKey)(c.signedPreKey)]};
10
+ return{update:f,node:a}};exports.getNextPreKeysNode=getNextPreKeysNode;
@@ -0,0 +1,12 @@
1
+ import { AuthenticationState } from '../Types';
2
+ /**
3
+ * stores the full authentication state in a single folder.
4
+ * Far more efficient than singlefileauthstate
5
+ *
6
+ * Again, I wouldn't endorse this for any production level use other than perhaps a bot.
7
+ * Would recommend writing an auth state for use with a proper SQL or No-SQL DB
8
+ * */
9
+ export declare const useMultiFileAuthState: (folder: string) => Promise<{
10
+ state: AuthenticationState;
11
+ saveCreds: () => Promise<void>;
12
+ }>;
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.useMultiFileAuthState=void 0;
2
+ const async_mutex_1=require("async-mutex"),promises_1=require("fs/promises"),path_1=require("path"),WAProto_1=require("../../WAProto"),auth_utils_1=require("./auth-utils"),generics_1=require("./generics"),fileLocks=new Map,getFileLock=e=>{let f=fileLocks.get(e);f||(f=new async_mutex_1.Mutex,fileLocks.set(e,f));return f},useMultiFileAuthState=async e=>{const f=async(b,a)=>{const c=(0,path_1.join)(e,h(a));return getFileLock(c).acquire().then(async d=>{try{await (0,promises_1.writeFile)(c,JSON.stringify(b,
3
+ generics_1.BufferJSON.replacer))}finally{d()}})},k=async b=>{try{const a=(0,path_1.join)(e,h(b));return await getFileLock(a).acquire().then(async c=>{try{const d=await (0,promises_1.readFile)(a,{encoding:"utf-8"});return JSON.parse(d,generics_1.BufferJSON.reviver)}finally{c()}})}catch(a){return null}},p=async b=>{try{const a=(0,path_1.join)(e,h(b));return getFileLock(a).acquire().then(async c=>{try{await (0,promises_1.unlink)(a)}catch(d){}finally{c()}})}catch(a){}},l=await (0,promises_1.stat)(e).catch(()=>
4
+ {});if(l){if(!l.isDirectory())throw Error(`found something that is not a directory at ${e}, either delete it or specify a different location`);}else await (0,promises_1.mkdir)(e,{recursive:!0});const h=b=>{var a;return null===(a=null===b||void 0===b?void 0:b.replace(/\//g,"__"))||void 0===a?void 0:a.replace(/:/g,"-")},m=await k("creds.json")||(0,auth_utils_1.initAuthCreds)();return{state:{creds:m,keys:{get:async(b,a)=>{const c={};await Promise.all(a.map(async d=>{let g=await k(`${b}-${d}.json`);"app-state-sync-key"===
5
+ b&&g&&(g=WAProto_1.proto.Message.AppStateSyncKeyData.fromObject(g));c[d]=g}));return c},set:async b=>{const a=[];for(const c in b)for(const d in b[c]){const g=b[c][d],n=`${c}-${d}.json`;a.push(g?f(g,n):p(n))}await Promise.all(a)}}},saveCreds:async()=>f(m,"creds.json")}};exports.useMultiFileAuthState=useMultiFileAuthState;
@@ -0,0 +1,10 @@
1
+ import { proto } from '../../WAProto';
2
+ import type { AuthenticationCreds, SignalCreds, SocketConfig } from '../Types';
3
+ import { BinaryNode } from '../WABinary';
4
+ export declare const generateLoginNode: (userJid: string, config: SocketConfig) => proto.IClientPayload;
5
+ export declare const generateRegistrationNode: ({ registrationId, signedPreKey, signedIdentityKey }: SignalCreds, config: SocketConfig) => proto.ClientPayload;
6
+ export declare const configureSuccessfulPairing: (stanza: BinaryNode, { advSecretKey, signedIdentityKey, signalIdentities }: Pick<AuthenticationCreds, "advSecretKey" | "signedIdentityKey" | "signalIdentities">) => {
7
+ creds: Partial<AuthenticationCreds>;
8
+ reply: BinaryNode;
9
+ };
10
+ export declare const encodeSignedDeviceIdentity: (account: proto.IADVSignedDeviceIdentity, includeSignatureKey: boolean) => Uint8Array<ArrayBufferLike>;
@@ -0,0 +1,10 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.encodeSignedDeviceIdentity=exports.configureSuccessfulPairing=exports.generateRegistrationNode=exports.generateLoginNode=void 0;
2
+ const boom_1=require("@hapi/boom"),crypto_1=require("crypto"),WAProto_1=require("../../WAProto"),Defaults_1=require("../Defaults"),WABinary_1=require("../WABinary"),crypto_2=require("./crypto"),generics_1=require("./generics"),signal_1=require("./signal"),getUserAgent=a=>({appVersion:{primary:a.version[0],secondary:a.version[1],tertiary:a.version[2]},platform:WAProto_1.proto.ClientPayload.UserAgent.Platform.WEB,releaseChannel:WAProto_1.proto.ClientPayload.UserAgent.ReleaseChannel.RELEASE,osVersion:"0.1",
3
+ device:"Desktop",osBuildNumber:"0.1",localeLanguageIso6391:"en",mnc:"000",mcc:"000",localeCountryIso31661Alpha2:a.countryCode}),PLATFORM_MAP={"Mac OS":WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.DARWIN,Windows:WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WIN32},getWebInfo=a=>{let b=WAProto_1.proto.ClientPayload.WebInfo.WebSubPlatform.WEB_BROWSER;a.syncFullHistory&&PLATFORM_MAP[a.browser[0]]&&(b=PLATFORM_MAP[a.browser[0]]);return{webSubPlatform:b}},getClientPayload=a=>{const b={connectType:WAProto_1.proto.ClientPayload.ConnectType.WIFI_UNKNOWN,
4
+ connectReason:WAProto_1.proto.ClientPayload.ConnectReason.USER_ACTIVATED,userAgent:getUserAgent(a)};b.webInfo=getWebInfo(a);return b},generateLoginNode=(a,b)=>{const {user:d,device:e}=(0,WABinary_1.jidDecode)(a);a={...getClientPayload(b),passive:!1,pull:!0,username:+d,device:e};return WAProto_1.proto.ClientPayload.fromObject(a)};exports.generateLoginNode=generateLoginNode;
5
+ const getPlatformType=a=>{a=a.toUpperCase();return WAProto_1.proto.DeviceProps.PlatformType[a]||WAProto_1.proto.DeviceProps.PlatformType.DESKTOP},generateRegistrationNode=({registrationId:a,signedPreKey:b,signedIdentityKey:d},e)=>{const g=(0,crypto_1.createHash)("md5").update(e.version.join(".")).digest();var c={os:e.browser[0],platformType:getPlatformType(e.browser[1]),requireFullSync:e.syncFullHistory};c=WAProto_1.proto.DeviceProps.encode(c).finish();a={...getClientPayload(e),passive:!1,pull:!1,
6
+ devicePairingData:{buildHash:g,deviceProps:c,eRegid:(0,generics_1.encodeBigEndian)(a),eKeytype:Defaults_1.KEY_BUNDLE_TYPE,eIdent:d.public,eSkeyId:(0,generics_1.encodeBigEndian)(b.keyId,3),eSkeyVal:b.keyPair.public,eSkeySig:b.signature}};return WAProto_1.proto.ClientPayload.fromObject(a)};exports.generateRegistrationNode=generateRegistrationNode;
7
+ const configureSuccessfulPairing=(a,{advSecretKey:b,signedIdentityKey:d,signalIdentities:e})=>{var g=a.attrs.id,c=(0,WABinary_1.getBinaryNodeChild)(a,"pair-success"),f=(0,WABinary_1.getBinaryNodeChild)(c,"device-identity");const k=(0,WABinary_1.getBinaryNodeChild)(c,"platform");var h=(0,WABinary_1.getBinaryNodeChild)(c,"device");c=(0,WABinary_1.getBinaryNodeChild)(c,"biz");if(!f||!h)throw new boom_1.Boom("Missing device-identity or device in pair success node",{data:a});a=null===c||void 0===c?void 0:
8
+ c.attrs.name;h=h.attrs.jid;const {details:m,hmac:p}=WAProto_1.proto.ADVSignedDeviceIdentityHMAC.decode(f.content);b=(0,crypto_2.hmacSign)(m,Buffer.from(b,"base64"));if(0!==Buffer.compare(p,b))throw new boom_1.Boom("Invalid account signature");b=WAProto_1.proto.ADVSignedDeviceIdentity.decode(m);const {accountSignatureKey:l,accountSignature:q,details:n}=b;f=Buffer.concat([Buffer.from([6,0]),n,d.public]);if(!crypto_2.Curve.verify(l,f,q))throw new boom_1.Boom("Failed to verify account signature");f=Buffer.concat([Buffer.from([6,
9
+ 1]),n,d.public,l]);b.deviceSignature=crypto_2.Curve.sign(d.private,f);d=(0,signal_1.createSignalIdentity)(h,l);f=(0,exports.encodeSignedDeviceIdentity)(b,!1);c=WAProto_1.proto.ADVDeviceIdentity.decode(b.details);g={tag:"iq",attrs:{to:WABinary_1.S_WHATSAPP_NET,type:"result",id:g},content:[{tag:"pair-device-sign",attrs:{},content:[{tag:"device-identity",attrs:{"key-index":c.keyIndex.toString()},content:f}]}]};return{creds:{account:b,me:{id:h,name:a},signalIdentities:[...(e||[]),d],platform:null===k||
10
+ void 0===k?void 0:k.attrs.name},reply:g}};exports.configureSuccessfulPairing=configureSuccessfulPairing;const encodeSignedDeviceIdentity=(a,b)=>{var d;a={...a};b&&null!==(d=a.accountSignatureKey)&&void 0!==d&&d.length||(a.accountSignatureKey=null);return WAProto_1.proto.ADVSignedDeviceIdentity.encode(a).finish()};exports.encodeSignedDeviceIdentity=encodeSignedDeviceIdentity;
@@ -0,0 +1,27 @@
1
+ export declare const TAGS: {
2
+ LIST_EMPTY: number;
3
+ DICTIONARY_0: number;
4
+ DICTIONARY_1: number;
5
+ DICTIONARY_2: number;
6
+ DICTIONARY_3: number;
7
+ AD_JID: number;
8
+ LIST_8: number;
9
+ LIST_16: number;
10
+ JID_PAIR: number;
11
+ HEX_8: number;
12
+ BINARY_8: number;
13
+ BINARY_20: number;
14
+ BINARY_32: number;
15
+ NIBBLE_8: number;
16
+ PACKED_MAX: number;
17
+ SINGLE_BYTE_MAX: number;
18
+ STREAM_END: number;
19
+ };
20
+ export declare const DOUBLE_BYTE_TOKENS: string[][];
21
+ export declare const SINGLE_BYTE_TOKENS: (string | null)[];
22
+ export declare const TOKEN_MAP: {
23
+ [token: string]: {
24
+ dict?: number;
25
+ index: number;
26
+ };
27
+ };
@@ -0,0 +1,6 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.TOKEN_MAP=exports.SINGLE_BYTE_TOKENS=exports.DOUBLE_BYTE_TOKENS=exports.TAGS=void 0;exports.TAGS={LIST_EMPTY:0,DICTIONARY_0:236,DICTIONARY_1:237,DICTIONARY_2:238,DICTIONARY_3:239,AD_JID:247,LIST_8:248,LIST_16:249,JID_PAIR:250,HEX_8:251,BINARY_8:252,BINARY_20:253,BINARY_32:254,NIBBLE_8:255,PACKED_MAX:127,SINGLE_BYTE_MAX:256,STREAM_END:2};
2
+ exports.DOUBLE_BYTE_TOKENS=["media-for1-1.cdn.whatsapp.net relay media-gru2-2.cdn.whatsapp.net uncompressed medium voip_settings device reason media-lim1-1.cdn.whatsapp.net media-qro1-2.cdn.whatsapp.net media-gru1-2.cdn.whatsapp.net action features media-gru2-1.cdn.whatsapp.net media-gru1-1.cdn.whatsapp.net media-otp1-1.cdn.whatsapp.net kyc-id priority phash mute token 100 media-qro1-1.cdn.whatsapp.net none media-mrs2-2.cdn.whatsapp.net sign_credential 03 media-mrs2-1.cdn.whatsapp.net protocol timezone transport eph_setting 1080 original_dimensions media-frx5-1.cdn.whatsapp.net background disable original_image_url 5 transaction-id direct_path 103 appointment_only request_image_url peer_pid address 105 104 102 media-cdt1-1.cdn.whatsapp.net 101 109 110 106 background_location v_id sync status-old 111 107 ppic media-scl2-1.cdn.whatsapp.net business_profile 108 invite 04 audio_duration media-mct1-1.cdn.whatsapp.net media-cdg2-1.cdn.whatsapp.net media-los2-1.cdn.whatsapp.net invis net voip_payload_type status-revoke-delay 404 state use_correct_order_for_hmac_sha1 ver media-mad1-1.cdn.whatsapp.net order 540 skey blinded_credential android contact_remove enable_downlink_relay_latency_only duration enable_vid_one_way_codec_nego 6 media-sof1-1.cdn.whatsapp.net accept all signed_credential media-atl3-1.cdn.whatsapp.net media-lhr8-1.cdn.whatsapp.net website 05 latitude media-dfw5-1.cdn.whatsapp.net forbidden enable_audio_piggyback_network_mtu_fix media-dfw5-2.cdn.whatsapp.net note.m4r media-atl3-2.cdn.whatsapp.net jb_nack_discard_count_fix longitude Opening.m4r media-arn2-1.cdn.whatsapp.net email timestamp admin media-pmo1-1.cdn.whatsapp.net America/Sao_Paulo contact_add media-sin6-1.cdn.whatsapp.net interactive 8000 acs_public_key sigquit_anr_detector_release_rollover_percent media.fmed1-2.fna.whatsapp.net groupadd enabled_for_video_upgrade latency_update_threshold media-frt3-2.cdn.whatsapp.net calls_row_constraint_layout media.fgbb2-1.fna.whatsapp.net mms4_media_retry_notification_encryption_enabled timeout media-sin6-3.cdn.whatsapp.net audio_nack_jitter_multiplier jb_discard_count_adjust_pct_rc audio_reserve_bps delta account_sync default media.fjed4-6.fna.whatsapp.net 06 lock_video_orientation media-frt3-1.cdn.whatsapp.net w:g2 media-sin6-2.cdn.whatsapp.net audio_nack_algo_mask media.fgbb2-2.fna.whatsapp.net media.fmed1-1.fna.whatsapp.net cond_range_target_bitrate mms4_server_error_receipt_encryption_enabled vid_rc_dyn fri cart_v1_1_order_message_changes_enabled reg_push jb_hist_deposit_value privatestats media.fist7-2.fna.whatsapp.net thu jb_discard_count_adjust_pct mon group_call_video_maximization_enabled mms_cat_v1_forward_hot_override_enabled audio_nack_new_rtt media.fsub2-3.fna.whatsapp.net media_upload_aggressive_retry_exponential_backoff_enabled tue wed media.fruh4-2.fna.whatsapp.net audio_nack_max_seq_req max_rtp_audio_packet_resends jb_hist_max_cdf_value 07 audio_nack_max_jb_delay mms_forward_partially_downloaded_video media-lcy1-1.cdn.whatsapp.net resume jb_inband_fec_aware new_commerce_entry_point_enabled 480 payments_upi_generate_qr_amount_limit sigquit_anr_detector_rollover_percent media.fsdu2-1.fna.whatsapp.net fbns aud_pkt_reorder_pct dec stop_probing_before_accept_send media_upload_max_aggressive_retries edit_business_profile_new_mode_enabled media.fhex4-1.fna.whatsapp.net media.fjed4-3.fna.whatsapp.net sigquit_anr_detector_64bit_rollover_percent cond_range_ema_jb_last_delay watls_enable_early_data_http_get media.fsdu2-2.fna.whatsapp.net message_qr_disambiguation_enabled media-mxp1-1.cdn.whatsapp.net sat vertical media.fruh4-5.fna.whatsapp.net 200 media-sof1-2.cdn.whatsapp.net -1 height product_catalog_hide_show_items_enabled deep_copy_frm_last tsoffline vp8/h.264 media.fgye5-3.fna.whatsapp.net media.ftuc1-2.fna.whatsapp.net smb_upsell_chat_banner_enabled canonical 08 9 . media.fgyd4-4.fna.whatsapp.net media.fsti4-1.fna.whatsapp.net mms_vcache_aggregation_enabled mms_hot_content_timespan_in_seconds nse_ver rte third_party_sticker_web_sync cond_range_target_total_bitrate media_upload_aggressive_retry_enabled instrument_spam_report_enabled disable_reconnect_tone move_media_folder_from_sister_app one_tap_calling_in_group_chat_size 10 storage_mgmt_banner_threshold_mb enable_backup_passive_mode sharechat_inline_player_enabled media.fcnq2-1.fna.whatsapp.net media.fhex4-2.fna.whatsapp.net media.fist6-3.fna.whatsapp.net ephemeral_drop_column_stage reconnecting_after_network_change_threshold_ms media-lhr8-2.cdn.whatsapp.net cond_jb_last_delay_ema_alpha entry_point_block_logging_enabled critical_event_upload_log_config respect_initial_bitrate_estimate smaller_image_thumbs_status_enabled media.fbtz1-4.fna.whatsapp.net media.fjed4-1.fna.whatsapp.net width 720 enable_frame_dropper enable_one_side_mode urn:xmpp:whatsapp:dirty new_sticker_animation_behavior_v2 media.flim3-2.fna.whatsapp.net media.fuio6-2.fna.whatsapp.net skip_forced_signaling dleq_proof status_video_max_bitrate lazy_send_probing_req enhanced_storage_management android_privatestats_endpoint_dit_enabled media.fscl13-2.fna.whatsapp.net video_duration".split(" "),"group_call_discoverability_enabled media.faep9-2.fna.whatsapp.net msgr bloks_loggedin_access_app_id db_status_migration_step watls_prefer_ip6 jabber:iq:privacy 68 media.fsaw1-11.fna.whatsapp.net mms4_media_conn_persist_enabled animated_stickers_thread_clean_up media.fcgk3-2.fna.whatsapp.net media.fcgk4-6.fna.whatsapp.net media.fgye5-2.fna.whatsapp.net media.flpb1-1.fna.whatsapp.net media.fsub2-1.fna.whatsapp.net media.fuio6-3.fna.whatsapp.net not-allowed partial_pjpeg_bw_threshold cap_estimated_bitrate mms_chatd_resume_check_over_thrift smb_upsell_business_profile_enabled product_catalog_webclient groups sigquit_anr_detector_release_updated_rollout syncd_key_rotation_enabled media.fdmm2-1.fna.whatsapp.net media-hou1-1.cdn.whatsapp.net remove_old_chat_notifications smb_biztools_deeplink_enabled use_downloadable_filters_int group_qr_codes_enabled max_receipt_processing_time optimistic_image_processing_enabled smaller_video_thumbs_status_enabled watls_early_data reconnecting_before_relay_failover_threshold_ms cond_range_packet_loss_pct groups_privacy_blacklist status-revoke-drop stickers_animated_thumbnail_download dedupe_transcode_shared_images dedupe_transcode_shared_videos media.fcnq2-2.fna.whatsapp.net media.fgyd4-1.fna.whatsapp.net media.fist7-1.fna.whatsapp.net media.flim3-3.fna.whatsapp.net add_contact_by_qr_enabled https://faq.whatsapp.com/payments multicast_limit_global sticker_notification_preview smb_better_catalog_list_adapters_enabled bloks_use_minscript_android pen_smoothing_enabled media.fcgk4-5.fna.whatsapp.net media.fevn1-3.fna.whatsapp.net media.fpoj7-1.fna.whatsapp.net media-arn2-2.cdn.whatsapp.net reconnecting_before_network_change_threshold_ms android_media_use_fresco_for_gifs cond_in_congestion status_image_max_edge sticker_search_enabled starred_stickers_web_sync db_blank_me_jid_migration_step media.fist6-2.fna.whatsapp.net media.ftuc1-1.fna.whatsapp.net 09 anr_fast_logs_upload_rollout camera_core_integration_enabled 11 third_party_sticker_caching thread_dump_contact_support wam_privatestats_enabled vcard_as_document_size_kb maxfpp fbip ephemeral_allow_group_members media-bom1-2.cdn.whatsapp.net media-xsp1-1.cdn.whatsapp.net disable_prewarm frequently_forwarded_max media.fbtz1-5.fna.whatsapp.net media.fevn7-1.fna.whatsapp.net media.fgyd4-2.fna.whatsapp.net sticker_tray_animation_fully_visible_items green_alert_banner_duration reconnecting_after_p2p_failover_threshold_ms connected share_biz_vcard_enabled stickers_animation 0a 1200 WhatsApp group_description_length p_v_id payments_upi_intent_transaction_limit frequently_forwarded_messages media-xsp1-2.cdn.whatsapp.net media.faep8-1.fna.whatsapp.net media.faep8-2.fna.whatsapp.net media.faep9-1.fna.whatsapp.net media.fdmm2-2.fna.whatsapp.net media.fgzt3-1.fna.whatsapp.net media.flim4-2.fna.whatsapp.net media.frao1-1.fna.whatsapp.net media.fscl9-2.fna.whatsapp.net media.fsub2-2.fna.whatsapp.net superadmin media.fbog10-1.fna.whatsapp.net media.fcgh28-1.fna.whatsapp.net media.fjdo10-1.fna.whatsapp.net third_party_animated_sticker_import delay_fec attachment_picker_refresh android_linked_devices_re_auth_enabled rc_dyn green_alert_block_jitter add_contact_logging_enabled biz_message_logging_enabled conversation_media_preview_v2 media-jnb1-1.cdn.whatsapp.net ab_key media.fcgk4-2.fna.whatsapp.net media.fevn1-1.fna.whatsapp.net media.fist6-1.fna.whatsapp.net media.fruh4-4.fna.whatsapp.net media.fsti4-2.fna.whatsapp.net mms_vcard_autodownload_size_kb watls_enabled notif_ch_override_off media.fsaw1-14.fna.whatsapp.net media.fscl13-1.fna.whatsapp.net db_group_participant_migration_step 1020 cond_range_sterm_rtt invites_logging_enabled triggered_block_enabled group_call_max_participants media-iad3-1.cdn.whatsapp.net product_catalog_open_deeplink shops_required_tos_version image_max_kbytes cond_low_quality_vid_mode db_receipt_migration_step jb_early_prob_hist_shrink media.fdmm2-3.fna.whatsapp.net media.fdmm2-4.fna.whatsapp.net media.fruh4-1.fna.whatsapp.net media.fsaw2-2.fna.whatsapp.net remove_geolocation_videos new_animation_behavior fieldstats_beacon_chance 403 authkey_reset_on_ban continuous_ptt_playback reconnecting_after_relay_failover_threshold_ms false group sun conversation_swipe_to_reply ephemeral_messages_setting smaller_video_thumbs_enabled md_device_sync_enabled bloks_shops_pdp_url_regex lasso_integration_enabled media-bom1-1.cdn.whatsapp.net new_backup_format_enabled 256 media.faep6-1.fna.whatsapp.net media.fasr1-1.fna.whatsapp.net media.fbtz1-7.fna.whatsapp.net media.fesb4-1.fna.whatsapp.net media.fjdo1-2.fna.whatsapp.net media.frba2-1.fna.whatsapp.net watls_no_dns 600 db_broadcast_me_jid_migration_step new_wam_runtime_enabled group_update enhanced_block_enabled sync_wifi_threshold_kb mms_download_nc_cat bloks_minification_enabled ephemeral_messages_enabled reject voip_outgoing_xml_signaling creator dl_bw payments_request_messages target_bitrate bloks_rendercore_enabled media-hbe1-1.cdn.whatsapp.net media-hel3-1.cdn.whatsapp.net media-kut2-2.cdn.whatsapp.net media-lax3-1.cdn.whatsapp.net media-lax3-2.cdn.whatsapp.net sticker_pack_deeplink_enabled hq_image_bw_threshold status_info voip dedupe_transcode_videos grp_uii_cleanup linked_device_max_count media.flim1-1.fna.whatsapp.net media.fsaw2-1.fna.whatsapp.net reconnecting_after_call_active_threshold_ms 1140 catalog_pdp_new_design media.fbtz1-10.fna.whatsapp.net media.fsaw1-15.fna.whatsapp.net 0b consumer_rc_provider mms_async_fast_forward_ttl jb_eff_size_fix voip_incoming_xml_signaling media_provider_share_by_uuid suspicious_links dedupe_transcode_images green_alert_modal_start media-cgk1-1.cdn.whatsapp.net media-lga3-1.cdn.whatsapp.net template_doc_mime_types important_messages user_add vcard_max_size_kb media.fada2-1.fna.whatsapp.net media.fbog2-5.fna.whatsapp.net media.fbtz1-3.fna.whatsapp.net media.fcgk3-1.fna.whatsapp.net media.fcgk7-1.fna.whatsapp.net media.flim1-3.fna.whatsapp.net media.fscl9-1.fna.whatsapp.net ctwa_context_enterprise_enabled media.fsaw1-13.fna.whatsapp.net media.fuio11-2.fna.whatsapp.net status_collapse_muted db_migration_level_force recent_stickers_web_sync bloks_session_state bloks_shops_enabled green_alert_setting_deep_links_enabled restrict_groups battery green_alert_block_start refresh ctwa_context_enabled md_messaging_enabled status_image_quality md_blocklist_v2_server media-del1-1.cdn.whatsapp.net 13 userrate a_v_id cond_rtt_ema_alpha invalid".split(" "),
3
+ "media.fada1-1.fna.whatsapp.net media.fadb3-2.fna.whatsapp.net media.fbhz2-1.fna.whatsapp.net media.fcor2-1.fna.whatsapp.net media.fjed4-2.fna.whatsapp.net media.flhe4-1.fna.whatsapp.net media.frak1-2.fna.whatsapp.net media.fsub6-3.fna.whatsapp.net media.fsub6-7.fna.whatsapp.net media.fvvi1-1.fna.whatsapp.net search_v5_eligible wam_real_time_enabled report_disk_event max_tx_rott_based_bitrate product media.fjdo10-2.fna.whatsapp.net video_frame_crc_sample_interval media_max_autodownload 15 h.264 wam_privatestats_buffer_count md_phash_v2_enabled account_transfer_enabled business_product_catalog enable_non_dyn_codec_param_fix is_user_under_epd_jurisdiction media.fbog2-4.fna.whatsapp.net media.fbtz1-2.fna.whatsapp.net media.fcfc1-1.fna.whatsapp.net media.fjed4-5.fna.whatsapp.net media.flhe4-2.fna.whatsapp.net media.flim1-2.fna.whatsapp.net media.flos5-1.fna.whatsapp.net android_key_store_auth_ver 010 anr_process_monitor delete_old_auth_key media.fcor10-3.fna.whatsapp.net storage_usage_enabled android_camera2_support_level dirty consumer_content_provider status_video_max_duration 0c bloks_cache_enabled media.fadb2-2.fna.whatsapp.net media.fbko1-1.fna.whatsapp.net media.fbtz1-9.fna.whatsapp.net media.fcgk4-4.fna.whatsapp.net media.fesb4-2.fna.whatsapp.net media.fevn1-2.fna.whatsapp.net media.fist2-4.fna.whatsapp.net media.fjdo1-1.fna.whatsapp.net media.fruh4-6.fna.whatsapp.net media.fsrg5-1.fna.whatsapp.net media.fsub6-6.fna.whatsapp.net minfpp 5000 locales video_max_bitrate use_new_auth_key bloks_http_enabled heartbeat_interval media.fbog11-1.fna.whatsapp.net ephemeral_group_query_ts fec_nack search_in_storage_usage c media-amt2-1.cdn.whatsapp.net linked_devices_ui_enabled 14 async_data_load_on_startup voip_incoming_xml_ack 16 db_migration_step init_bwe max_participants wam_buffer_count media.fada2-2.fna.whatsapp.net media.fadb3-1.fna.whatsapp.net media.fcor2-2.fna.whatsapp.net media.fdiy1-2.fna.whatsapp.net media.frba3-2.fna.whatsapp.net media.fsaw2-3.fna.whatsapp.net 1280 status_grid_enabled w:biz product_catalog_deeplink media.fgye10-2.fna.whatsapp.net media.fuio11-1.fna.whatsapp.net optimistic_upload work_manager_init lc catalog_message cond_net_medium enable_periodical_aud_rr_processing cond_range_ema_rtt media-tir2-1.cdn.whatsapp.net frame_ms group_invite_sending payments_web_enabled wallpapers_v2 0d browser hq_image_max_edge image_edit_zoom linked_devices_re_auth_enabled media.faly3-2.fna.whatsapp.net media.fdoh5-3.fna.whatsapp.net media.fesb3-1.fna.whatsapp.net media.fknu1-1.fna.whatsapp.net media.fmex3-1.fna.whatsapp.net media.fruh4-3.fna.whatsapp.net 255 web_upgrade_to_md_modal audio_piggyback_timeout_msec enable_audio_oob_fec_feature from_ip image_max_edge message_qr_enabled powersave receipt_pre_acking video_max_edge full 011 012 enable_audio_oob_fec_for_sender md_voip_enabled enable_privatestats max_fec_ratio payments_cs_faq_url media-xsp1-3.cdn.whatsapp.net hq_image_quality media.fasr1-2.fna.whatsapp.net media.fbog3-1.fna.whatsapp.net media.ffjr1-6.fna.whatsapp.net media.fist2-3.fna.whatsapp.net media.flim4-3.fna.whatsapp.net media.fpbc2-4.fna.whatsapp.net media.fpku1-1.fna.whatsapp.net media.frba1-1.fna.whatsapp.net media.fudi1-1.fna.whatsapp.net media.fvvi1-2.fna.whatsapp.net gcm_fg_service enable_dec_ltr_size_check clear lg media.fgru11-1.fna.whatsapp.net 18 media-lga3-2.cdn.whatsapp.net pkey 0e max_subject cond_range_lterm_rtt announcement_groups biz_profile_options s_t media.fabv2-1.fna.whatsapp.net media.fcai3-1.fna.whatsapp.net media.fcgh1-1.fna.whatsapp.net media.fctg1-4.fna.whatsapp.net media.fdiy1-1.fna.whatsapp.net media.fisb4-1.fna.whatsapp.net media.fpku1-2.fna.whatsapp.net media.fros9-1.fna.whatsapp.net status_v3_text usync_sidelist 17 announcement ... md_group_notification 0f animated_pack_in_store 013 America/Mexico_City 1260 media-ams4-1.cdn.whatsapp.net media-cgk1-2.cdn.whatsapp.net media-cpt1-1.cdn.whatsapp.net media-maa2-1.cdn.whatsapp.net media.fgye10-1.fna.whatsapp.net e catalog_cart hfm_string_changes init_bitrate packless_hsm group_info America/Belem 50 960 cond_range_bwe decode encode media.fada1-8.fna.whatsapp.net media.fadb1-2.fna.whatsapp.net media.fasu6-1.fna.whatsapp.net media.fbog4-1.fna.whatsapp.net media.fcgk9-2.fna.whatsapp.net media.fdoh5-2.fna.whatsapp.net media.ffjr1-2.fna.whatsapp.net media.fgua1-1.fna.whatsapp.net media.fgye1-1.fna.whatsapp.net media.fist1-4.fna.whatsapp.net media.fpbc2-2.fna.whatsapp.net media.fres2-1.fna.whatsapp.net media.fsdq1-2.fna.whatsapp.net media.fsub6-5.fna.whatsapp.net profilo_enabled template_hsm use_disorder_prefetching_timer video_codec_priority vpx_max_qp ptt_reduce_recording_delay 25 iphone Windows s_o Africa/Lagos abt media-kut2-1.cdn.whatsapp.net media-mba1-1.cdn.whatsapp.net media-mxp1-2.cdn.whatsapp.net md_blocklist_v2 url_text enable_short_offset group_join_permissions enable_audio_piggyback_feature image_quality media.fcgk7-2.fna.whatsapp.net media.fcgk8-2.fna.whatsapp.net media.fclo7-1.fna.whatsapp.net media.fcmn1-1.fna.whatsapp.net media.feoh1-1.fna.whatsapp.net media.fgyd4-3.fna.whatsapp.net media.fjed4-4.fna.whatsapp.net media.flim1-4.fna.whatsapp.net media.flim2-4.fna.whatsapp.net media.fplu6-1.fna.whatsapp.net media.frak1-1.fna.whatsapp.net media.fsdq1-1.fna.whatsapp.net to_ip 015 vp8 19 21 1320 auth_key_ver message_processing_dedup server-error wap4_enabled 420 014 cond_range_rtt ptt_fast_lock_enabled media-ort2-1.cdn.whatsapp.net fwd_ui_start_ts".split(" "),
4
+ "contact_blacklist Asia/Jakarta media.fepa10-1.fna.whatsapp.net media.fmex10-3.fna.whatsapp.net disorder_prefetching_start_when_empty America/Bogota use_local_probing_rx_bitrate America/Argentina/Buenos_Aires cross_post media.fabb1-1.fna.whatsapp.net media.fbog4-2.fna.whatsapp.net media.fcgk9-1.fna.whatsapp.net media.fcmn2-1.fna.whatsapp.net media.fdel3-1.fna.whatsapp.net media.ffjr1-1.fna.whatsapp.net media.fgdl5-1.fna.whatsapp.net media.flpb1-2.fna.whatsapp.net media.fmex2-1.fna.whatsapp.net media.frba2-2.fna.whatsapp.net media.fros2-2.fna.whatsapp.net media.fruh2-1.fna.whatsapp.net media.fybz2-2.fna.whatsapp.net options 20 a 017 018 mute_always user_notice Asia/Kolkata gif_provider locked media-gua1-1.cdn.whatsapp.net piggyback_exclude_force_flush 24 media.frec39-1.fna.whatsapp.net user_remove file_max_size cond_packet_loss_pct_ema_alpha media.facc1-1.fna.whatsapp.net media.fadb2-1.fna.whatsapp.net media.faly3-1.fna.whatsapp.net media.fbdo6-2.fna.whatsapp.net media.fcmn2-2.fna.whatsapp.net media.fctg1-3.fna.whatsapp.net media.ffez1-2.fna.whatsapp.net media.fist1-3.fna.whatsapp.net media.fist2-2.fna.whatsapp.net media.flim2-2.fna.whatsapp.net media.fmct2-3.fna.whatsapp.net media.fpei3-1.fna.whatsapp.net media.frba3-1.fna.whatsapp.net media.fsdu8-2.fna.whatsapp.net media.fstu2-1.fna.whatsapp.net media_type receipt_agg 016 enable_pli_for_crc_mismatch live enc_rekey frskmsg d media.fdel11-2.fna.whatsapp.net proto 2250 audio_piggyback_enable_cache skip_nack_if_ltrp_sent mark_dtx_jb_frames web_service_delay 7282 catalog_send_all outgoing 360 30 LIMITED 019 audio_picker bpv2_phase media.fada1-7.fna.whatsapp.net media.faep7-1.fna.whatsapp.net media.fbko1-2.fna.whatsapp.net media.fbni1-2.fna.whatsapp.net media.fbtz1-1.fna.whatsapp.net media.fbtz1-8.fna.whatsapp.net media.fcjs3-1.fna.whatsapp.net media.fesb3-2.fna.whatsapp.net media.fgdl5-4.fna.whatsapp.net media.fist2-1.fna.whatsapp.net media.flhe2-2.fna.whatsapp.net media.flim2-1.fna.whatsapp.net media.fmex1-1.fna.whatsapp.net media.fpat3-2.fna.whatsapp.net media.fpat3-3.fna.whatsapp.net media.fros2-1.fna.whatsapp.net media.fsdu8-1.fna.whatsapp.net media.fsub3-2.fna.whatsapp.net payments_chat_plugin cond_congestion_no_rtcp_thr green_alert not-a-biz .. shops_pdp_urls_config source media-dus1-1.cdn.whatsapp.net mute_video 01b currency max_keys resume_check contact_array qr_scanning 23 b media.fbfh15-1.fna.whatsapp.net media.flim22-1.fna.whatsapp.net media.fsdu11-1.fna.whatsapp.net media.fsdu15-1.fna.whatsapp.net Chrome fts_version 60 media.fada1-6.fna.whatsapp.net media.faep4-2.fna.whatsapp.net media.fbaq5-1.fna.whatsapp.net media.fbni1-1.fna.whatsapp.net media.fcai3-2.fna.whatsapp.net media.fdel3-2.fna.whatsapp.net media.fdmm3-2.fna.whatsapp.net media.fhex3-1.fna.whatsapp.net media.fisb4-2.fna.whatsapp.net media.fkhi5-2.fna.whatsapp.net media.flos2-1.fna.whatsapp.net media.fmct2-1.fna.whatsapp.net media.fntr7-1.fna.whatsapp.net media.frak3-1.fna.whatsapp.net media.fruh5-2.fna.whatsapp.net media.fsub6-1.fna.whatsapp.net media.fuab1-2.fna.whatsapp.net media.fuio1-1.fna.whatsapp.net media.fver1-1.fna.whatsapp.net media.fymy1-1.fna.whatsapp.net product_catalog 1380 audio_oob_fec_max_pkts 22 254 media-ort2-2.cdn.whatsapp.net media-sjc3-1.cdn.whatsapp.net 1600 01a 01c 405 key_frame_interval body media.fcgh20-1.fna.whatsapp.net media.fesb10-2.fna.whatsapp.net 125 2000 media.fbsb1-1.fna.whatsapp.net media.fcmn3-2.fna.whatsapp.net media.fcpq1-1.fna.whatsapp.net media.fdel1-2.fna.whatsapp.net media.ffor2-1.fna.whatsapp.net media.fgdl1-4.fna.whatsapp.net media.fhex2-1.fna.whatsapp.net media.fist1-2.fna.whatsapp.net media.fjed5-2.fna.whatsapp.net media.flim6-4.fna.whatsapp.net media.flos2-2.fna.whatsapp.net media.fntr6-2.fna.whatsapp.net media.fpku3-2.fna.whatsapp.net media.fros8-1.fna.whatsapp.net media.fymy1-2.fna.whatsapp.net ul_bw ltrp_qp_offset request nack dtx_delay_state_reset timeoffline 28 01f 32 enable_ltr_pool wa_msys_crypto 01d 58 dtx_freeze_hg_update nack_if_rpsi_throttled 253 840 media.famd15-1.fna.whatsapp.net media.fbog17-2.fna.whatsapp.net media.fcai19-2.fna.whatsapp.net media.fcai21-4.fna.whatsapp.net media.fesb10-4.fna.whatsapp.net media.fesb10-5.fna.whatsapp.net media.fmaa12-1.fna.whatsapp.net media.fmex11-3.fna.whatsapp.net media.fpoa33-1.fna.whatsapp.net 1050 021 clean cond_range_ema_packet_loss_pct media.fadb6-5.fna.whatsapp.net media.faqp4-1.fna.whatsapp.net media.fbaq3-1.fna.whatsapp.net media.fbel2-1.fna.whatsapp.net media.fblr4-2.fna.whatsapp.net media.fclo8-1.fna.whatsapp.net media.fcoo1-2.fna.whatsapp.net media.ffjr1-4.fna.whatsapp.net media.ffor9-1.fna.whatsapp.net media.fisb3-1.fna.whatsapp.net media.fkhi2-2.fna.whatsapp.net media.fkhi4-1.fna.whatsapp.net media.fpbc1-2.fna.whatsapp.net media.fruh2-2.fna.whatsapp.net media.fruh5-1.fna.whatsapp.net media.fsub3-1.fna.whatsapp.net payments_transaction_limit 252 27 29 tintagel 01e 237 780 callee_updated_payload 020 257 price 025 239 payments_cs_phone_number mediaretry w:auth:backup:token Glass.caf max_bitrate 240 251 660 media.fbog16-1.fna.whatsapp.net media.fcgh21-1.fna.whatsapp.net media.fkul19-2.fna.whatsapp.net media.flim21-2.fna.whatsapp.net media.fmex10-4.fna.whatsapp.net 64 33 34 35 interruption media.fabv3-1.fna.whatsapp.net media.fadb6-1.fna.whatsapp.net media.fagr1-1.fna.whatsapp.net media.famd1-1.fna.whatsapp.net media.famm6-1.fna.whatsapp.net media.faqp2-3.fna.whatsapp.net".split(" ")];
5
+ exports.SINGLE_BYTE_TOKENS=" xmlstreamstart xmlstreamend s.whatsapp.net type participant from receipt id broadcast status message notification notify to jid user class offline g.us result mediatype enc skmsg off_cnt xmlns presence participants ack t iq device_hash read value media picture chatstate unavailable text urn:xmpp:whatsapp:push devices verified_name contact composing edge_routing routing_info item image verified_level get fallback_hostname 2 media_conn 1 v handshake fallback_class count config offline_preview download_buckets w:profile:picture set creation location fallback_ip4 msg urn:xmpp:ping fallback_ip6 call-creator relaylatency success subscribe video business_hours_config platform hostname version unknown 0 ping hash edit subject max_buckets download delivery props sticker name last contacts business primary preview w:p pkmsg call-id retry prop call auth_ttl available relay_id last_id day_of_week w host seen bits list atn upload is_new w:stats key paused specific_hours multicast stream:error mmg.whatsapp.net code deny played profile fna device-list close_time latency gcm pop audio 26 w:web open_time error auth ip4 update profile_options config_value category catalog_not_created 00 config_code mode catalog_status ip6 blocklist registration 7 web fail w:m cart_enabled ttl gif 300 device_orientation identity query 401 media-gig2-1.cdn.whatsapp.net in 3 te2 add fallback categories ptt encrypt notice thumbnail-document item-not-found 12 thumbnail-image stage thumbnail-link usync out thumbnail-video 8 01 context sidelist thumbnail-gif terminate not-authorized orientation dhash capability side_list md-app-state description serial readreceipts te business_hours md-msg-hist tag attribute_padding document open_24h delete expiration active prev_v_id true passive index 4 conflict remove w:gp2 config_expo_key screen_height replaced 02 screen_width uploadfieldstat 2:47DEQpj8 media-bog1-1.cdn.whatsapp.net encopt url catalog_exists keygen rate offer opus media-mia3-1.cdn.whatsapp.net privacy media-mia3-2.cdn.whatsapp.net signature preaccept token_id media-eze1-1.cdn.whatsapp.net".split(" ");
6
+ exports.TOKEN_MAP={};for(const [a,b]of exports.SINGLE_BYTE_TOKENS.entries())exports.TOKEN_MAP[b]={index:a};for(const [a,b]of exports.DOUBLE_BYTE_TOKENS.entries())for(const [c,d]of b.entries())exports.TOKEN_MAP[d]={dict:a,index:c};
@@ -0,0 +1,6 @@
1
+ import type { BinaryNode, BinaryNodeCodingOptions } from './types';
2
+ export declare const decompressingIfRequired: (buffer: Buffer) => Promise<Buffer<ArrayBufferLike>>;
3
+ export declare const decodeDecompressedBinaryNode: (buffer: Buffer, opts: Pick<BinaryNodeCodingOptions, "DOUBLE_BYTE_TOKENS" | "SINGLE_BYTE_TOKENS" | "TAGS">, indexRef?: {
4
+ index: number;
5
+ }) => BinaryNode;
6
+ export declare const decodeBinaryNode: (buff: Buffer) => Promise<BinaryNode>;
@@ -0,0 +1,9 @@
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(c,f,e,k){void 0===k&&(k=e);var g=Object.getOwnPropertyDescriptor(f,e);if(!g||("get"in g?!f.__esModule:g.writable||g.configurable))g={enumerable:!0,get:function(){return f[e]}};Object.defineProperty(c,k,g)}:function(c,f,e,k){void 0===k&&(k=e);c[k]=f[e]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(c,f){Object.defineProperty(c,"default",{enumerable:!0,value:f})}:function(c,f){c["default"]=f}),__importStar=
2
+ this&&this.__importStar||function(){var c=function(f){c=Object.getOwnPropertyNames||function(e){var k=[],g;for(g in e)Object.prototype.hasOwnProperty.call(e,g)&&(k[k.length]=g);return k};return c(f)};return function(f){if(f&&f.__esModule)return f;var e={};if(null!=f)for(var k=c(f),g=0;g<k.length;g++)"default"!==k[g]&&__createBinding(e,f,k[g]);__setModuleDefault(e,f);return e}}();Object.defineProperty(exports,"__esModule",{value:!0});
3
+ exports.decodeBinaryNode=exports.decodeDecompressedBinaryNode=exports.decompressingIfRequired=void 0;const util_1=require("util"),zlib_1=require("zlib"),constants=__importStar(require("./constants")),jid_utils_1=require("./jid-utils"),inflatePromise=(0,util_1.promisify)(zlib_1.inflate),decompressingIfRequired=async c=>c=2&c.readUInt8()?await inflatePromise(c.slice(1)):c.slice(1);exports.decompressingIfRequired=decompressingIfRequired;
4
+ const decodeDecompressedBinaryNode=(c,f,e={index:0})=>{const {DOUBLE_BYTE_TOKENS:k,SINGLE_BYTE_TOKENS:g,TAGS:d}=f,u=a=>{if(e.index+a>c.length)throw Error("end of stream");},t=()=>{const a=c[e.index];e.index+=1;return a},l=()=>{u(1);return t()},q=a=>{u(a);const b=c.slice(e.index,e.index+a);e.index+=a;return b},w=(a,b=!1)=>{u(a);let h=0;for(let n=0;n<a;n++){const v=b?n:a-1-n;h|=t()<<8*v}return h},z=()=>{u(3);return((t()&15)<<16)+(t()<<8)+t()},D=a=>{if(0<=a&&9>=a)return 48+a;switch(a){case 10:return 45;
5
+ case 11:return 46;case 15:return 0;default:throw Error("invalid nibble: "+a);}},A=(a,b)=>{if(a===d.NIBBLE_8)return D(b);if(a===d.HEX_8){if(!(0<=b&&16>b))throw Error("invalid hex: "+b);return 10>b?48+b:65+b-10}throw Error("unknown tag: "+a);},B=a=>{switch(a){case d.LIST_EMPTY:return 0;case d.LIST_8:return l();case d.LIST_16:return w(2);default:throw Error("invalid tag for list size: "+a);}},p=a=>{if(1<=a&&a<g.length)return g[a]||"";switch(a){case d.DICTIONARY_0:case d.DICTIONARY_1:case d.DICTIONARY_2:case d.DICTIONARY_3:var b=
6
+ a-d.DICTIONARY_0;a=l();var h=k[b];if(!h)throw Error(`Invalid double token dict (${b})`);b=h[a];if("undefined"===typeof b)throw Error(`Invalid double token (${a})`);return b;case d.LIST_EMPTY:return"";case d.BINARY_8:return q(l()).toString("utf-8");case d.BINARY_20:return q(z()).toString("utf-8");case d.BINARY_32:return q(w(4)).toString("utf-8");case d.JID_PAIR:a=p(l());if(b=p(l()))a=(a||"")+"@"+b;else throw Error("invalid jid pair: "+a+", "+b);return a;case d.AD_JID:return a=l(),a=Number(a),b=l(),
7
+ h=p(l()),(0,jid_utils_1.jidEncode)(h,0===a||128===a?"s.whatsapp.net":"lid",b);case d.HEX_8:case d.NIBBLE_8:b=l();h="";for(let n=0;n<(b&127);n++){const v=l();h+=String.fromCharCode(A(a,(v&240)>>4));h+=String.fromCharCode(A(a,v&15))}0!==b>>7&&(h=h.slice(0,-1));return h;default:throw Error("invalid string with tag: "+a);}};var r=a=>{const b=[];a=B(a);for(let h=0;h<a;h++)b.push((0,exports.decodeDecompressedBinaryNode)(c,f,e));return b},m=B(l());const x=p(l());if(!m||!x.length)throw Error("invalid node");
8
+ const C={};let y;if(0===m||!x)throw Error("invalid node");const E=m-1>>1;for(let a=0;a<E;a++){const b=p(l()),h=p(l());C[b]=h}if(0===m%2)if(m=l(),m===d.LIST_EMPTY||m===d.LIST_8||m===d.LIST_16)y=r(m);else{switch(m){case d.BINARY_8:r=q(l());break;case d.BINARY_20:r=q(z());break;case d.BINARY_32:r=q(w(4));break;default:r=p(m)}y=r}return{tag:x,attrs:C,content:y}};exports.decodeDecompressedBinaryNode=decodeDecompressedBinaryNode;
9
+ const decodeBinaryNode=async c=>{c=await (0,exports.decompressingIfRequired)(c);return(0,exports.decodeDecompressedBinaryNode)(c,constants)};exports.decodeBinaryNode=decodeBinaryNode;
@@ -0,0 +1,2 @@
1
+ import type { BinaryNode, BinaryNodeCodingOptions } from './types';
2
+ export declare const encodeBinaryNode: (node: BinaryNode, opts?: Pick<BinaryNodeCodingOptions, "TAGS" | "TOKEN_MAP">, buffer?: number[]) => Buffer;
@@ -0,0 +1,9 @@
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(f,d,c,h){void 0===h&&(h=c);var b=Object.getOwnPropertyDescriptor(d,c);if(!b||("get"in b?!d.__esModule:b.writable||b.configurable))b={enumerable:!0,get:function(){return d[c]}};Object.defineProperty(f,h,b)}:function(f,d,c,h){void 0===h&&(h=c);f[h]=d[c]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(f,d){Object.defineProperty(f,"default",{enumerable:!0,value:d})}:function(f,d){f["default"]=d}),__importStar=
2
+ this&&this.__importStar||function(){var f=function(d){f=Object.getOwnPropertyNames||function(c){var h=[],b;for(b in c)Object.prototype.hasOwnProperty.call(c,b)&&(h[h.length]=b);return h};return f(d)};return function(d){if(d&&d.__esModule)return d;var c={};if(null!=d)for(var h=f(d),b=0;b<h.length;b++)"default"!==h[b]&&__createBinding(c,d,h[b]);__setModuleDefault(c,d);return c}}();Object.defineProperty(exports,"__esModule",{value:!0});exports.encodeBinaryNode=void 0;
3
+ const constants=__importStar(require("./constants")),jid_utils_1=require("./jid-utils"),encodeBinaryNode=(f,d=constants,c=[0])=>{f=encodeBinaryNodeInner(f,d,c);return Buffer.from(f)};exports.encodeBinaryNode=encodeBinaryNode;
4
+ const encodeBinaryNodeInner=({tag:f,attrs:d,content:c},h,b)=>{const {TAGS:k,TOKEN_MAP:v}=h,w=(a,e,g=!1)=>{for(let l=0;l<e;l++)b.push(a>>8*(g?l:e-1-l)&255)},n=a=>{for(const e of a)b.push(e)},q=a=>{if(4294967296<=a)throw Error("string too large to encode: "+a);1048576<=a?(b.push(k.BINARY_32&255),w(a,4)):256<=a?(b.push(k.BINARY_20&255),n([a>>16&15,a>>8&255,a&255])):(b.push(k.BINARY_8&255),b.push(a&255))},x=({domainType:a,device:e,user:g,server:l})=>{"undefined"!==typeof e?(b.push(k.AD_JID&255),b.push((a||
5
+ 0)&255),b.push((e||0)&255),m(g)):(b.push(k.JID_PAIR&255),g.length?m(g):b.push(k.LIST_EMPTY&255),m(l))},y=a=>{switch(a){case "-":return 10;case ".":return 11;case "\x00":return 15;default:if("0"<=a&&"9">=a)return a.charCodeAt(0)-48;throw Error(`invalid byte for nibble "${a}"`);}},z=a=>{if("0"<=a&&"9">=a)return a.charCodeAt(0)-48;if("A"<=a&&"F">=a)return 10+a.charCodeAt(0)-65;if("a"<=a&&"f">=a)return 10+a.charCodeAt(0)-97;if("\x00"===a)return 15;throw Error(`Invalid hex char "${a}"`);},r=(a,e)=>{if(a.length>
6
+ k.PACKED_MAX)throw Error("Too many bytes to pack");b.push(("nibble"===e?k.NIBBLE_8:k.HEX_8)&255);var g=Math.ceil(a.length/2);0!==a.length%2&&(g|=128);b.push(g&255);e="nibble"===e?y:z;g=Math.floor(a.length/2);for(let p=0;p<g;p++){var l=a[2*p+1];l=e(a[2*p])<<4|e(l);b.push(l&255)}0!==a.length%2&&(a=e(a[a.length-1])<<4|e("\x00"),b.push(a&255))},m=a=>{if(void 0===a||null===a)b.push(k.LIST_EMPTY&255);else{var e=v[a];if(e)"number"===typeof e.dict&&b.push(k.DICTIONARY_0+e.dict&255),b.push(e.index&255);else{a:if(!a||
7
+ a.length>k.PACKED_MAX)e=!1;else{for(const l of a)if(!("0"<=l&&"9">=l)&&"-"!==l&&"."!==l){e=!1;break a}e=!0}if(e)r(a,"nibble");else{a:if(!a||a.length>k.PACKED_MAX)var g=!1;else{for(g of a)if(!("0"<=g&&"9">=g||"A"<=g&&"F">=g)){g=!1;break a}g=!0}g?r(a,"hex"):a&&((g=(0,jid_utils_1.jidDecode)(a))?x(g):(a=Buffer.from(a,"utf-8"),q(a.length),n(a)))}}}},t=a=>{0===a?b.push(k.LIST_EMPTY&255):256>a?n([k.LIST_8,a]):(b.push(k.LIST_16&255),n([a>>8&255,a&255]))};if(!f)throw Error("Invalid node: tag cannot be undefined");
8
+ const u=Object.keys(d||{}).filter(a=>"undefined"!==typeof d[a]&&null!==d[a]);t(2*u.length+1+("undefined"!==typeof c?1:0));m(f);for(const a of u)"string"===typeof d[a]&&(m(a),m(d[a]));if("string"===typeof c)m(c);else if(Buffer.isBuffer(c)||c instanceof Uint8Array)q(c.length),n(c);else if(Array.isArray(c)){f=c.filter(a=>a&&(a.tag||Buffer.isBuffer(a)||a instanceof Uint8Array||"string"===typeof a));t(f.length);for(const a of f)encodeBinaryNodeInner(a,h,b)}else if("undefined"!==typeof c)throw Error(`invalid children for header "${f}": ${c} (${typeof c})`);
9
+ return b};
@@ -0,0 +1,14 @@
1
+ import { proto } from '../../WAProto';
2
+ import { BinaryNode } from './types';
3
+ export declare const getBinaryNodeChildren: (node: BinaryNode | undefined, childTag: string) => BinaryNode[];
4
+ export declare const getAllBinaryNodeChildren: ({ content }: BinaryNode) => BinaryNode[];
5
+ export declare const getBinaryNodeChild: (node: BinaryNode | undefined, childTag: string) => BinaryNode | undefined;
6
+ export declare const getBinaryNodeChildBuffer: (node: BinaryNode | undefined, childTag: string) => Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike> | undefined;
7
+ export declare const getBinaryNodeChildString: (node: BinaryNode | undefined, childTag: string) => string | undefined;
8
+ export declare const getBinaryNodeChildUInt: (node: BinaryNode, childTag: string, length: number) => number | undefined;
9
+ export declare const assertNodeErrorFree: (node: BinaryNode) => void;
10
+ export declare const reduceBinaryNodeToDictionary: (node: BinaryNode, tag: string) => {
11
+ [_: string]: string;
12
+ };
13
+ export declare const getBinaryNodeMessages: ({ content }: BinaryNode) => proto.WebMessageInfo[];
14
+ export declare function binaryNodeToString(node: BinaryNode | BinaryNode['content'], i?: number): any;
@@ -0,0 +1,7 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0});exports.getBinaryNodeMessages=exports.reduceBinaryNodeToDictionary=exports.assertNodeErrorFree=exports.getBinaryNodeChildUInt=exports.getBinaryNodeChildString=exports.getBinaryNodeChildBuffer=exports.getBinaryNodeChild=exports.getAllBinaryNodeChildren=exports.getBinaryNodeChildren=void 0;exports.binaryNodeToString=binaryNodeToString;
2
+ const boom_1=require("@hapi/boom"),WAProto_1=require("../../WAProto"),getBinaryNodeChildren=(a,c)=>Array.isArray(null===a||void 0===a?void 0:a.content)?a.content.filter(b=>b.tag===c):[];exports.getBinaryNodeChildren=getBinaryNodeChildren;const getAllBinaryNodeChildren=({content:a})=>Array.isArray(a)?a:[];exports.getAllBinaryNodeChildren=getAllBinaryNodeChildren;
3
+ const getBinaryNodeChild=(a,c)=>{if(Array.isArray(null===a||void 0===a?void 0:a.content))return null===a||void 0===a?void 0:a.content.find(b=>b.tag===c)};exports.getBinaryNodeChild=getBinaryNodeChild;const getBinaryNodeChildBuffer=(a,c)=>{var b;a=null===(b=(0,exports.getBinaryNodeChild)(a,c))||void 0===b?void 0:b.content;if(Buffer.isBuffer(a)||a instanceof Uint8Array)return a};exports.getBinaryNodeChildBuffer=getBinaryNodeChildBuffer;
4
+ const getBinaryNodeChildString=(a,c)=>{var b;a=null===(b=(0,exports.getBinaryNodeChild)(a,c))||void 0===b?void 0:b.content;if(Buffer.isBuffer(a)||a instanceof Uint8Array)return Buffer.from(a).toString("utf-8");if("string"===typeof a)return a};exports.getBinaryNodeChildString=getBinaryNodeChildString;const getBinaryNodeChildUInt=(a,c,b)=>{if(a=(0,exports.getBinaryNodeChildBuffer)(a,c))return bufferToUInt(a,b)};exports.getBinaryNodeChildUInt=getBinaryNodeChildUInt;
5
+ const assertNodeErrorFree=a=>{if(a=(0,exports.getBinaryNodeChild)(a,"error"))throw new boom_1.Boom(a.attrs.text||"Unknown error",{data:+a.attrs.code});};exports.assertNodeErrorFree=assertNodeErrorFree;const reduceBinaryNodeToDictionary=(a,c)=>(0,exports.getBinaryNodeChildren)(a,c).reduce((b,{attrs:d})=>{b[d.name||d.config_code]=d.value||d.config_value;return b},{});exports.reduceBinaryNodeToDictionary=reduceBinaryNodeToDictionary;
6
+ const getBinaryNodeMessages=({content:a})=>{const c=[];if(Array.isArray(a))for(const b of a)"message"===b.tag&&c.push(WAProto_1.proto.WebMessageInfo.decode(b.content));return c};exports.getBinaryNodeMessages=getBinaryNodeMessages;function bufferToUInt(a,c){let b=0;for(let d=0;d<c;d++)b=256*b+a[d];return b}const tabs=a=>"\t".repeat(a);
7
+ function binaryNodeToString(a,c=0){if(!a)return a;if("string"===typeof a)return tabs(c)+a;if(a instanceof Uint8Array)return tabs(c)+Buffer.from(a).toString("hex");if(Array.isArray(a))return a.map(e=>tabs(c+1)+binaryNodeToString(e,c+1)).join("\n");const b=binaryNodeToString(a.content,c+1),d=`<${a.tag} ${Object.entries(a.attrs||{}).filter(([,e])=>void 0!==e).map(([e,f])=>`${e}='${f}'`).join(" ")}`;a=b?`>\n${b}\n${tabs(c)}</${a.tag}>`:"/>";return d+a};
@@ -0,0 +1,5 @@
1
+ export * from './encode';
2
+ export * from './decode';
3
+ export * from './generic-utils';
4
+ export * from './jid-utils';
5
+ export * from './types';
@@ -0,0 +1,2 @@
1
+ var __createBinding=this&&this.__createBinding||(Object.create?function(d,b,a,c){void 0===c&&(c=a);var e=Object.getOwnPropertyDescriptor(b,a);if(!e||("get"in e?!b.__esModule:e.writable||e.configurable))e={enumerable:!0,get:function(){return b[a]}};Object.defineProperty(d,c,e)}:function(d,b,a,c){void 0===c&&(c=a);d[c]=b[a]}),__exportStar=this&&this.__exportStar||function(d,b){for(var a in d)"default"===a||Object.prototype.hasOwnProperty.call(b,a)||__createBinding(b,d,a)};
2
+ Object.defineProperty(exports,"__esModule",{value:!0});__exportStar(require("./encode"),exports);__exportStar(require("./decode"),exports);__exportStar(require("./generic-utils"),exports);__exportStar(require("./jid-utils"),exports);__exportStar(require("./types"),exports);
@@ -0,0 +1,35 @@
1
+ export declare const S_WHATSAPP_NET = "@s.whatsapp.net";
2
+ export declare const OFFICIAL_BIZ_JID = "16505361212@c.us";
3
+ export declare const SERVER_JID = "server@c.us";
4
+ export declare const PSA_WID = "0@c.us";
5
+ export declare const STORIES_JID = "status@broadcast";
6
+ export declare const META_AI_JID = "13135550002@c.us";
7
+ export type JidServer = 'c.us' | 'g.us' | 'broadcast' | 's.whatsapp.net' | 'call' | 'lid' | 'newsletter' | 'bot';
8
+ export type JidWithDevice = {
9
+ user: string;
10
+ device?: number;
11
+ };
12
+ export type FullJid = JidWithDevice & {
13
+ server: JidServer;
14
+ domainType?: number;
15
+ };
16
+ export declare const jidEncode: (user: string | number | null, server: JidServer, device?: number, agent?: number) => string;
17
+ export declare const jidDecode: (jid: string | undefined) => FullJid | undefined;
18
+ /** is the jid a user */
19
+ export declare const areJidsSameUser: (jid1: string | undefined, jid2: string | undefined) => boolean;
20
+ /** is the jid Meta IA */
21
+ export declare const isJidMetaIa: (jid: string | undefined) => boolean | undefined;
22
+ /** is the jid a user */
23
+ export declare const isJidUser: (jid: string | undefined) => boolean | undefined;
24
+ /** is the jid a group */
25
+ export declare const isLidUser: (jid: string | undefined) => boolean | undefined;
26
+ /** is the jid a broadcast */
27
+ export declare const isJidBroadcast: (jid: string | undefined) => boolean | undefined;
28
+ /** is the jid a group */
29
+ export declare const isJidGroup: (jid: string | undefined) => boolean | undefined;
30
+ /** is the jid the status broadcast */
31
+ export declare const isJidStatusBroadcast: (jid: string) => jid is "status@broadcast";
32
+ /** is the jid a newsletter */
33
+ export declare const isJidNewsletter: (jid: string | undefined) => boolean | undefined;
34
+ export declare const isJidBot: (jid: string | undefined) => boolean | "" | undefined;
35
+ export declare const jidNormalizedUser: (jid: string | undefined) => string;