const AWS = require('aws-sdk'); const lambda = new AWS.Lambda({ credentials: { accessKeyId: process.env.AWS_LAMBDA_EXECUTE_KEY, secretAccessKey: process.env.AWS_LAMBDA_EXECUTE_SECRET }, region: 'us-east-1' }); 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; } };