index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const ms = require('ms');
  2. const { differenceInDays, differenceInHours, differenceInMonths } = require('date-fns');
  3. exports.addProtocol = url => {
  4. const hasProtocol = /^\w+:\/\//.test(url);
  5. return hasProtocol ? url : `http://${url}`;
  6. };
  7. exports.generateShortUrl = (id, domain, useHttps) => {
  8. const protocol = useHttps || !domain ? 'https://' : 'http://';
  9. return `${protocol}${domain || process.env.DEFAULT_DOMAIN}/${id}`;
  10. };
  11. exports.isAdmin = email =>
  12. process.env.ADMIN_EMAILS.split(',')
  13. .map(e => e.trim())
  14. .includes(email);
  15. exports.getStatsLimit = url =>
  16. url.user.statsLimit || Number(process.env.DEFAULT_MAX_STATS_PER_LINK) || 10000000;
  17. exports.getStatsCacheTime = total => {
  18. switch (true) {
  19. case total <= 5000:
  20. return ms('5 minutes') / 1000;
  21. case total > 5000 && total < 20000:
  22. return ms('10 minutes') / 1000;
  23. case total < 40000:
  24. return ms('15 minutes') / 1000;
  25. case total > 40000:
  26. return ms('30 minutes') / 1000;
  27. default:
  28. return ms('5 minutes') / 1000;
  29. }
  30. };
  31. exports.statsObjectToArray = item => {
  32. const objToArr = key =>
  33. Array.from(Object.keys(item[key]))
  34. .map(name => ({
  35. name,
  36. value: item[key][name],
  37. }))
  38. .sort((a, b) => b.value - a.value);
  39. return {
  40. browser: objToArr('browser'),
  41. os: objToArr('os'),
  42. country: objToArr('country'),
  43. referrer: objToArr('referrer'),
  44. };
  45. };
  46. exports.getDifferenceFunction = type => {
  47. switch (type) {
  48. case 'lastDay':
  49. return differenceInHours;
  50. case 'lastWeek':
  51. return differenceInDays;
  52. case 'lastMonth':
  53. return differenceInDays;
  54. case 'allTime':
  55. return differenceInMonths;
  56. default:
  57. return null;
  58. }
  59. };
  60. const getUTCDate = (dateString = Date.now()) => {
  61. const date = new Date(dateString);
  62. return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours());
  63. };
  64. exports.getUTCDate = getUTCDate;