index.js 2.0 KB

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