diff --git a/src/Utils/index.ts b/src/Utils/index.ts index 0e70011..6e6ad5e 100644 --- a/src/Utils/index.ts +++ b/src/Utils/index.ts @@ -13,4 +13,5 @@ export * from './auth-utils' export * from './legacy-msgs' export * from './baileys-event-stream' export * from './use-single-file-auth-state' -export * from './use-multi-file-auth-state' \ No newline at end of file +export * from './use-multi-file-auth-state' +export * from './link-preview' \ No newline at end of file diff --git a/src/Utils/link-preview.ts b/src/Utils/link-preview.ts index 10bae83..bc33d59 100644 --- a/src/Utils/link-preview.ts +++ b/src/Utils/link-preview.ts @@ -28,9 +28,10 @@ export const getUrlInfo = async( try { const { getLinkPreview } = await import('link-preview-js') let previewLink = text - if (!text.startsWith('https://') && !text.startsWith('http://')) { + if(!text.startsWith('https://') && !text.startsWith('http://')) { previewLink = 'https://' + previewLink } + const info = await getLinkPreview(previewLink, { timeout: opts.timeoutMs }) if(info && 'title' in info) { const [image] = info.images diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index a528551..3f08350 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -54,6 +54,18 @@ const MessageTypeProto = { const ButtonType = proto.ButtonsMessage.ButtonsMessageHeaderType +export const generateLinkPreviewIfRequired = async(text: string, getUrlInfo: MessageGenerationOptions['getUrlInfo'], logger: MessageGenerationOptions['logger']) => { + const matchedUrls = text.match(URL_REGEX) + if(!!getUrlInfo && matchedUrls) { + try { + const urlInfo = await getUrlInfo(matchedUrls[0]) + return urlInfo + } catch(error) { // ignore if fails + logger?.warn({ trace: error.stack }, 'url generation failed') + } + } +} + export const prepareWAMessageMedia = async( message: AnyMediaMessageContent, options: MediaGenerationOptions @@ -249,13 +261,8 @@ export const generateWAMessageContent = async( const extContent = { text: message.text } as WATextMessage let urlInfo = message.linkPreview - const matchedUrls = message.text.match(URL_REGEX) - if(!urlInfo && !!options.getUrlInfo && matchedUrls) { - try { - urlInfo = await options.getUrlInfo(matchedUrls[0]) - } catch(error) { // ignore if fails - options.logger?.warn({ trace: error.stack }, 'url generation failed') - } + if(!urlInfo) { + urlInfo = await generateLinkPreviewIfRequired(message.text, options.getUrlInfo, options.logger) } if(urlInfo) {