127.0.0.1:8000 budget / master server / external_apis / gmail / email_parsers / helpers.js
master

Tree @master (Download .tar.gz)

helpers.js @masterraw · history · blame

const html_parser = require('node-html-parser');
const time = require('../../../utils/time');

module.exports = {
  get_date_header_parser: function (attr_name = 'date') {
    return {
      'Date': function (header_value) {
        return {
          [attr_name]: time.moment(header_value).format('YYYY-MM-DD')
        };
      }
    }
  },

  parsers_html_wrapper: function (get_transaction_from_html) {
    return function (parts) {
      for (const part of parts) {
        const transaction = recursive_parts_search(part, get_transaction_from_html);
        if (transaction) return transaction;
      }
      return {};
    }
  }
}

function recursive_parts_search(part, get_transaction_from_html) {
  if (part.mimeType === 'text/html' && part.body && part.body.size > 0 && part.body.data) {
    const transaction = get_transaction_from_html(
      html_parser.parse(
        Buffer.from(part.body.data, 'base64').toString()
      )
    );
    if (transaction) return transaction;
  } else if (Array.isArray(part.parts)) {
    for (const sub_part of part.parts) {
      const transaction = recursive_parts_search(sub_part, get_transaction_from_html)
      if (transaction) return transaction;
    }
  }
  return null;
}