const dayjs = require('dayjs') const path = require('path') const checkValidURL = (url) => { return checkURLFormat(url) || checkNumberURLParameter(url) } const checkURLFormat = (url) => { return /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(url) } const checkNumberURLParameter = (url) => { return /^\d+$/.test(url) } const createParserError = () => { const err = new Error('Unable to parse event data.') err.statusCode = 422 return err } // NOTE: Using mobile facebook URL because it usually // contains stringified JSON with event information const createMobileURL = (originalURL) => { const urlWithProtocol = originalURL.includes('http') ? originalURL : `https://${originalURL}` const url = new URL(urlWithProtocol) return `${url.protocol}//mobile.facebook.com${url.port}${url.pathname}${url.hash}` } // NOTE: Detect whether URL parameter contains // number or http address const createURL = (param) => { if (checkURLFormat(param)) { return param } if (checkNumberURLParameter(param)) { return `https://facebook.com/events/${param}` } return '' } const getNormalizedUrl = (URLparameter) => { const fbURL = createURL(URLparameter) const mobileUrl = createMobileURL(fbURL) return mobileUrl } module.exports = { checkValidURL, checkURLFormat, checkNumberURLParameter, createParserError, createMobileURL, createURL, getNormalizedUrl, }