123456789101112131415161718192021222324252627282930313233343536373839 |
- 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;
- }
- };
|