@jikey/fcazero
Version:
Facebook Messenger bot, and is one of the most advanced next-generation Facebook Chat API (FCA)
2 lines (1 loc) • 15.9 kB
JavaScript
;var R=Object.create;var _=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty;var C=(o,e)=>{for(var a in e)_(o,a,{get:e[a],enumerable:!0})},x=(o,e,a,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of N(e))!A.call(o,s)&&s!==a&&_(o,s,{get:()=>e[s],enumerable:!(t=P(e,s))||t.enumerable});return o};var F=(o,e,a)=>(a=o!=null?R(E(o)):{},x(e||!o||!o.__esModule?_(a,"default",{value:o,enumerable:!0}):a,o)),O=o=>x(_({},"__esModule",{value:!0}),o);var W={};C(W,{Formatters:()=>i});module.exports=O(W);var f=F(require("url"),1),h=F(require("qs"),1),U=require("is-stream"),k=require("mime-types"),b=require("./constants.js");class i{static isReadableStream(e){return(0,U.isReadableStream)(e)}static fullFileName(e,a){return a?`${e}.${a}`:e}static getExtension(e,a=""){if(e)return e;{const t=a.split(".").pop();return t===a?"":t}}static _formatAttachment(e,a){a=a||{id:"",image_data:{}},e=e.mercury||e;let t=e.blob_attachment||e.sticker_attachment,s=t&&t.__typename?t.__typename:e.attach_type;!s&&e.sticker_attachment?(s="StickerAttachment",t=e.sticker_attachment):!s&&e.extensible_attachment&&(e.extensible_attachment.story_attachment&&e.extensible_attachment.story_attachment.target&&e.extensible_attachment.story_attachment.target.__typename&&e.extensible_attachment.story_attachment.target.__typename==="MessageLocation"?s="MessageLocation":s="ExtensibleAttachment",t=e.extensible_attachment);const r=i.fullFileName(t.filename,t.original_extension),l=Number(e.fileSize||null),g=e.genericMetadata?Number(e.genericMetadata.videoLength):void 0,n=e.genericMetadata?Number(e.genericMetadata.duration):void 0,m=e.mimeType;switch(s){case"sticker":return{type:"sticker",ID:e.metadata.stickerID.toString(),url:e.url,packID:e.metadata.packID.toString(),spriteUrl:e.metadata.spriteURI,spriteUrl2x:e.metadata.spriteURI2x,width:e.metadata.width,height:e.metadata.height,caption:a.caption,description:a.description,frameCount:e.metadata.frameCount,frameRate:e.metadata.frameRate,framesPerRow:e.metadata.framesPerRow,framesPerCol:e.metadata.framesPerCol,stickerID:e.metadata.stickerID.toString(),spriteURI:e.metadata.spriteURI,spriteURI2x:e.metadata.spriteURI2x};case"file":return{type:"file",ID:a.id.toString(),fullFileName:r,filename:e.name,fileSize:l,original_extension:i.getExtension(e.original_extension,r),mimeType:m,url:e.url,isMalicious:a.is_malicious,contentType:a.mime_type,name:e.name};case"photo":return{type:"photo",ID:e.metadata.fbid.toString(),filename:e.fileName,fullFileName:r,fileSize:l,original_extension:i.getExtension(e.original_extension,r),mimeType:m,thumbnailUrl:e.thumbnail_url,previewUrl:e.preview_url,previewWidth:e.preview_width,previewHeight:e.preview_height,largePreviewUrl:e.large_preview_url,largePreviewWidth:e.large_preview_width,largePreviewHeight:e.large_preview_height,url:e.metadata.url,width:e.metadata.dimensions.split(",")[0],height:e.metadata.dimensions.split(",")[1]};case"animated_image":return{type:"animated_image",ID:a.id.toString(),filename:a.filename,fullFileName:r,original_extension:i.getExtension(a.original_extension,r),mimeType:m,previewUrl:e.preview_url,previewWidth:e.preview_width,previewHeight:e.preview_height,url:a.image_data.url,width:a.image_data.width,height:a.image_data.height,name:e.name,facebookUrl:e.url,thumbnailUrl:e.thumbnail_url,rawGifImage:a.image_data.raw_gif_image,rawWebpImage:a.image_data.raw_webp_image,animatedGifUrl:a.image_data.animated_gif_url,animatedGifPreviewUrl:a.image_data.animated_gif_preview_url,animatedWebpUrl:a.image_data.animated_webp_url,animatedWebpPreviewUrl:a.image_data.animated_webp_preview_url};case"share":return{type:"share",ID:e.share.share_id.toString(),url:a.href,title:e.share.title,description:e.share.description,source:e.share.source,image:e.share.media.image,width:e.share.media.image_slicewidth,height:e.share.media.image_size.height,playable:e.share.media.playable,duration:e.share.media.duration,subattachments:e.share.subattachments,properties:{},animatedImageSize:e.share.media.animated_image_size,facebookUrl:e.share.uri,target:e.share.target,styleList:e.share.style_list};case"video":return{type:"video",ID:e.metadata.fbid.toString(),filename:e.name,fullFileName:r,original_extension:i.getExtension(e.original_extension,r),mimeType:m,duration:g,previewUrl:e.preview_url,previewWidth:e.preview_width,previewHeight:e.preview_height,url:e.url,width:e.metadata.dimensions.width,height:e.metadata.dimensions.height,videoType:"unknown",thumbnailUrl:e.thumbnail_url};case"error":return{type:"error",attachment1:e,attachment2:a};case"MessageImage":return{type:"photo",id:t.legacy_attachment_id,filename:t.filename,fullFileName:r,fileSize:l,original_extension:i.getExtension(t.original_extension,r),mimeType:(0,k.lookup)(r),thumbnailUrl:t.thumbnail.uri,previewUrl:t.preview.uri,previewWidth:t.preview.width,previewHeight:t.preview.height,largePreviewUrl:t.large_preview.uri,largePreviewWidth:t.large_preview.width,largePreviewHeight:t.large_preview.height,url:t.large_preview.uri,width:t.original_dimensions.x,height:t.original_dimensions.y};case"MessageAnimatedImage":return{type:"animated_image",ID:t.legacy_attachment_id,filename:t.filename,fullFileName:r,original_extension:i.getExtension(t.original_extension,r),mimeType:m,previewUrl:t.preview_image.uri,previewWidth:t.preview_image.width,previewHeight:t.preview_image.height,url:t.animated_image.uri,width:t.animated_image.width,height:t.animated_image.height,thumbnailUrl:t.preview_image.uri,name:t.filename,facebookUrl:t.animated_image.uri,rawGifImage:t.animated_image.uri,animatedGifUrl:t.animated_image.uri,animatedGifPreviewUrl:t.preview_image.uri,animatedWebpUrl:t.animated_image.uri,animatedWebpPreviewUrl:t.preview_image.uri};case"MessageVideo":return{type:"video",ID:t.legacy_attachment_id,filename:t.filename,fullFileName:r,original_extension:i.getExtension(t.original_extension,r),fileSize:l,duration:g,mimeType:m,previewUrl:t.large_image.uri,previewWidth:t.large_image.width,previewHeight:t.large_image.height,url:t.playable_url,width:t.original_dimensions.x,height:t.original_dimensions.y,videoType:t.video_type.toLowerCase(),thumbnailUrl:t.large_image.uri};case"MessageAudio":return{type:"audio",ID:t.url_shimhash,filename:t.filename,fullFileName:r,fileSize:l,duration:n,original_extension:i.getExtension(t.original_extension,r),mimeType:m,audioType:t.audio_type,url:t.playable_url,isVoiceMail:t.is_voicemail};case"StickerAttachment":case"Sticker":return{type:"sticker",ID:t.id,url:t.url,packID:t.pack?t.pack.id:null,spriteUrl:t.sprite_image,spriteUrl2x:t.sprite_image_2x,width:t.width,height:t.height,caption:t.label,description:t.label,frameCount:t.frame_count,frameRate:t.frame_rate,framesPerRow:t.frames_per_row,framesPerCol:t.frames_per_column,stickerID:t.id,spriteURI:t.sprite_image,spriteURI2x:t.sprite_image_2x};case"MessageLocation":var d=t.story_attachment.url,p=t.story_attachment.media,y=h.default.parse(f.default.parse(d).query??"").u;let u="";typeof y=="string"&&(u=h.default.parse(f.default.parse(y).query??"").where1);var w=typeof u=="string"?u.split(", "):[],T,I;try{T=Number.parseFloat(w[0]??""),I=Number.parseFloat(w[1]??"")}catch{}var D,v,M;return p&&p.image&&(D=p.image.uri,v=p.image.width,M=p.image.height),{type:"location",ID:t.legacy_attachment_id,latitude:T,longitude:I,image:D,width:v,height:M,url:y||d,address:u,facebookUrl:t.story_attachment.url,target:t.story_attachment.target,styleList:t.story_attachment.style_list};case"ExtensibleAttachment":return{type:"share",ID:t.legacy_attachment_id,url:t.story_attachment.url,title:t.story_attachment.title_with_entities.text,description:t.story_attachment.description&&t.story_attachment.description.text,source:t.story_attachment.source?t.story_attachment.source.text:null,image:t.story_attachment.media&&t.story_attachment.media.image&&t.story_attachment.media.image.uri,width:t.story_attachment.media&&t.story_attachment.media.image&&t.story_attachment.media.image.width,height:t.story_attachment.media&&t.story_attachment.media.image&&t.story_attachment.media.image.height,playable:t.story_attachment.media&&t.story_attachment.media.is_playable,duration:t.story_attachment.media&&t.story_attachment.media.playable_duration_in_ms,playableUrl:t.story_attachment.media==null?null:t.story_attachment.media.playable_url,subattachments:t.story_attachment.subattachments,properties:t.story_attachment.properties.reduce(function(c,S){return c[S.key]=S.value.text,c},{}),facebookUrl:t.story_attachment.url,target:t.story_attachment.target,styleList:t.story_attachment.style_list};case"MessageFile":return{type:"file",ID:t.message_file_fbid,fullFileName:r,filename:t.filename,fileSize:l,mimeType:t.mimetype,original_extension:t.original_extension||r.split(".").pop(),url:t.url,isMalicious:t.is_malicious,contentType:t.content_type,name:t.filename};default:throw new Error("unrecognized attach_file of type "+s+"`"+JSON.stringify(e,null,4)+" attachment2: "+JSON.stringify(a,null,4)+"`")}}static formatAttachment(e,a,t,s){return t=s||t,e?e.map(function(r,l){return!t||!a||a[l]===void 0||!t[a[l]]?i._formatAttachment(r):i._formatAttachment(r,t[a[l]])}):[]}static formatDeltaMessage(e){try{const a=e.delta.messageMetadata,t=e.delta.data===void 0?[]:e.delta.data.prng===void 0?[]:JSON.parse(String(e.delta.data.prng||"[]")),s=t.map(n=>n.i),r=t.map(n=>n.o),l=t.map(n=>n.l),g={};for(let n=0;n<s.length;n++){const m=s[n];if(typeof m=="string"||typeof m=="number"){const d=r[n]??0,p=l[n]??0;g[m]=e.delta.body.substring(d,d+p)}}return{type:"message",senderID:i.formatID(a.actorFbId.toString()),body:e.delta.body||"",threadID:i.formatID((a.threadKey?.threadFbId||a.threadKey?.otherUserFbId)?.toString()??""),messageID:a.messageId,offlineThreadingId:a.offlineThreadingId??"",attachments:(e.delta.attachments||[]).map(n=>i._formatAttachment(n)),mentions:g,timestamp:a.timestamp,isGroup:!!a.threadKey?.threadFbId,participantIDs:e.delta.participants??[]}}catch(a){throw a}}static formatID(e){return e!=null&&e!=null?e.replace(/(fb)?id[:.]/,""):e}static formatMessage(e){const a=e.message?e.message:e,t={type:"message",senderName:a.sender_name,senderID:i.formatID(a.sender_fbid.toString()),participantNames:a.group_thread_info?.participant_names??[a.sender_name?.split(" ")[0]??"Unknown"],participantIDs:a.group_thread_info?a.group_thread_info.participant_ids.map(function(s){return i.formatID(s.toString())}):[i.formatID(a.sender_fbid.toString())],body:a.body||"",threadID:i.formatID((a.thread_fbid||a.other_user_fbid)?.toString()),threadName:a.group_thread_info?a.group_thread_info.name:a.sender_name,location:a.coordinates?a.coordinates:null,messageID:a.mid?a.mid.toString():a.message_id,attachments:i.formatAttachment(a.attachments,a.attachmentIds,a.attachment_map,a.share_map),timestamp:a.timestamp??0,timestampAbsolute:a.timestamp_absolute??"",timestampRelative:a.timestamp_relative??"",timestampDatetime:a.timestamp_datetime??"",tags:a.tags??[],reactions:a.reactions?a.reactions:[],isUnread:a.is_unread??!1,isGroup:!1};return e.type==="pages_messaging"&&e.realtime_viewer_fbid!==void 0&&(t.pageID=e.realtime_viewer_fbid.toString()),t.isGroup=t.participantIDs.length>2,t}static formatEvent(e){const a=e.message?e.message:e;let t=a.log_message_type,s;t==="log:generic-admin-text"?(s=a.log_message_data.untypedData,t=i.getAdminTextMessageType(a.log_message_data.message_type)):s=a.log_message_data;const r={message:a};return Object.assign(i.formatMessage(r),{type:"event",logMessageType:t,logMessageData:s,logMessageBody:a.log_message_body})}static formatHistoryMessage(e){switch(e.action_type){case"ma-type:log-message":return i.formatEvent(e);default:return i.formatMessage(e)}}static getAdminTextMessageType(e){switch(e){case"unpin_messages_v2":return"log:unpin-message";case"pin_messages_v2":return"log:pin-message";case"change_thread_theme":return"log:thread-color";case"change_thread_icon":case"change_thread_quick_reaction":return"log:thread-icon";case"change_thread_nickname":return"log:user-nickname";case"change_thread_admins":return"log:thread-admins";case"group_poll":return"log:thread-poll";case"change_thread_approval_mode":return"log:thread-approval-mode";case"messenger_call_log":case"participant_joined_group_call":return"log:thread-call";default:return String(e)}}static formatDeltaEvent(e){let a,t;switch(e.class){case"AdminTextMessage":t=e.untypedData,a=i.getAdminTextMessageType(e.type);break;case"ThreadName":a="log:thread-name",t={name:e.name};break;case"ParticipantsAddedToGroupThread":a="log:subscribe",t={addedParticipants:e.addedParticipants};break;case"ParticipantLeftGroupThread":a="log:unsubscribe",t={leftParticipantFbId:e.leftParticipantFbId};break;case"ApprovalQueue":a="log:approval-queue",t={approvalQueue:{action:e.action,recipientFbId:e.recipientFbId,requestSource:e.requestSource,...e.messageMetadata}}}return{type:"event",threadID:i.formatID((e.messageMetadata.threadKey.threadFbId||e.messageMetadata.threadKey.otherUserFbId)?.toString()),messageID:e.messageMetadata.messageId.toString(),logMessageType:a,logMessageData:t,logMessageBody:e.messageMetadata.adminText??"",timestamp:e.messageMetadata.timestamp,author:e.messageMetadata.actorFbId??"",participantIDs:e.participants??[]}}static formatTyp(e){return{isTyping:!!e.st,from:e.from.toString(),threadID:i.formatID((e.to||e.thread_fbid||e.from).toString()),fromMobile:e.hasOwnProperty("from_mobile")?e.from_mobile:!0,userID:(e.realtime_viewer_fbid||e.from).toString(),type:"typ"}}static formatDeltaReadReceipt(e){return{reader:(e.threadKey?.otherUserFbId??e.actorFbId??"").toString(),time:e.actionTimestampMs,threadID:i.formatID(((e.threadKey?.otherUserFbId||e.threadKey?.threadFbId)??"").toString()),type:"read_receipt"}}static formatReadReceipt(e){return{reader:e.reader.toString(),time:e.time,threadID:i.formatID((e.thread_fbid||e.reader).toString()),type:"read_receipt"}}static formatRead(e){return{threadID:i.formatID((e.chat_ids&&e.chat_ids[0]||e.thread_fbids&&e.thread_fbids[0])?.toString()),time:e.timestamp,type:"read"}}static formatThread(e){return{threadID:i.formatID(e.thread_fbid.toString()),participants:e.participants.map(a=>i.formatID(a.toString())),participantIDs:e.participants.map(a=>i.formatID(a.toString())),name:e.name,nicknames:e.custom_nickname??{},snippet:e.snippet??"",snippetAttachments:e.snippet_attachments??[],snippetSender:i.formatID((e.snippet_sender||"").toString()),unreadCount:e.unread_count??0,messageCount:e.message_count??0,imageSrc:e.image_src??"",timestamp:e.timestamp??0,serverTimestamp:e.server_timestamp??0,muteUntil:e.mute_until??0,isCanonicalUser:e.is_canonical_user??!1,isCanonical:e.is_canonical??!1,isSubscribed:e.is_subscribed??!1,folder:e.folder??"",isArchived:e.is_archived??!1,recipientsLoadable:e.recipients_loadable??!1,hasEmailParticipant:e.has_email_participant??!1,readOnly:e.read_only??!1,canReply:e.can_reply??!1,cannotReplyReason:e.cannot_reply_reason??"",lastMessageTimestamp:e.last_message_timestamp??0,lastReadTimestamp:e.last_read_timestamp??0,lastMessageType:e.last_message_type??"",emoji:e.custom_like_icon??"",color:e.custom_color??"",adminIDs:e.admin_ids??[],threadType:e.thread_type??""}}static formatDate(e){let a=e.getUTCDate();a=a>=10?a:"0"+a;let t=e.getUTCHours();t=t>=10?t:"0"+t;let s=e.getUTCMinutes();s=s>=10?s:"0"+s;let r=e.getUTCSeconds();return r=r>=10?r:"0"+r,b.Constants.NUM_TO_DAY[e.getUTCDay()]+", "+a+" "+b.Constants.NUM_TO_MONTH[e.getUTCMonth()]+" "+e.getUTCFullYear()+" "+t+":"+s+":"+r+" GMT"}static formatProxyPresence(e,a){return e.lat===void 0||e.p===void 0?null:{type:"presence",timestamp:e.lat*1e3,userID:a,statuses:e.p}}static formatPresence(e,a){return{type:"presence",timestamp:e.la*1e3,userID:a,statuses:e.a}}static decodeClientPayload(e){return JSON.parse(String.fromCharCode.apply(null,e))}}0&&(module.exports={Formatters});