Skip to content

Commit

Permalink
fix: sendLinkPreview interim
Browse files Browse the repository at this point in the history
  • Loading branch information
jonalan7 committed Jul 21, 2023
1 parent e04f2d4 commit d66b4f8
Show file tree
Hide file tree
Showing 8 changed files with 510 additions and 8 deletions.
305 changes: 305 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@
"axios": "^1.4.0",
"boxen": "^5.1.1",
"chalk": "^4.0.0",
"cheerio": "^1.0.0-rc.12",
"chrome-launcher": "^0.15.1",
"chrome-version": "^1.0.1",
"dotenv": "^16.0.1",
Expand Down
79 changes: 79 additions & 0 deletions src/api/helpers/dowload-meta.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { load } from 'cheerio';
import axios, { AxiosResponse } from 'axios';
import { Buffer } from 'buffer';

export async function dowloadMetaFileBase64(url: string): Promise<string> {
const backImage =
'iVBORw0KGgoAAAANSUhEUgAAAGMAAABjCAIAAAAAWSnCAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cExAQAAAMKg9U9tCj8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADipAXM+AAFcstx4AAAAAElFTkSuQmCC';
try {
const response: AxiosResponse<string> = await axios(url);
const htmlContent: string = response.data;
const $ = load(htmlContent);
let thumbnail = '';

$('link[type="image/png"]').each((index, element) => {
const imgURL = $(element).attr('href');
if (imgURL) {
if (!imgURL.includes('http')) {
thumbnail = url + imgURL;
} else {
thumbnail = imgURL;
}
return false;
}
});

$('meta[property="og:image"]').each((index, element) => {
const imgURL = $(element).attr('content');
if (imgURL) {
if (!imgURL.includes('http')) {
thumbnail = url + imgURL;
} else {
thumbnail = imgURL;
}
return false;
}
});

$('meta[itemprop="image"]').each((index, element) => {
const imgURL = $(element).attr('content');
if (imgURL) {
if (!imgURL.includes('http')) {
thumbnail = url + imgURL;
} else {
thumbnail = imgURL;
}
return false;
}
});

if (!thumbnail) {
$('meta[name="twitter:image"]').each((index, element) => {
const imgURL = $(element).attr('content');
if (imgURL) {
if (!imgURL.includes('http')) {
thumbnail = url + imgURL;
} else {
thumbnail = imgURL;
}
return false;
}
});
}

if (thumbnail) {
const imageResponse: AxiosResponse<ArrayBuffer> = await axios(thumbnail, {
responseType: 'arraybuffer'
});
const base64Thumbnail = Buffer.from(imageResponse.data).toString(
'base64'
);

return base64Thumbnail;
}
return backImage;
} catch (e) {
console.log('Erro meta thumbnail', e);
return backImage;
}
}
1 change: 1 addition & 0 deletions src/api/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ export { callbackWile } from './callback-wile';
export { checkingCloses } from './closes-browser';
export { loadForceConnect } from './force-connect';
export { sleep } from './sleep';
export { dowloadMetaFileBase64 } from './dowload-meta';
10 changes: 6 additions & 4 deletions src/api/layers/sender.layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import {
base64MimeType,
downloadFileToBase64,
fileToBase64,
stickerSelect
stickerSelect,
dowloadMetaFileBase64
} from '../helpers';
import { filenameFromMimeType } from '../helpers/filename-from-mimetype';
import { Message, SendFileResult, SendStickerResult } from '../model';
Expand Down Expand Up @@ -463,11 +464,12 @@ export class SenderLayer extends ListenerLayer {
if (typeof validating === 'object') {
return reject(validating);
}
const thumbnail = await dowloadMetaFileBase64(url);
const result = await this.page.evaluate(
({ chatId, url, title }) => {
return WAPI.sendLinkPreview(chatId, url, title);
({ chatId, url, title, thumbnail }) => {
return WAPI.sendLinkPreview(chatId, url, title, thumbnail);
},
{ chatId, url, title }
{ chatId, url, title, thumbnail }
);
if (result['erro'] == true) {
return reject(result);
Expand Down
6 changes: 3 additions & 3 deletions src/lib/wapi/functions/send-link-preview.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export async function sendLinkPreview(chatId, url, text) {
export async function sendLinkPreview(chatId, url, text, thumbnail) {
text = text || '';
const _Path = {
Protocol: '^(https?:\\/\\/)?',
Expand All @@ -24,6 +24,7 @@ export async function sendLinkPreview(chatId, url, text) {
'Use a valid HTTP protocol. Example: https://www.youtube.com/watch?v=V1bFr2SWP1';
return WAPI.scope(chatId, true, null, text);
}

var chat = await WAPI.sendExist(chatId);
if (!chat.erro) {
const newMsgId = await window.WAPI.getNewMessageId(chat.id._serialized);
Expand All @@ -49,8 +50,7 @@ export async function sendLinkPreview(chatId, url, text) {
subtype: 'url',
preview: true,
disappearingModeInitiator: 'chat',
thumbnail:
'iVBORw0KGgoAAAANSUhEUgAAAGMAAABjCAIAAAAAWSnCAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA0SURBVHhe7cExAQAAAMKg9U9tCj8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADipAXM+AAFcstx4AAAAAElFTkSuQmCC',
thumbnail: thumbnail,
content: url,
canonicalUrl: url,
description: url,
Expand Down
3 changes: 2 additions & 1 deletion src/types/WAPI.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ interface WAPI {
sendLinkPreview: (
chatId: string,
url: string,
title: string
title: string,
thumbnail: string
) => Promise<SendLinkResult>;
sendLocation: (
to: string,
Expand Down
113 changes: 113 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1475,6 +1475,11 @@
"resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz"
"version" "3.4.7"

"boolbase@^1.0.0":
"integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
"resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
"version" "1.0.0"

"boxen@^5.1.1":
"integrity" "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ=="
"resolved" "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz"
Expand Down Expand Up @@ -1791,6 +1796,31 @@
"resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"
"version" "0.7.0"

"cheerio-select@^2.1.0":
"integrity" "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="
"resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz"
"version" "2.1.0"
dependencies:
"boolbase" "^1.0.0"
"css-select" "^5.1.0"
"css-what" "^6.1.0"
"domelementtype" "^2.3.0"
"domhandler" "^5.0.3"
"domutils" "^3.0.1"

"cheerio@^1.0.0-rc.12":
"integrity" "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q=="
"resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz"
"version" "1.0.0-rc.12"
dependencies:
"cheerio-select" "^2.1.0"
"dom-serializer" "^2.0.0"
"domhandler" "^5.0.3"
"domutils" "^3.0.1"
"htmlparser2" "^8.0.1"
"parse5" "^7.0.0"
"parse5-htmlparser2-tree-adapter" "^7.0.0"

"chokidar@^2.0.0":
"integrity" "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg=="
"resolved" "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz"
Expand Down Expand Up @@ -2422,6 +2452,22 @@
dependencies:
"type-fest" "^1.0.1"

"css-select@^5.1.0":
"integrity" "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg=="
"resolved" "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz"
"version" "5.1.0"
dependencies:
"boolbase" "^1.0.0"
"css-what" "^6.1.0"
"domhandler" "^5.0.2"
"domutils" "^3.0.1"
"nth-check" "^2.0.1"

"css-what@^6.1.0":
"integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
"resolved" "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz"
"version" "6.1.0"

"d@^1.0.1", "d@1":
"integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA=="
"resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz"
Expand Down Expand Up @@ -2687,6 +2733,36 @@
dependencies:
"esutils" "^2.0.2"

"dom-serializer@^2.0.0":
"integrity" "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="
"resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz"
"version" "2.0.0"
dependencies:
"domelementtype" "^2.3.0"
"domhandler" "^5.0.2"
"entities" "^4.2.0"

"domelementtype@^2.3.0":
"integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
"resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz"
"version" "2.3.0"

"domhandler@^5.0.2", "domhandler@^5.0.3":
"integrity" "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="
"resolved" "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz"
"version" "5.0.3"
dependencies:
"domelementtype" "^2.3.0"

"domutils@^3.0.1":
"integrity" "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA=="
"resolved" "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz"
"version" "3.1.0"
dependencies:
"dom-serializer" "^2.0.0"
"domelementtype" "^2.3.0"
"domhandler" "^5.0.3"

"dot-prop@^5.1.0":
"integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="
"resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz"
Expand Down Expand Up @@ -2781,6 +2857,11 @@
"graceful-fs" "^4.2.4"
"tapable" "^2.2.0"

"entities@^4.2.0", "entities@^4.4.0":
"integrity" "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
"resolved" "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz"
"version" "4.5.0"

"envinfo@^7.7.3":
"integrity" "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw=="
"resolved" "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz"
Expand Down Expand Up @@ -4297,6 +4378,16 @@
dependencies:
"lru-cache" "^6.0.0"

"htmlparser2@^8.0.1":
"integrity" "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA=="
"resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz"
"version" "8.0.2"
dependencies:
"domelementtype" "^2.3.0"
"domhandler" "^5.0.3"
"domutils" "^3.0.1"
"entities" "^4.4.0"

"http-cache-semantics@^4.0.0", "http-cache-semantics@^4.1.1":
"integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
"resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz"
Expand Down Expand Up @@ -5973,6 +6064,13 @@
dependencies:
"path-key" "^4.0.0"

"nth-check@^2.0.1":
"integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="
"resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"
"version" "2.1.1"
dependencies:
"boolbase" "^1.0.0"

"number-is-nan@^1.0.0":
"integrity" "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="
"resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"
Expand Down Expand Up @@ -6349,6 +6447,21 @@
dependencies:
"parse-path" "^7.0.0"

"parse5-htmlparser2-tree-adapter@^7.0.0":
"integrity" "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g=="
"resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz"
"version" "7.0.0"
dependencies:
"domhandler" "^5.0.2"
"parse5" "^7.0.0"

"parse5@^7.0.0":
"integrity" "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw=="
"resolved" "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz"
"version" "7.1.2"
dependencies:
"entities" "^4.4.0"

"pascalcase@^0.1.1":
"integrity" "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw=="
"resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz"
Expand Down

1 comment on commit d66b4f8

@jonalan7
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.