get-url-hash.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. const AWS = require('aws-sdk');
  2. const lambda = new AWS.Lambda({
  3. credentials: {
  4. accessKeyId: process.env.AWS_LAMBDA_EXECUTE_KEY,
  5. secretAccessKey: process.env.AWS_LAMBDA_EXECUTE_SECRET
  6. },
  7. region: 'us-east-1'
  8. });
  9. module.exports = async function getUrlHash (targetUrl, algorithm = 'sha256', attempts = 3) {
  10. try {
  11. return new Promise((resolve, reject) => {
  12. lambda.invoke({
  13. FunctionName: 'hasher',
  14. Payload: JSON.stringify({
  15. targetUrl,
  16. algorithm
  17. })
  18. }, (err, data) => {
  19. if (err) return reject(err);
  20. try {
  21. const response = JSON.parse(data.Payload);
  22. if (response.statusCode !== 200) return reject(new Error('non-200 status code received from hasher function'));
  23. if (!response.hash) return reject(new Error('Successful lambda call but failed to get valid hash'));
  24. resolve(response.hash);
  25. } catch (err) {
  26. return reject(err);
  27. }
  28. });
  29. });
  30. } catch (err) {
  31. if (attempts > 1) {
  32. console.error('Failed to get URL hash for', targetUrl, 'we will retry', err);
  33. return getUrlHash(targetUrl, algorithm, attempts - 1);
  34. }
  35. throw err;
  36. }
  37. };