index.js 1.8 KB

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