UNPKG

@jikey/fcazero

Version:

Facebook Messenger bot, and is one of the most advanced next-generation Facebook Chat API (FCA)

2 lines (1 loc) 12.5 kB
import{Clients as p}from"../utils/clients.js";import{Constants as l}from"../utils/constants.js";import{Formatters as _}from"../utils/formatters.js";import g from"../utils/logger.js";class n{constructor(e,t,a){this.defaultFuncs=e;this.ctx=a}static getExtension(e,t=""){if(e)return e;{const a=t.split(".").pop();return a===t?"":a}}static formatAttachmentsGraphQLResponse(e){switch(e.__typename){case"MessageImage":return{type:"photo",ID:e.legacy_attachment_id,filename:e.filename,original_extension:n.getExtension(e.original_extension,e.filename),thumbnailUrl:e.thumbnail.uri,previewUrl:e.preview.uri,previewWidth:e.preview.width,previewHeight:e.preview.height,largePreviewUrl:e.large_preview.uri,largePreviewHeight:e.large_preview.height,largePreviewWidth:e.large_preview.width,url:e.large_preview.uri,width:e.large_preview.width,height:e.large_preview.height,name:e.filename,attributionApp:e.attribution_app?{attributionAppID:e.attribution_app.id,name:e.attribution_app.name,logo:e.attribution_app.square_logo}:null};case"MessageAnimatedImage":return{type:"animated_image",ID:e.legacy_attachment_id,filename:e.filename,original_extension:n.getExtension(e.original_extension,e.filename),previewUrl:e.preview_image.uri,previewWidth:e.preview_image.width,previewHeight:e.preview_image.height,url:e.animated_image.uri,width:e.animated_image.width,height:e.animated_image.height,thumbnailUrl:e.preview_image.uri,name:e.filename,facebookUrl:e.animated_image.uri,rawGifImage:e.animated_image.uri,animatedGifUrl:e.animated_image.uri,animatedGifPreviewUrl:e.preview_image.uri,animatedWebpUrl:e.animated_image.uri,animatedWebpPreviewUrl:e.preview_image.uri,attributionApp:e.attribution_app?{attributionAppID:e.attribution_app.id,name:e.attribution_app.name,logo:e.attribution_app.square_logo}:null};case"MessageVideo":return{type:"video",ID:e.legacy_attachment_id,filename:e.filename,original_extension:n.getExtension(e.original_extension,e.filename),duration:e.playable_duration_in_ms,thumbnailUrl:e.large_image.uri,previewUrl:e.large_image.uri,previewWidth:e.large_image.width,previewHeight:e.large_image.height,url:e.playable_url,width:e.original_dimensions.x,height:e.original_dimensions.y,videoType:e.video_type.toLowerCase()};case"MessageFile":return{type:"file",ID:e.message_file_fbid,filename:e.filename,original_extension:n.getExtension(e.original_extension,e.filename),url:e.url,isMalicious:e.is_malicious,contentType:e.content_type,name:e.filename,mimeType:"",fileSize:-1};case"MessageAudio":return{type:"audio",ID:e.url_shimhash,filename:e.filename,original_extension:n.getExtension(e.original_extension,e.filename),duration:e.playable_duration_in_ms,audioType:e.audio_type,url:e.playable_url,isVoiceMail:e.is_voicemail};default:return{error:"Don't know about attachment type "+e.__typename}}}static formatExtensibleAttachment(e){return e.story_attachment?{type:"share",ID:e.legacy_attachment_id,url:e.story_attachment.url,title:e.story_attachment.title_with_entities.text,description:e.story_attachment.description&&e.story_attachment.description.text,source:e.story_attachment.source==null?null:e.story_attachment.source.text,image:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).uri,width:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).width,height:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).height,playable:e.story_attachment.media==null?null:e.story_attachment.media.is_playable,duration:e.story_attachment.media==null?null:e.story_attachment.media.playable_duration_in_ms,playableUrl:e.story_attachment.media==null?null:e.story_attachment.media.playable_url,subattachments:e.story_attachment.subattachments,properties:e.story_attachment.properties.reduce(function(t,a){return t[a.key]=a.value.text,t},{}),animatedImageSize:"",facebookUrl:"",styleList:"",target:"",thumbnailUrl:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).uri,thumbnailWidth:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).width,thumbnailHeight:e.story_attachment.media==null||e.story_attachment.media.animated_image==null&&e.story_attachment.media.image==null?null:(e.story_attachment.media.animated_image||e.story_attachment.media.image).height}:{error:"Don't know what to do with extensible_attachment."}}static formatReactionsGraphQL(e){return{reaction:e.reaction,userID:e.user.id}}static formatEventData(e){if(e==null)return{};switch(e.__typename){case"ThemeColorExtensibleMessageAdminText":return{color:e.theme_color};case"ThreadNicknameExtensibleMessageAdminText":return{nickname:e.nickname,participantID:e.participant_id};case"ThreadIconExtensibleMessageAdminText":return{threadIcon:e.thread_icon};case"InstantGameUpdateExtensibleMessageAdminText":return{gameID:e.game==null?null:e.game.id,update_type:e.update_type,collapsed_text:e.collapsed_text,expanded_text:e.expanded_text,instant_game_update_data:e.instant_game_update_data};case"GameScoreExtensibleMessageAdminText":return{game_type:e.game_type};case"RtcCallLogExtensibleMessageAdminText":return{event:e.event,is_video_call:e.is_video_call,server_info_data:e.server_info_data};case"GroupPollExtensibleMessageAdminText":return{event_type:e.event_type,total_count:e.total_count,question:e.question};case"AcceptPendingThreadExtensibleMessageAdminText":return{accepter_id:e.accepter_id,requester_id:e.requester_id};case"ConfirmFriendRequestExtensibleMessageAdminText":return{friend_request_recipient:e.friend_request_recipient,friend_request_sender:e.friend_request_sender};case"AddContactExtensibleMessageAdminText":return{contact_added_id:e.contact_added_id,contact_adder_id:e.contact_adder_id};case"AdExtensibleMessageAdminText":return{ad_client_token:e.ad_client_token,ad_id:e.ad_id,ad_preferences_link:e.ad_preferences_link,ad_properties:e.ad_properties};case"ParticipantJoinedGroupCallExtensibleMessageAdminText":case"ThreadEphemeralTtlModeExtensibleMessageAdminText":case"StartedSharingVideoExtensibleMessageAdminText":case"LightweightEventCreateExtensibleMessageAdminText":case"LightweightEventNotifyExtensibleMessageAdminText":case"LightweightEventNotifyBeforeEventExtensibleMessageAdminText":case"LightweightEventUpdateTitleExtensibleMessageAdminText":case"LightweightEventUpdateTimeExtensibleMessageAdminText":case"LightweightEventUpdateLocationExtensibleMessageAdminText":case"LightweightEventDeleteExtensibleMessageAdminText":return{};default:return{error:"Don't know what to with event data type "+e.__typename}}}static formatMessagesGraphQLResponse(e){const t=e.o0.data.message_thread,a=t.thread_key.thread_fbid?t.thread_key.thread_fbid:t.thread_key.other_user_id;return t.messages.nodes.map(function(i){switch(i.__typename){case"UserMessage":var r;i.sticker&&(r=[{type:"sticker",ID:i.sticker.id,url:i.sticker.url,packID:i.sticker.pack?i.sticker.pack.id:null,spriteUrl:i.sticker.sprite_image,spriteUrl2x:i.sticker.sprite_image_2x,width:i.sticker.width,height:i.sticker.height,caption:i.snippet,description:i.sticker.label,frameCount:i.sticker.frame_count,frameRate:i.sticker.frame_rate,framesPerRow:i.sticker.frames_per_row,framesPerCol:i.sticker.frames_per_col,stickerID:i.sticker.id,spriteURI:i.sticker.sprite_image,spriteURI2x:i.sticker.sprite_image_2x}]);var o={};return i.message!==null&&i.message.ranges.forEach(s=>{o[s.entity.id]=i.message.text.substr(s.offset,s.length)}),{type:"message",attachments:r||(i.blob_attachments&&i.blob_attachments.length>0?i.blob_attachments.map(n.formatAttachmentsGraphQLResponse):i.extensible_attachment?[n.formatExtensibleAttachment(i.extensible_attachment)]:[]),body:i.message!==null?i.message.text:"",isGroup:t.thread_type==="GROUP",messageID:i.message_id,senderID:i.message_sender.id,threadID:a,timestamp:i.timestamp_precise,mentions:o,isUnread:i.unread,messageReactions:i.message_reactions?i.message_reactions.map(n.formatReactionsGraphQL):null,isSponsored:i.is_sponsored,snippet:i.snippet};case"ThreadNameMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"change_thread_name",snippet:i.snippet,eventData:{threadName:i.thread_name},author:i.message_sender.id,logMessageType:"log:thread-name",logMessageData:{name:i.thread_name}};case"ThreadImageMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"change_thread_image",snippet:i.snippet,eventData:i.image_with_metadata==null?{}:{threadImage:{attachmentID:i.image_with_metadata.legacy_attachment_id,width:i.image_with_metadata.original_dimensions.x,height:i.image_with_metadata.original_dimensions.y,url:i.image_with_metadata.preview.uri}},logMessageType:"log:thread-icon",logMessageData:{thread_icon:i.image_with_metadata?i.image_with_metadata.preview.uri:null}};case"ParticipantLeftMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"remove_participants",snippet:i.snippet,eventData:{participantsRemoved:i.participants_removed.map(function(s){return s.id})},logMessageType:"log:unsubscribe",logMessageData:{leftParticipantFbId:i.participants_removed.map(function(s){return s.id})}};case"ParticipantsAddedMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"add_participants",snippet:i.snippet,eventData:{participantsAdded:i.participants_added.map(function(s){return s.id})},logMessageType:"log:subscribe",logMessageData:{addedParticipants:i.participants_added.map(function(s){return s.id})}};case"VideoCallMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"video_call",snippet:i.snippet,logMessageType:"other"};case"VoiceCallMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,eventType:"voice_call",snippet:i.snippet,logMessageType:"other"};case"GenericAdminTextMessage":return{type:"event",messageID:i.message_id,threadID:a,isGroup:t.thread_type==="GROUP",senderID:i.message_sender.id,timestamp:i.timestamp_precise,snippet:i.snippet,eventType:i.extensible_message_admin_text_type.toLowerCase(),eventData:n.formatEventData(i.extensible_message_admin_text),logMessageType:_.getAdminTextMessageType(i.extensible_message_admin_text_type),logMessageData:i.extensible_message_admin_text};default:return{error:"Don't know about message type "+i.__typename}}})}call(e,t){return new Promise(async(a,m)=>{try{if(!e.threadID)throw new Error("please pass a threadID as a second argument.");if(l.getType(e.threadID)!=="Number"&&l.getType(e.threadID)!=="String")throw new Error("threadID must be a number or a string");if(e.amount&&l.getType(e.amount)!=="Number")throw new Error("amount must be a number");if(e.timestamp&&l.getType(e.timestamp)!=="Number")throw new Error("timestamp must be a number");const i={queries:JSON.stringify({o0:{doc_id:"1498317363570230",query_params:{id:e.threadID,message_limit:e.amount,load_messages:1,load_read_receipts:!1,before:e.timestamp}}})};return this.defaultFuncs.post("https://www.facebook.com/api/graphqlbatch/",this.ctx.jar,i).then(p.parseAndCheckLogin(this.ctx,this.defaultFuncs)).then(r=>{if(r&&r.error)throw r;if(r&&r[r.length-1].error_results!==0)throw{error:"GetThreadHistory: there was no successful_results",res:r};const o=r&&r[0];if(o){const s=n.formatMessagesGraphQLResponse(o);return t&&typeof t=="function"&&t(null,s),a(s)}else throw o})}catch(i){return g.error({error:i},"GetThreadHistory"),t&&typeof t=="function"&&(i instanceof Error?t(i):t(new Error(String(i)))),m(i)}})}}export{n as default};