|
@@ -8,24 +8,32 @@ const lambda = new AWS.Lambda({
|
|
|
region: 'us-east-1'
|
|
|
});
|
|
|
|
|
|
-module.exports = function getUrlHash (targetUrl, algorithm = 'sha256') {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- lambda.invoke({
|
|
|
- FunctionName: 'hasher',
|
|
|
- Payload: JSON.stringify({
|
|
|
- targetUrl,
|
|
|
- algorithm
|
|
|
- })
|
|
|
- }, (err, data) => {
|
|
|
- if (err) return reject(err);
|
|
|
- try {
|
|
|
- const response = JSON.parse(data.Payload);
|
|
|
- if (response.statusCode !== 200) return reject(new Error('non-200 status code received from hasher function'));
|
|
|
- if (!response.hash) return reject(new Error('Successful lambda call but failed to get valid hash'));
|
|
|
- resolve(response.hash);
|
|
|
- } catch (err) {
|
|
|
- return reject(err);
|
|
|
- }
|
|
|
+module.exports = async function getUrlHash (targetUrl, algorithm = 'sha256', attempts = 3) {
|
|
|
+ try {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ lambda.invoke({
|
|
|
+ FunctionName: 'hasher',
|
|
|
+ Payload: JSON.stringify({
|
|
|
+ targetUrl,
|
|
|
+ algorithm
|
|
|
+ })
|
|
|
+ }, (err, data) => {
|
|
|
+ if (err) return reject(err);
|
|
|
+ try {
|
|
|
+ const response = JSON.parse(data.Payload);
|
|
|
+ if (response.statusCode !== 200) return reject(new Error('non-200 status code received from hasher function'));
|
|
|
+ if (!response.hash) return reject(new Error('Successful lambda call but failed to get valid hash'));
|
|
|
+ resolve(response.hash);
|
|
|
+ } catch (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
+ } catch (err) {
|
|
|
+ if (attempts > 1) {
|
|
|
+ console.error('Failed to get URL hash for', targetUrl, 'we will retry', err);
|
|
|
+ return getUrlHash(targetUrl, algorithm, attempts - 1);
|
|
|
+ }
|
|
|
+ throw err;
|
|
|
+ }
|
|
|
};
|