Transcode link preview images

This commit is contained in:
Fedor Indutny 2022-04-25 13:56:59 -07:00 committed by GitHub
parent fd610a6300
commit 40f16b98e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 18 deletions

View File

@ -3,6 +3,7 @@
import type { RequestInit, Response } from 'node-fetch';
import type { AbortSignal as AbortSignalForNodeFetch } from 'abort-controller';
import { blobToArrayBuffer } from 'blob-util';
import type { MIMEType } from '../types/MIME';
import {
@ -14,6 +15,7 @@ import {
stringToMIMEType,
} from '../types/MIME';
import type { LoggerType } from '../types/Logging';
import { scaleImageToLevel } from '../util/scaleImageToLevel';
import * as log from '../logging/log';
const USER_AGENT = 'WhatsApp/2';
@ -603,5 +605,20 @@ export async function fetchLinkPreviewImage(
return null;
}
// Scale link preview image
if (contentType !== IMAGE_GIF) {
const dataBlob = new Blob([data], {
type: contentType,
});
const { blob: xcodedDataBlob } = await scaleImageToLevel(
dataBlob,
contentType,
false
);
const xcodedDataArrayBuffer = await blobToArrayBuffer(xcodedDataBlob);
data = new Uint8Array(xcodedDataArrayBuffer);
}
return { data, contentType };
}

View File

@ -1151,15 +1151,14 @@ describe('link preview fetching', () => {
);
assert.deepEqual(
await fetchLinkPreviewImage(
fakeFetch,
'https://example.com/img',
new AbortController().signal
),
{
data: fixture,
contentType: stringToMIMEType(contentType),
}
(
await fetchLinkPreviewImage(
fakeFetch,
'https://example.com/img',
new AbortController().signal
)
)?.contentType,
stringToMIMEType(contentType)
);
});
});
@ -1238,15 +1237,14 @@ describe('link preview fetching', () => {
);
assert.deepEqual(
await fetchLinkPreviewImage(
fakeFetch,
'https://example.com/img',
new AbortController().signal
),
{
data: fixture,
contentType: IMAGE_JPEG,
}
(
await fetchLinkPreviewImage(
fakeFetch,
'https://example.com/img',
new AbortController().signal
)
)?.contentType,
IMAGE_JPEG
);
sinon.assert.calledTwice(fakeFetch);