{"version":3,"sources":["Theme.js","Storage.js","InstagramUtil.js","Util.js","API.js","component/Firebase.js","component/Header.js","component/Footer.js","Facebook.js","page/Login.js","component/Spinner.js","page/Home.js","component/instagram/AddInstagram.js","component/facebook/AddFacebook.js","page/Add.js","component/Orb.js","component/Metric.js","component/instagram/Overview.js","component/StaticMetric.js","component/instagram/RandomCommentPicker.js","component/instagram/PostComments.js","component/instagram/PostTags.js","page/Instagram.js","component/campaign/List.js","component/campaign/Add.js","component/campaign/editor/Widget.js","component/campaign/View.js","page/Campaign.js","page/Admin.js","component/Feedback.js","component/BetaRequest.js","App.js","reportWebVitals.js","index.js"],"names":["Theme","global","font","family","size","height","anchor","fontWeight","tip","content","background","set","key","val","localStorage","setItem","clear","INSTA_REGEX","getTimestampDate","timestamp","toString","split","date","InstagramUtil","getInstaShortCode","url","out","exec","rem","includes","getPostObjLabel","i","labeled","Object","keys","length","debug","username","caption","usernameLabel","slice","Math","floor","Date","now","DEBUG","parseInt","process","error","console","log","PATH","Login","Home","Settings","Add","Instagram","Campaign","AddCampaign","ListCampaign","Admin","normalize","path","toLowerCase","replace","IG","getUserDoc","JSON","parse","getItem","e","toSerializedToken","platform","value","display","pid","active","toDeserializedToken","report","isProd","hostname","window","location","local","test","branch","primary","isTrue","item","dev","some","API","firebase","featureFlags","db","firestore","upgradeFbToken","functions","httpsCallable","generateCode","requestAccess","redeemCode","a","user","auth","currentUser","uid","collection","Collections","USERS","doc","get","providerToToken","provider","token","providerId","Platforms","FACEBOOK","displayName","email","providerData","getRedirectResult","tokenData","credential","accessToken","Errors","INVALID_TOKEN","upgradedToken","fbProvider","verified","tokens","data","upgrade","merge","latestTokens","pull","reduce","acc","cur","ts","dayjs","unix","read","FEEDBACK","add","getUser","createUser","updateTokens","createFeedback","config","apiKey","authDomain","projectId","storageBucket","messagingSenderId","appId","measurementId","initializeApp","analytics","useEmulator","rcDefault","enable_campaigns","announcement","remoteConfig","settings","minimumFetchIntervalMillis","defaultConfig","FirebaseContext","React","createContext","FeatureFlagsContext","APIContext","useFirebase","useContext","useFeatureFlags","useAPI","FirebaseProvider","children","useState","fire","flags","setFlags","api","setApi","useEffect","fetchAndActivate","then","activated","getBoolean","getString","newConfig","prev","Provider","Header","wrap","onLogout","useLocation","setLocation","Nav","direction","Anchor","href","label","Box","pad","horizontal","round","margin","left","fill","Text","Menu","right","items","onClick","signOut","Footer","FeedbackContext","getFullYear","Consumer","showFeedback","setShowFeedback","Button","Chat","getLoginStatus","Promise","resolve","reject","FB","res","response","status","authResponse","data_access_expiration_time","expiresIn","graphDomain","signedRequest","userID","handleAuthResponse","catch","getPermissionsScope","join","responseHandler","message","params","param","access_token","getAccessToken","getMoreIgFields","fields","limit","paging","getIgFields","all","filterFn","next","before","cursors","after","onlyCursorPagination","rawData","outData","concat","Facebook","login","scope","getName","getAccounts","getIgAccounts","fbPage","LoginPage","Card","CardBody","bottom","FacebookAuthProvider","forEach","perm","addScope","signInWithRedirect","spin","version","viewBox","width","opacity","d","attributeName","type","from","to","dur","repeatCount","Spinner","align","justify","appPages","INSTAGRAM","WIZARD","map","loading","setTokens","campaigns","showOverlay","setShowOverlay","overlayData","setOverlayData","deleteCard","_tokens","filter","t","AppIcon","Help","AppCard","loc","Stack","CardHeader","flex","vertical","CardFooter","alignSelf","Close","gap","campaign","title","cid","top","app","Layer","onEsc","onClickOutside","Heading","level","Paragraph","color","AddInstagram","undefined","fbOptions","setFbOptions","pageOptions","setPageOptions","selectedPage","setSelectedPage","igAccount","setIgAccount","fbAccounts","useCallback","igAccounts","fb","id","instagram_business_account","alreadyLinked","find","FormField","Select","options","labelKey","valueLabel","onChange","option","name","TextInput","disabled","upgradeToken","igToken","temp","AddFacebook","fbTokens","Tabs","Tab","Orb","day","month","total","metric","setActive","setLabel","Meter","values","onHover","over","max","thickness","weight","calcData","valueKey","fn","_high","Metric","tooltip","avg","avgUnit","hideVal","recent","recentCount","high","rData","Tip","toLocaleString","toFixed","getChartData","raw","ticks","description","time","end_time","format","hourLabel","input","Overview","mediaData","totalFollowers","insightOverview","activeOverview","useDimensions","polyfill","ResizeObserver","observe","ref","LineChart","Line","dataKey","stroke","CartesianGrid","strokeDasharray","XAxis","YAxis","Tooltip","Legend","lines","endTime","dayTick","hour","push","activityChartData","lineLabels","diff","getTimezoneOffset","startTime","currentHourMin","subtract","currentHourMax","lineLabel","ReferenceArea","x1","x2","fillOpacity","strokeOpacity","activityInsights","comments_count","like_count","engagement","StaticMetric","el","index","unit","style","textTransform","isNaN","RandomCommentPicker","comments","useTag","setUseTag","useWord","setWordTag","normal","setNormal","wordSensitive","setWordSensitive","searchWord","setSearchWord","winner","setWinner","CheckBox","checked","target","placeholder","filtered","haystack","c","text","RegExp","getCommentPool","win","random","entries","validEntries","List","primaryKey","dropProps","FETCH_METHOD","PostComments","setLoading","fetchMethod","setFetchMethod","recentPosts","setRecentPosts","post","setPost","searchUrl","setSearchUrl","postCommentData","setPostCommentData","impressionData","setImpressionData","media_type","transformed","period","getPostImpressions","method","p","final","assign","needle","m","prop","getPostSelectionDOM","isBefore","count","ceil","splice","k","Fragment","row","j","getPostImpressionDOM","PostTags","tags","setTags","selectedTag","setSelectedTag","tagUserFollowers","setTagUserFollowers","errorMessage","setErrorMessage","getTags","queryTag","getTotalFollowersForUser","business_discovery","followers_count","INSIGHT_FIELDS","ACTIVE_FIELDS","logout","img","setImg","setTotalFollowers","totalFollowing","setTotalFollowing","totalMedia","setTotalMedia","setMediaData","setInsightOverview","setActiveOverview","activityStart","endOf","follows_count","media_count","profile_picture_url","since","until","Avatar","src","textAlign","setCampaigns","setChecked","visible","event","alignContent","setTitle","Widget","editMode","Grid","WidthProvider","GridLayout","STATES","View","viewState","setViewState","public","shareable","setShareable","layout","setLayout","RadioButtonGroup","secondary","old","uuid","x","y","Infinity","w","h","className","cols","rowHeight","onLayoutChange","isDraggable","isResizable","widget","Campaing","note","setNote","setKey","_key","BetaTab","Feedback","setText","close","TextArea","BetaRequest","updateUser","beta","setBeta","code","setCode","App","setUser","displayError","setDisplayError","userDoc","stringify","unsubscribe","onAuthStateChanged","userState","metadata","creationTime","lastSignInTime","err","Grommet","theme","full","Main","admin","betaUpdate","oldUser","body","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.241f5b40.chunk.js","sourcesContent":["const Theme = {\n global: {\n font: {\n family: 'Roboto',\n size: '18px',\n height: '20px',\n },\n },\n anchor: {\n fontWeight: 400,\n },\n tip: {\n content: {\n background: '#F8F8F8',\n },\n },\n};\n\nexport default Theme;\n","export function set(key, val) {\n localStorage.setItem(key, val);\n}\n\nexport function get(key) {\n return localStorage.getItem(key);\n}\n\nexport function clear() {\n localStorage.clear();\n}\n","import { debug } from './Util';\n\nconst INSTA_REGEX = /^(https?:\\/\\/)(www.)?instagram.com\\/p\\/(.*)/i;\n\nconst getInstaShortCode = (url) => {\n const [, , , rem] = INSTA_REGEX.exec(url);\n let out;\n\n if (rem.includes('/')) {\n [out] = rem.split('/');\n } else if (rem) {\n out = rem;\n } else {\n out = url;\n }\n return out;\n};\n\nconst getTimestampDate = (timestamp = '') => {\n if (!timestamp) return '';\n let [date] = timestamp.toString().split('T');\n return date ?? '';\n};\nconst getPostObjLabel = (i, labeled = true) => {\n if (!i || Object.keys(i).length === 0) return '';\n\n debug('getPostObjLabel', i);\n const { username = '', timestamp = 0, caption = '' } = i;\n const usernameLabel = labeled ? `${username} - ` : '';\n\n return `${getTimestampDate(\n timestamp\n )} (${usernameLabel}${caption.toString().slice(0, 60)}...)`;\n};\n\nconst InstagramUtil = {\n INSTA_REGEX,\n getInstaShortCode,\n getTimestampDate,\n getPostObjLabel,\n};\n\nexport default InstagramUtil;\n","import InstagramUtil from './InstagramUtil';\nimport { get } from './Storage';\n\nexport const timestamp = () => Math.floor(Date.now() / 1000);\n\n// Logout time in seconds (30 mins)\nexport const LOGOUT_TIME = 1800;\n\n/* Basic log support\n0 - off\n1 - critical\n2 - error\n3 - log\n4 - debug\n*/\nexport const DEBUG = parseInt(process.env.REACT_APP_DEBUG) || 1;\nexport const critical = (...content) =>\n DEBUG && DEBUG >= 1 && console.error(`[CRITICAL]`, ...content);\nexport const error = (...content) =>\n DEBUG && DEBUG >= 2 && console.error(`[ERROR]`, ...content);\nexport const log = (...content) =>\n DEBUG && DEBUG >= 3 && console.log(`[LOG]`, ...content);\nexport const debug = (...content) =>\n DEBUG && DEBUG >= 4 && console.log(`[DEBUG]`, ...content);\n\nexport const PATH = {\n Login: '/',\n Home: '/home/',\n Settings: '/settings/',\n Add: '/add/',\n Instagram: '/instagram/',\n Campaign: '/campaign/',\n AddCampaign: '/campaign/add',\n ListCampaign: '/campaign/list',\n Admin: '/admin',\n};\n\nexport function normalize(path) {\n return path.toString().toLowerCase().replace(/\\/+/gi, '/');\n}\n\nexport const IG = InstagramUtil;\n\nexport function getUserDoc() {\n try {\n return JSON.parse(get('userDoc'));\n } catch (e) {\n return false;\n }\n}\n\nexport function toSerializedToken(\n platform,\n value,\n display,\n pid,\n active = true\n) {\n return {\n [`${platform}-${pid}`]: {\n value,\n active,\n display,\n platform,\n pid,\n },\n };\n}\n\nexport function toDeserializedToken(\n platform,\n value,\n display,\n pid,\n active = true,\n report = true\n) {\n return {\n platform,\n pid,\n value,\n active,\n display,\n report,\n };\n}\n\nexport function isProd() {\n const hostname = window.location.hostname;\n const local = /^localhost$/i.test(hostname);\n const branch = /\\.pages\\.dev$/i.test(hostname);\n const primary = /^measure\\.social$/i.test(hostname);\n const isTrue = (item) => item === true;\n const dev = [local, branch].some(isTrue);\n const prod = [primary].some(isTrue);\n if (prod && !dev) {\n return true;\n }\n return false;\n}\n\nexport function toBool(val) {\n switch (`${val}`.toString().toLowerCase()) {\n case 'true':\n case '1':\n return true;\n case 'false':\n case '0':\n case 'undefined':\n case 'null':\n default:\n return false;\n }\n}\n","import { debug, error, log, toSerializedToken } from './Util';\nimport Collections from './Collections.json';\nimport Errors from './Errors.json';\nimport Platforms from './Platforms.json';\nimport dayjs from 'dayjs';\n\nexport default function API(firebase, featureFlags) {\n const db = firebase.firestore();\n\n // Cloud function\n const upgradeFbToken = firebase.functions().httpsCallable('upgradeFbToken');\n const generateCode = firebase.functions().httpsCallable('generateCode');\n const requestAccess = firebase.functions().httpsCallable('requestAccess');\n const redeemCode = firebase.functions().httpsCallable('redeemCode');\n\n async function getUser() {\n const user = firebase.auth().currentUser;\n if (!user || !user.uid) return null;\n return db.collection(Collections.USERS).doc(user.uid).get();\n }\n\n function providerToToken(provider, token = null) {\n if (!provider?.uid) return null;\n if (!provider?.providerId.toString().toLowerCase()) return null;\n\n switch (provider.providerId.toString().toLowerCase()) {\n case 'facebook.com':\n return toSerializedToken(\n Platforms.FACEBOOK,\n token,\n provider?.displayName,\n provider.uid,\n token !== null\n );\n default:\n return null;\n }\n }\n\n // @TODO: Add support for non-fb sso types\n async function createUser() {\n const user = firebase.auth().currentUser;\n debug('createUser', user);\n if (!user || !user.uid) return null;\n\n const { displayName, email, providerData } = user;\n let token;\n try {\n const tokenData = await firebase.auth().getRedirectResult();\n log('tokenData', tokenData);\n token = tokenData?.credential?.accessToken;\n } catch (e) {\n error(e);\n throw Errors.INVALID_TOKEN;\n }\n\n try {\n const upgradedToken = await upgradeFbToken({\n token,\n });\n const [fbProvider] = providerData;\n const doc = {\n displayName,\n email,\n verified: false,\n tokens: {\n ...providerToToken(fbProvider, upgradedToken?.data?.upgrade),\n },\n };\n log('doc to create', doc);\n db.collection(Collections.USERS).doc(user.uid).set(doc, { merge: true });\n return doc;\n } catch (e) {\n error(e);\n return;\n }\n }\n\n async function updateTokens(latestTokens = []) {\n const user = firebase.auth().currentUser;\n const pull = {};\n const tokens = latestTokens.reduce((acc, cur) => {\n pull[cur.platform] = pull[cur.platform] || false;\n pull[cur.platform] = cur.active || pull[cur.platform];\n\n return {\n ...acc,\n [`${cur.platform}-${cur.pid}`]: cur,\n };\n }, {});\n\n db.collection(Collections.USERS)\n .doc(user.uid)\n .set({ pull, tokens }, { merge: true });\n }\n\n async function createFeedback(data) {\n try {\n const user = firebase.auth().currentUser;\n if (!user || !user.uid) return null;\n\n const doc = {\n ...data,\n uid: user.uid,\n displayName: user.displayName || '',\n ts: dayjs().unix(),\n read: false,\n };\n\n log('feedback to create', doc);\n return db.collection(Collections.FEEDBACK).add(doc);\n } catch (e) {\n error(e);\n return;\n }\n }\n\n return {\n upgradeFbToken,\n generateCode,\n requestAccess,\n redeemCode,\n getUser,\n createUser,\n updateTokens,\n createFeedback,\n };\n}\n","import React, { useContext, useEffect, useState } from 'react';\nimport firebase from 'firebase/app';\nimport 'firebase/auth';\nimport 'firebase/firestore';\nimport 'firebase/functions';\nimport 'firebase/analytics';\nimport 'firebase/remote-config';\nimport { isProd, log, debug } from '../Util';\nimport API from '../API';\n\nconst config = isProd()\n ? {\n apiKey: 'AIzaSyCH8QsvG_9Dy0a9kD8Bq9QQznqELTwRxoU',\n authDomain: 'measure-social-prod.firebaseapp.com',\n projectId: 'measure-social-prod',\n storageBucket: 'measure-social-prod.appspot.com',\n messagingSenderId: '569463302393',\n appId: '1:569463302393:web:c97e2ec38edb78d7dcda28',\n measurementId: 'G-H8K7YWCVNX',\n }\n : {\n apiKey: 'AIzaSyCvEI0cloy6_jz7UdYUJx6SLCGXpt8ZrxI',\n authDomain: 'measure-social-dev.firebaseapp.com',\n projectId: 'measure-social-dev',\n storageBucket: 'measure-social-dev.appspot.com',\n messagingSenderId: '465163724594',\n appId: '1:465163724594:web:144a62b25c687e1d7a192b',\n measurementId: 'G-V88YD1VZTH',\n };\n\nfirebase.initializeApp(config);\nfirebase.analytics();\n\nif (process.env.REACT_APP_DEV_AUTH.toString().toLowerCase() === 'true') {\n firebase.auth().useEmulator('http://localhost:9099/');\n}\nif (process.env.REACT_APP_DEV.toString().toLowerCase() === 'true') {\n firebase.firestore().useEmulator('localhost', 8080);\n firebase.functions().useEmulator('localhost', 5001);\n}\n\nconst rcDefault = {\n enable_campaigns: false,\n announcement: '',\n};\nconst remoteConfig = firebase.remoteConfig();\nif (!isProd()) {\n remoteConfig.settings.minimumFetchIntervalMillis = 60000;\n}\nremoteConfig.defaultConfig = rcDefault;\n\nconst FirebaseContext = React.createContext({});\nconst FeatureFlagsContext = React.createContext(rcDefault);\nconst APIContext = React.createContext({});\n\nexport function useFirebase() {\n return useContext(FirebaseContext);\n}\n\nexport function useFeatureFlags() {\n return useContext(FeatureFlagsContext);\n}\n\nexport function useAPI() {\n return useContext(APIContext);\n}\n\nexport function FirebaseProvider({ children }) {\n const [fire] = useState(firebase);\n const [flags, setFlags] = useState({});\n const [api, setApi] = useState(API(fire, flags));\n\n useEffect(() => {\n remoteConfig\n .fetchAndActivate()\n .then((activated) => {\n if (!activated) log('remoteConfig not activated');\n return {\n enable_campaigns: remoteConfig.getBoolean('enable_campaigns'),\n announcement: remoteConfig.getString('announcement'),\n };\n })\n .then((newConfig) => {\n debug('flags', newConfig);\n setFlags((prev) => ({\n ...prev,\n ...newConfig,\n }));\n });\n }, [fire]);\n\n useEffect(() => setApi(API(fire, flags)), [fire, flags]);\n\n return (\n \n \n {children}\n \n \n );\n}\n","import { Header as GHeader, Anchor, Menu, Nav, Box, Text } from 'grommet';\nimport { clear } from '../Storage';\nimport { PATH } from '../Util';\nimport { useLocation } from 'wouter';\nimport React from 'react';\nimport { useFirebase } from './Firebase';\n\nfunction Header({ user, onLogout }) {\n const firebase = useFirebase();\n const [, setLocation] = useLocation();\n\n const versionLabel = (wrap) => (\n \n {wrap}\n \n Beta\n \n \n );\n\n return (\n \n {versionLabel(\n \n )}\n {user && (\n \n );\n}\n\nexport default Header;\n","import { Box, Button, Footer as GFooter, Text } from 'grommet';\nimport React from 'react';\nimport { Chat } from 'grommet-icons';\n\nfunction Footer({ FeedbackContext, user }) {\n return (\n \n \n Copyright © measure.social {new Date().getFullYear()}\n Made with ♥ in Texas\n \n {user && (\n \n {({ showFeedback, setShowFeedback }) => (\n \n )}\n \n )}\n \n );\n}\n\nexport default Footer;\n","import { set } from './Storage';\nimport { timestamp, error } from './Util';\n\nwindow.getLoginStatus = getLoginStatus;\n\nfunction handleAuthResponse(response = {}) {\n if (!response) return Promise.reject('Invalid data.');\n switch (response.status) {\n case 'connected':\n const {\n accessToken,\n data_access_expiration_time,\n expiresIn,\n graphDomain,\n signedRequest,\n userID,\n } = response.authResponse || {};\n set('token', accessToken);\n set('expiration', data_access_expiration_time);\n set('duration', expiresIn);\n set('login', timestamp());\n set('domain', graphDomain);\n set('signed', signedRequest);\n set('id', userID);\n return Promise.resolve(response.authResponse);\n case 'not_authorized':\n case 'unknown':\n default:\n return Promise.reject(response);\n }\n}\n\n// TODO: Generate access token: https://developers.facebook.com/docs/facebook-login/access-tokens#generating-an-app-access-token\nfunction getLoginStatus() {\n return new Promise((resolve, reject) => {\n window.FB.getLoginStatus((res) =>\n handleAuthResponse(res).then(resolve).catch(reject)\n );\n });\n}\n\n/**\n * The primary list of facebook permissions used.\n *\n * @returns {String} The CSV string of perms\n */\nfunction getPermissionsScope() {\n return [\n 'email',\n 'pages_show_list',\n 'instagram_basic',\n 'instagram_manage_comments',\n 'instagram_manage_insights',\n 'pages_read_engagement',\n 'pages_manage_metadata',\n 'public_profile',\n ].join(',');\n}\n\nfunction login() {\n return new Promise((resolve, reject) => {\n window.FB.login(\n function (response) {\n if (response.status === 'connected') {\n return resolve(response); // Logged into your webpage and Facebook.\n }\n\n // The person is not logged into your webpage or we are unable to tell.\n return reject(response);\n },\n { scope: getPermissionsScope() }\n );\n });\n}\n\nfunction responseHandler(response, resolve, reject) {\n if (!response) return reject(`An error has occured.`);\n if (response.error) return reject(response.error.message || response.error);\n return resolve(response);\n}\n\nfunction params(param) {\n const access_token = param.token || window.FB.getAccessToken();\n delete param.token;\n return {\n access_token,\n ...param,\n };\n}\n\nconst getName = (token) =>\n new Promise((resolve, reject) =>\n window.FB.api('/me', params({ fields: 'name', token }), (res) =>\n responseHandler(res, resolve, reject)\n )\n );\n\nconst getAccounts = (token, config = {}) =>\n new Promise((resolve, reject) =>\n window.FB.api(\n '/me/accounts',\n params({ fields: 'name,id', limit: 10000, ...config, token }),\n (res) => responseHandler(res, resolve, reject)\n )\n );\n\nconst getIgAccounts = (token, fbPage) =>\n new Promise((resolve, reject) =>\n window.FB.api(\n `/${fbPage}`,\n params({\n fields: 'instagram_business_account{id,name,username}',\n limit: 10000,\n token,\n }),\n (res) => responseHandler(res, resolve, reject)\n )\n );\n\nconst getMoreIgFields = (token, url, fields, limit = 50, paging = {}) =>\n new Promise((resolve, reject) => {\n const data = typeof fields === 'string' ? { fields } : { ...fields };\n return window.FB.api(\n url,\n 'get',\n params({\n ...data,\n limit,\n ...paging,\n token,\n }),\n (res) => responseHandler(res, resolve, reject)\n );\n });\n\nconst getIgFields = async (\n token,\n url,\n fields,\n limit = 50,\n all = false,\n prev = [],\n paging,\n filterFn\n) => {\n try {\n let res = await getMoreIgFields(token, url, fields, limit, paging);\n const next = res?.paging?.next;\n const before = res?.paging?.cursors?.before;\n const after = res?.paging?.cursors?.after;\n const onlyCursorPagination = !next && !before && after;\n const rawData = res.data || res;\n const data = filterFn ? filterFn(rawData) : rawData;\n const outData = prev.concat(data);\n\n // we want all the data\n if (all || outData.length < limit) {\n // if there is more, get it\n if (next) {\n return await getIgFields(token, next, fields, limit, all, outData);\n }\n // this is all the data, no weird cursor pagination\n else if (!onlyCursorPagination) {\n return outData;\n }\n }\n\n // escape if we're not getting data anymore.\n if (rawData.length === 0) {\n return outData;\n }\n\n if (rawData.length < limit && onlyCursorPagination) {\n return await getIgFields(\n token,\n url,\n fields,\n limit - data.length,\n all,\n outData,\n {\n after,\n }\n );\n }\n\n return outData;\n } catch (e) {\n error(e);\n return [];\n }\n};\n\nconst Facebook = {\n getLoginStatus,\n getPermissionsScope,\n login,\n getName,\n getAccounts,\n getIgAccounts,\n getIgFields,\n};\n\nexport default Facebook;\n","import { Card, CardBody, Box, Text, Button } from 'grommet';\nimport React from 'react';\nimport { useFirebase } from '../component/Firebase';\nimport Facebook from '../Facebook';\n\nexport default function LoginPage() {\n const firebase = useFirebase();\n\n return (\n \n \n \n Welcome to measure.social\n \n \n \n );\n}\n","import React from 'react';\nimport { Box } from 'grommet';\n\nconst spin = (\n \n);\n\nfunction Spinner() {\n return (\n \n {spin}\n \n );\n}\n\nexport default Spinner;\n","import {\n Card,\n CardBody,\n CardFooter,\n Box,\n Button,\n CardHeader,\n Stack,\n Layer,\n Heading,\n Paragraph,\n Anchor,\n} from 'grommet';\nimport {\n Add as AddIcon,\n Help as HelpIcon,\n Facebook as FacebookIcon,\n Instagram as InstagramIcon,\n Close as CloseIcon,\n} from 'grommet-icons';\nimport { useState } from 'react';\nimport Spinner from '../component/Spinner';\nimport { PATH, normalize, error, debug } from '../Util';\nimport React from 'react';\nimport Platforms from '../Platforms.json';\nimport { useAPI, useFeatureFlags } from '../component/Firebase';\n\nconst appPages = [Platforms.INSTAGRAM, Platforms.WIZARD].map((i) =>\n i.toLowerCase()\n);\n\nexport default function Home({\n loading,\n tokens = [],\n setTokens,\n campaigns = [],\n}) {\n const API = useAPI();\n const flags = useFeatureFlags();\n const [showOverlay, setShowOverlay] = useState(false);\n const [overlayData, setOverlayData] = useState({\n pid: 0,\n platform: '',\n display: '',\n });\n\n debug('tokens', tokens);\n if (loading) return ;\n\n const deleteCard = async () => {\n const { pid, platform } = overlayData;\n\n try {\n const _tokens = [...tokens].filter(\n (t) => !(t.pid === pid && t.platform === platform)\n );\n setTokens && setTokens(() => _tokens);\n API.updateTokens(_tokens);\n } catch (e) {\n error(e);\n } finally {\n setShowOverlay(false);\n }\n };\n\n const DeleteConfirmation = () => {\n return (\n \n \n \n Remove measure.social account access\n \n \n \n \n To remove measure.social access to the{' '}\n {overlayData?.platform.toString().toLowerCase()} account \"\n {overlayData?.display}\", please click Delete.\n \n \n This action is not reversible. Once the app is unlinked, we will no\n longer be able to access data on your behalf.\n \n \n \n \n \n \n \n );\n };\n\n const AppIcon = (platform) => {\n const size = 'xlarge';\n switch (platform.toString().toLowerCase()) {\n case Platforms.FACEBOOK:\n return ;\n case Platforms.INSTAGRAM:\n return ;\n case Platforms.WIZARD:\n return ;\n default:\n return ;\n }\n };\n\n const AppCard = (\n { platform, pid = 0, display = 'New', value = undefined, active = false },\n label = 'View',\n loc\n ) => {\n return (\n \n \n \n \n {display}\n \n \n \n {AppIcon(platform)}\n \n \n \n \n {appPages.includes(platform.toLowerCase()) && (\n \n )}\n \n \n \n \n {display !== 'New' && (\n {\n setOverlayData({ platform, pid, display });\n setShowOverlay(true);\n }}\n >\n \n \n )}\n \n );\n };\n\n const CampaignCard = (campaign) => {\n const { title, cid } = campaign;\n return (\n \n \n \n {title}\n \n \n \n \n \n \n \n \n );\n };\n\n const CampaignLinks = () => {\n return (\n \n \n \n \n \n \n \n \n );\n };\n\n const AppWizard = () =>\n AppCard({ platform: Platforms.WIZARD }, 'Link App', PATH.Add);\n const AppList = () => tokens.map((app) => AppCard(app));\n\n return (\n \n {flags.enable_campaigns && (\n <>\n \n {[...campaigns.map(CampaignCard)].slice(0, 3)}\n \n {CampaignLinks()}\n >\n )}\n\n \n {[...AppList(), AppWizard()]}\n \n {showOverlay && (\n setShowOverlay(false)}\n onClickOutside={() => setShowOverlay(false)}\n >\n {DeleteConfirmation()}\n \n )}\n \n );\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { Box, FormField, Select, TextInput, Button, Text } from 'grommet';\nimport React from 'react';\nimport { debug, error, normalize, PATH, toDeserializedToken } from '../../Util';\nimport { useLocation } from 'wouter';\nimport Platforms from '../../Platforms.json';\nimport Facebook from '../../Facebook';\nimport { useAPI } from '../Firebase';\n\nfunction AddInstagram({ tokens, setTokens }) {\n const [fbOptions, setFbOptions] = useState({ display: '', value: undefined });\n const [pageOptions, setPageOptions] = useState([]);\n const [selectedPage, setSelectedPage] = useState(undefined);\n const [igAccount, setIgAccount] = useState(undefined);\n const [, setLocation] = useLocation();\n const API = useAPI();\n\n const fbAccounts = useCallback(() => {\n if (!tokens || tokens.length === 0) return [];\n return tokens.filter((token) => token.platform === Platforms.FACEBOOK);\n }, [tokens]);\n\n const igAccounts = useCallback(() => {\n if (!tokens || tokens.length === 0) return [];\n return tokens.filter((token) => token.platform === Platforms.INSTAGRAM);\n }, [tokens]);\n\n // On page load, pull the fb account list.\n useEffect(() => {\n if (!tokens || tokens.length === 0) return;\n const fb = fbAccounts();\n\n // If we only have 1 account, prepopulate the next form field\n if (fb.length === 1) {\n setFbOptions(fb[0]);\n }\n }, [tokens, setFbOptions, fbAccounts]);\n\n // On account selection, pull the fb accounts associated with that token\n useEffect(() => {\n if (!fbOptions || !fbOptions?.value) return;\n Facebook.getAccounts(fbOptions?.value).then((res) => {\n debug('fb accounts', res.data);\n setPageOptions(res.data);\n\n if (res.data.length === 1) {\n setSelectedPage(res.data[0]);\n }\n });\n }, [fbOptions, setPageOptions, setSelectedPage]);\n\n // On fb business page selection, pull the ig accounts\n useEffect(() => {\n if (!fbOptions || !fbOptions?.value) return;\n if (!selectedPage || !selectedPage?.id) return;\n Facebook.getIgAccounts(fbOptions?.value, selectedPage.id)\n .then((res) => {\n console.log('Facebook.getIgAccounts', res);\n setIgAccount(res?.instagram_business_account);\n })\n .catch(error);\n }, [fbOptions, selectedPage, setIgAccount]);\n\n const alreadyLinked = (username, pid) => {\n if (username === undefined || pid === undefined) return false;\n const ig = igAccounts();\n const found = ig.find((t) => t.display === username && t.pid === pid);\n return found === undefined ? false : true;\n };\n\n return (\n \n \n \n\n \n \n\n \n \n \n\n {alreadyLinked(igAccount?.username, igAccount?.id) && (\n This account is already linked!\n )}\n {\n const upgradeToken = await API.upgradeFbToken({\n token: fbOptions?.value,\n });\n const igToken = toDeserializedToken(\n Platforms.INSTAGRAM,\n upgradeToken?.data?.upgrade,\n igAccount?.username,\n igAccount?.id\n );\n const temp = tokens.concat(igToken);\n setTokens(temp);\n API.updateTokens(temp);\n setLocation(normalize(`${PATH.Instagram}/${igAccount?.id}`));\n }}\n disabled={alreadyLinked(igAccount?.username, igAccount?.id)}\n />\n \n );\n}\n\nexport default AddInstagram;\n","import { Box, Button } from 'grommet';\nimport React from 'react';\nimport { error, normalize, PATH, toDeserializedToken } from '../../Util';\nimport { useLocation } from 'wouter';\nimport Platforms from '../../Platforms.json';\nimport Facebook from '../../Facebook';\nimport { useAPI } from '../Firebase';\n\nfunction AddFacebook({ tokens = [], setTokens }) {\n const [, setLocation] = useLocation();\n const API = useAPI();\n\n const fbTokens = tokens.filter(\n (token) => token.platform === Platforms.FACEBOOK\n );\n\n return (\n \n {\n try {\n const data = await Facebook.login();\n const { accessToken, userID } = data.authResponse || {};\n\n // confirm that this fb user isnt linked before proceeding\n if (fbTokens.filter((t) => t.pid === userID).length > 0) {\n setLocation(normalize(PATH.Home));\n return;\n }\n\n const { name, id } = await Facebook.getName(accessToken);\n const upgradeToken = await API.upgradeFbToken({\n token: accessToken,\n });\n const igToken = toDeserializedToken(\n Platforms.FACEBOOK,\n upgradeToken?.data?.upgrade,\n name,\n id\n );\n const temp = tokens.concat(igToken);\n setTokens(temp);\n await API.updateTokens(temp);\n setLocation(normalize(PATH.Home));\n } catch (e) {\n error(e);\n }\n }}\n />\n \n );\n}\n\nexport default AddFacebook;\n","import { Tabs, Tab } from 'grommet';\nimport React from 'react';\nimport AddInstagram from '../component/instagram/AddInstagram';\nimport AddFacebook from '../component/facebook/AddFacebook';\n\nexport default function Add({ tokens, setTokens }) {\n return (\n \n \n \n \n \n \n \n \n );\n}\n","import { Box, Text, Meter, Stack } from 'grommet';\nimport React from 'react';\nimport { useState } from 'react';\n\nfunction Orb({ day, month, total, metric }) {\n const [active, setActive] = useState(0);\n const [label, setLabel] = useState('');\n\n return (\n \n \n {\n setActive(over ? day : 0);\n setLabel(over ? 'today' : undefined);\n },\n },\n {\n value: month,\n onHover: (over) => {\n setActive(over ? month : 0);\n setLabel(over ? 'this month' : undefined);\n },\n },\n {\n value: total,\n onHover: (over) => {\n setActive(over ? total : 0);\n setLabel(over ? 'total' : undefined);\n },\n },\n ]}\n max={total}\n size=\"small\"\n thickness=\"medium\"\n />\n \n \n \n {active || total}\n \n \n {label || metric}\n \n \n \n );\n}\n\nexport default Orb;\n","import { Card, CardBody, CardHeader, Text, Heading, Tip } from 'grommet';\nimport React from 'react';\n\nfunction calcData(data, valueKey, fn) {\n return data.reduce(\n (acc, cur) => {\n if (fn) {\n cur = fn(cur);\n }\n let _high = acc._high;\n if (_high === undefined || cur[valueKey] > _high) {\n _high = cur[valueKey];\n }\n\n return { [valueKey]: (acc[valueKey] || 0) + (cur[valueKey] || 0), _high };\n },\n { [valueKey]: 0 }\n );\n}\n\nfunction Metric({\n label = '', // display label for the metric\n tooltip = '', // the html hover tooltip to display\n data = [], // array of objs with data in them\n valueKey = '', // value key in data objs\n avg = false, // bool, whether or not to include the avg\n avgUnit = undefined, // the label unit to display with the avg metric\n fn = undefined, // custom function to run the data through\n hideVal = false, // hide the primary value\n recent = false, // bool, whether or not to show recent\n recentCount = 30, // number of recents\n high = false, // bool, whether or not to show high\n}) {\n const value = calcData(data, valueKey, fn);\n const rData = calcData(data.slice(0, recentCount), valueKey, fn);\n\n return (\n \n \n \n {label}\n \n \n \n {!hideVal && (\n {value[valueKey].toLocaleString()}\n )}\n {avg && (\n \n \n Avg {(value[valueKey] / data.length).toFixed(2)}\n {avgUnit || ''}\n \n \n )}\n {recent && (\n \n \n L{recentCount} {(rData[valueKey] / recentCount).toFixed(2)}\n {avgUnit || ''}\n \n \n )}\n {high && (\n \n \n ATH {(value._high || 0).toFixed(2)}\n {avgUnit || ''}\n \n \n )}\n \n \n );\n}\n\nexport default Metric;\n","import { Box, Text } from 'grommet';\nimport React from 'react';\nimport Metric from '../Metric';\nimport {\n LineChart,\n Line,\n CartesianGrid,\n XAxis,\n YAxis,\n Tooltip,\n Legend,\n ReferenceLine,\n ReferenceArea,\n} from 'recharts';\nimport { ResizeObserver } from '@juggle/resize-observer';\nimport useDimensions from 'react-cool-dimensions';\nimport dayjs from 'dayjs';\n\nconst getChartData = (raw = []) => {\n let ticks = {};\n\n raw.forEach((metric) => {\n const { title = '', description = '', values = [] } = metric;\n values.forEach((time) => {\n const { value, end_time } = time;\n\n ticks[end_time] = ticks[end_time] || {};\n ticks[end_time] = {\n ...ticks[end_time],\n time: dayjs(end_time).format('MM/DD'),\n title,\n [title]: value,\n description: {\n ...(ticks[end_time].description || {}),\n [title]: description,\n },\n };\n });\n });\n\n return Object.values(ticks);\n};\n\nconst hourLabel = (input) => {\n switch (parseInt(input)) {\n case 0:\n return '12am';\n case 1:\n return '1am';\n case 2:\n return '2am';\n case 3:\n return '3am';\n case 4:\n return '4am';\n case 5:\n return '5am';\n case 6:\n return '6am';\n case 7:\n return '7am';\n case 8:\n return '8am';\n case 9:\n return '9am';\n case 10:\n return '10am';\n case 11:\n return '11am';\n case 12:\n return '12pm';\n case 13:\n return '1pm';\n case 14:\n return '2pm';\n case 15:\n return '3pm';\n case 16:\n return '4pm';\n case 17:\n return '5pm';\n case 18:\n return '6pm';\n case 19:\n return '7pm';\n case 20:\n return '8pm';\n case 21:\n return '9pm';\n case 22:\n return '10pm';\n case 23:\n return '11pm';\n default:\n return '';\n }\n};\n\nconst activityChartData = (raw = []) => {\n let lines = [];\n let ticks = {};\n\n raw.forEach((metric) => {\n const { values = [] } = metric;\n values.forEach((time) => {\n const { value = {}, end_time } = time;\n const endTime = dayjs(end_time).format('MM/DD');\n\n Object.keys(value).forEach((dayTick) => {\n ticks[dayTick] = ticks[dayTick] || {\n hour: dayTick,\n label: hourLabel(dayTick),\n };\n ticks[dayTick] = {\n ...ticks[dayTick],\n [endTime]: value[dayTick],\n };\n });\n lines.push(endTime);\n });\n });\n\n return [lines, Object.values(ticks)];\n};\n\nfunction Overview({\n mediaData,\n totalFollowers,\n insightOverview = [],\n activeOverview = [],\n}) {\n const { observe, width } = useDimensions({\n polyfill: ResizeObserver,\n });\n\n const dailyInsights = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n };\n\n const activityInsights = () => {\n const [lineLabels, data] = activityChartData(activeOverview);\n const FB_OFFSET = -7;\n const currentOffset = -1 * (new Date().getTimezoneOffset() / 60);\n const diff = currentOffset - FB_OFFSET;\n let startTime = dayjs();\n if (diff > 0) {\n startTime = startTime.subtract(diff, 'hours');\n } else {\n startTime = startTime.add(diff, 'hours');\n }\n\n const currentHourMin = startTime.hour();\n const currentHourMax = startTime.add(1, 'hour').hour();\n return (\n \n {lineLabels.map((lineLabel) => (\n \n ))}\n \n \n \n \n \n \n \n );\n };\n\n return (\n \n \n {dailyInsights()}\n \n \n \n Total Online Followers\n \n {activityInsights()}\n \n \n \n \n {\n const { comments_count, like_count } = data;\n return {\n ...data,\n ...{\n engagement:\n ((like_count + comments_count) / totalFollowers) * 100,\n },\n };\n }}\n avgUnit=\"%\"\n hideVal\n recent\n high\n />\n \n \n );\n}\n\nexport default Overview;\n","import { Card, CardBody, CardHeader, Text, Heading, Tip } from 'grommet';\nimport React from 'react';\n\nfunction StaticMetric({\n label = '', // display label for the metric\n data = [],\n tooltip = '',\n}) {\n const tooltipWrap = (el) =>\n tooltip ? {el} : el;\n\n return (\n \n \n {tooltipWrap(label)}\n \n \n {data.map((item, index, all) => {\n const { display, value, unit } = item;\n return (\n \n {display === undefined ? '' : `${display} `}\n {value === undefined || isNaN(value)\n ? ''\n : value.toLocaleString()}\n {unit === undefined ? '' : unit}\n {display === undefined && value === undefined && !isNaN(item)\n ? item\n : ''}\n \n );\n })}\n \n \n );\n}\n\nexport default StaticMetric;\n","import dayjs from 'dayjs';\nimport {\n Card,\n CardHeader,\n CardBody,\n Heading,\n Text,\n Box,\n CheckBox,\n TextInput,\n Button,\n List,\n Tip,\n} from 'grommet';\nimport React from 'react';\nimport { useState } from 'react';\nimport { error, debug } from '../../Util';\n\nfunction RandomCommentPicker({ label = 'Pick Winner', comments = [] }) {\n const [useTag, setUseTag] = useState(false);\n const [useWord, setWordTag] = useState(false);\n const [normal, setNormal] = useState(true);\n const [wordSensitive, setWordSensitive] = useState(false);\n const [searchWord, setSearchWord] = useState('');\n const [winner, setWinner] = useState();\n\n // normalize comment data\n const getCommentPool = () => {\n debug('getCommentPool %O', comments);\n let haystack = comments.filter((c) => {\n if (useTag && !c.text.includes('@')) {\n return false;\n }\n if (useWord) {\n if (wordSensitive && !c.text.includes(searchWord)) {\n return false;\n } else if (!new RegExp(searchWord, 'i').test(c.text)) {\n return false;\n }\n }\n\n return true;\n });\n debug('getCommentPool haystack %O', haystack);\n\n if (normal) {\n let map = {};\n\n haystack.forEach((c) => {\n map[c.username] = map[c.username] || [];\n map[c.username].push(c);\n });\n\n return Object.keys(map).map((username) => ({\n username,\n comments: map[username],\n }));\n } else {\n return haystack.map((c) => ({\n username: c.username,\n comments: [c],\n }));\n }\n };\n\n return (\n \n \n {label}\n \n \n \n setUseTag(e.target.checked)}\n />\n setWordTag(e.target.checked)}\n />\n setNormal(e.target.checked)}\n />\n {useWord && (\n \n setWordSensitive(e.target.checked)}\n />\n setSearchWord(e.target.value)}\n />\n \n )}\n \n {winner && (\n {\n setWinner(false);\n }}\n />\n )}\n {\n try {\n const filtered = getCommentPool();\n const win =\n filtered[Math.floor(Math.random() * filtered.length)];\n debug('filtered %O', filtered);\n debug('win %O', win);\n setWinner({\n ...win,\n entries: comments.length,\n validEntries: filtered.length,\n });\n } catch (e) {\n error(e);\n }\n }}\n />\n \n {winner && (\n \n Total Entries: {winner?.entries}\n Unique Entries: {winner?.validEntries}\n Winner: @{winner?.username}\n \n {(item) => (\n \n {item.text}\n \n )}\n
\n \n )}\n \n \n \n );\n}\n\nexport default RandomCommentPicker;\n","import dayjs from 'dayjs';\nimport React, { useEffect, useState } from 'react';\nimport { Box, TextInput, Button, Select } from 'grommet';\nimport { debug, error, IG, log } from '../../Util';\nimport StaticMetric from '../StaticMetric';\nimport RandomCommentPicker from './RandomCommentPicker';\nimport Facebook from '../../Facebook';\nimport Spinner from '../Spinner';\n\nconst { getPostObjLabel } = IG;\nconst FETCH_METHOD = {\n Select: 'Select',\n URL: 'URL',\n};\n\nfunction PostComments({ token, mediaData, totalFollowers }) {\n const [loading, setLoading] = useState(true);\n const [fetchMethod, setFetchMethod] = useState(FETCH_METHOD.Select);\n const [recentPosts, setRecentPosts] = useState([]);\n const [post, setPost] = useState();\n const [searchUrl, setSearchUrl] = useState('');\n const [postCommentData, setPostCommentData] = useState([]);\n const [impressionData, setImpressionData] = useState();\n const pid = token?.pid;\n const accessToken = token?.value;\n\n // on initial page load, load the most recent 100 captions for quick select\n useEffect(() => {\n try {\n setLoading(() => true);\n Facebook.getIgFields(\n accessToken,\n `/${pid}/media`,\n 'caption,timestamp,id',\n 100,\n false\n ).then((res) => {\n log('setRecentPosts', res);\n setRecentPosts(res);\n });\n } catch (e) {\n error(e);\n } finally {\n setLoading(() => false);\n }\n }, [pid, accessToken]);\n\n // Load the comments for a post when selected.\n useEffect(() => {\n if (!post?.id) return;\n const POST_COMMENT_FIELDS = 'text,username,timestamp,id';\n\n function getPostImpressions() {\n let fields;\n switch (post?.media_type) {\n case 'CAROUSEL_ALBUM':\n fields = {\n metric:\n 'carousel_album_engagement,carousel_album_impressions,carousel_album_reach,carousel_album_saved,carousel_album_video_views',\n };\n break;\n case 'IMAGE':\n fields = { metric: 'engagement,impressions,reach,saved' };\n break;\n case 'VIDEO':\n fields = {\n metric: 'engagement,impressions,reach,saved,video_views',\n };\n break;\n default:\n return;\n }\n\n return Facebook.getIgFields(\n accessToken,\n `/${post?.id}/insights`,\n fields\n ).then((res) => {\n let transformed = res.reduce(\n (\n acc,\n { description: tooltip, name, period, title: label, values }\n ) => {\n const [data] = values;\n\n return {\n ...acc,\n [name]: {\n period,\n label,\n tooltip,\n data: [\n {\n ...data,\n display: period,\n },\n ],\n },\n };\n },\n {}\n );\n\n setImpressionData(transformed);\n });\n }\n\n try {\n setLoading(() => true);\n Facebook.getIgFields(\n accessToken,\n `/${post?.id}/comments`,\n POST_COMMENT_FIELDS,\n 100,\n true\n ).then((res) => {\n log('getComments data', res);\n setPostCommentData(res);\n return getPostImpressions();\n });\n } catch (e) {\n error(e);\n } finally {\n setLoading(() => false);\n }\n }, [post, accessToken, setPostCommentData]);\n\n function getPostSelectionDOM(method) {\n switch (method) {\n case FETCH_METHOD.Select:\n return (\n \n \n );\n case FETCH_METHOD.URL:\n return (\n \n {\n setSearchUrl(() => e.target.value);\n }}\n />\n {\n if (!searchUrl) return;\n const needle = IG.getInstaShortCode(searchUrl);\n debug('search onClick getInstaShortCode', needle);\n debug('search onClick mediaData', mediaData);\n\n let final = mediaData.find((m) =>\n ['shortcode', 'id', 'ig_id'].some(\n (prop) => m && prop && needle && m[prop] === needle\n )\n );\n log('search post', { ...post, ...final });\n if (!final) {\n return error(\n `Can't find postUrl for ${searchUrl} (${needle})`\n );\n }\n\n setPost(() => ({ ...post, ...final }));\n }}\n />\n \n );\n default:\n return <>>;\n }\n }\n\n function getPostImpressionDOM() {\n if (!impressionData) return;\n\n let fields = Object.keys(impressionData);\n let count = Math.ceil(fields.length / 3);\n let data = [];\n for (let i = 0; i < count; i++) {\n let keys = fields.splice(0, 3);\n data.push(keys.map((k) => impressionData[k]));\n }\n log('getPostImpressionDOM data', data);\n\n return (\n \n {data.map((row, i) => (\n \n {row.map((item, j) => (\n \n ))}\n \n ))}\n \n );\n }\n\n return loading ? (\n \n ) : (\n \n \n \n \n \n \n \n \n \n \n dayjs(p.timestamp).isBefore(\n dayjs(post?.timestamp ?? 0).add(1, 'day')\n )\n ).length,\n ]}\n />\n \n dayjs(p.timestamp).isBefore(\n dayjs(post?.timestamp ?? 0).add(1, 'week')\n )\n ).length,\n ]}\n />\n \n \n {getPostImpressionDOM()}\n \n );\n}\n\nexport default PostComments;\n","import React, { useEffect, useState } from 'react';\nimport { Box, Select } from 'grommet';\nimport StaticMetric from '../StaticMetric';\nimport Facebook from '../../Facebook';\nimport { error, log, IG, debug } from '../../Util';\nimport Spinner from '../Spinner';\n\nconst { getPostObjLabel } = IG;\n\nfunction PostTags({ token }) {\n const [loading, setLoading] = useState(true);\n const [tags, setTags] = useState([]);\n const [selectedTag, setSelectedTag] = useState();\n const [tagUserFollowers, setTagUserFollowers] = useState(0);\n const [errorMessage, setErrorMessage] = useState('');\n\n // pull initial tags, dont watch tags because they change here.\n const TAGS_FIELDS = 'caption,username,id,like_count,comments_count,timestamp';\n useEffect(() => {\n const getTags = async () => {\n try {\n if (!token || !token?.pid) return;\n let res = await Facebook.getIgFields(\n token?.value,\n `/${token?.pid}/tags`,\n TAGS_FIELDS,\n 50,\n false,\n [],\n {},\n (data) => data.filter((i) => i.caption.includes(token.display))\n );\n debug('tags', res);\n setTags(() => res);\n setLoading(() => false);\n } catch (e) {\n error(e);\n setLoading(() => false);\n }\n };\n\n getTags();\n }, [token, token?.pid, token?.value]);\n\n // on selected tag change, pull deep post info\n useEffect(() => {\n const queryTag = async () => {\n setLoading(() => true);\n if (!selectedTag || !selectedTag?.id) return;\n let [data] = await Facebook.getIgFields(\n token?.value,\n `/${token?.pid}`,\n `mentioned_media.media_id(${selectedTag?.id}){comments{text,username,timestamp},comments_count,like_count}`\n );\n\n setLoading(() => false);\n debug('MENIONTED', selectedTag, data);\n };\n\n queryTag();\n }, [selectedTag, token?.pid, token?.value]);\n\n const getTotalFollowersForUser = async (username) => {\n try {\n let [data] = await Facebook.getIgFields(\n token?.value,\n `/${token?.pid}`,\n `business_discovery.username(${username}){followers_count}`\n );\n let { business_discovery } = data;\n let { followers_count } = business_discovery;\n setTagUserFollowers(followers_count);\n log('getTotalFollowersForUser', data, followers_count);\n } catch (e) {\n error(e);\n setTagUserFollowers(0);\n setErrorMessage(\n 'The selected post was not created by a business account. Analytics are not available.'\n );\n }\n };\n\n return loading ? (\n \n ) : (\n \n \n {errorMessage ?? ''}\n \n \n \n \n \n \n \n );\n}\n\nexport default PostTags;\n","import { Box, Avatar, Text, Tabs, Tab } from 'grommet';\nimport { useEffect, useState } from 'react';\nimport Facebook from '../Facebook';\nimport Orb from '../component/Orb';\nimport { debug, log } from '../Util';\nimport Overview from '../component/instagram/Overview';\nimport PostComments from '../component/instagram/PostComments';\nimport PostTags from '../component/instagram/PostTags';\nimport React from 'react';\nimport dayjs from 'dayjs';\n\nconst INIT_FIELDS =\n 'name,biography,followers_count,follows_count,ig_id,media_count,profile_picture_url,website';\n\nconst MEDIA_FIELDS =\n 'comments_count,like_count,shortcode,id,timestamp,media_type';\n\nconst INSIGHT_FIELDS =\n 'impressions,reach,profile_views,follower_count,website_clicks';\n\nconst ACTIVE_FIELDS = 'online_followers';\n\nfunction Instagram({ tokens, pid, user, logout }) {\n debug(pid, user);\n const [img, setImg] = useState();\n const [totalFollowers, setTotalFollowers] = useState();\n const [totalFollowing, setTotalFollowing] = useState();\n const [totalMedia, setTotalMedia] = useState();\n const [mediaData, setMediaData] = useState();\n const [insightOverview, setInsightOverview] = useState();\n const [activeOverview, setActiveOverview] = useState();\n const token = tokens.find((t) => t.pid === pid);\n\n useEffect(() => {\n if (!token) return;\n\n const activityStart = dayjs().subtract(1, 'day').endOf('day');\n\n Promise.all([\n Facebook.getIgFields(token?.value, `/${token?.pid}`, INIT_FIELDS)\n .then((data) => {\n const [\n {\n followers_count,\n follows_count,\n // ig_id,\n media_count,\n // name,\n profile_picture_url,\n },\n ] = data;\n log('profile data', data);\n setImg(profile_picture_url);\n setTotalFollowers(followers_count);\n setTotalFollowing(follows_count);\n setTotalMedia(media_count);\n })\n .catch((e) => logout('Could not authenticate to Facebook.')),\n Facebook.getIgFields(\n token?.value,\n `/${token?.pid}/media`,\n MEDIA_FIELDS,\n 10000,\n true\n ).then((res) => {\n log('media', res);\n setMediaData(res);\n }),\n Facebook.getIgFields(\n token?.value,\n `/${token?.pid}/insights`,\n {\n metric: INSIGHT_FIELDS,\n period: 'day',\n since: dayjs().subtract(30, 'days').unix(),\n until: dayjs().unix(),\n },\n INSIGHT_FIELDS.split(',').length || 0\n ).then((res) => {\n log('insights', res);\n setInsightOverview(res);\n }),\n Facebook.getIgFields(\n token?.value,\n `/${token?.pid}/insights`,\n {\n metric: ACTIVE_FIELDS,\n period: 'lifetime',\n since: activityStart.subtract(7, 'days').unix(),\n until: activityStart.unix(),\n },\n ACTIVE_FIELDS.split(',').length || 0\n ).then((res) => {\n log('active', res);\n setActiveOverview(res);\n }),\n ]);\n }, []);\n\n const profile = () => (\n \n \n {token?.display}\n \n );\n\n return (\n \n \n {profile()}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default Instagram;\n","import React, { useState } from 'react';\nimport { Box, Button, Anchor, CheckBox } from 'grommet';\nimport { normalize, PATH } from '../../Util';\n\nexport function List({ campaigns = [], setCampaigns = (c) => {} }) {\n const [checked, setChecked] = useState(false);\n const visible = checked ? campaigns : campaigns.filter((c) => c.active);\n\n const row = (data, index) => {\n return (\n \n \n \n \n {\n console.log(`TODO: Disable campaign ${data.cid} (${data.title})`);\n setCampaigns(\n campaigns.map((c) => {\n if (c.cid === data.cid) {\n c.active = false;\n }\n\n return c;\n })\n );\n }}\n >\n Archive\n \n \n );\n };\n\n return (\n \n \n setChecked(event.target.checked)}\n />\n \n {visible.map(row)}\n \n \n \n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport { Box, Button, Card, CardBody, FormField, TextInput } from 'grommet';\nimport { normalize, PATH } from '../../Util';\nimport { useLocation } from 'wouter';\n\nexport function Add({ campaigns = [], setCampaigns = (c) => {} }) {\n const [title, setTitle] = useState('');\n const [, setLocation] = useLocation();\n\n return (\n \n \n \n \n \n setTitle(e.target.value)}\n />\n \n\n {\n const cid = 0;\n setCampaigns((c) =>\n c.concat({\n title,\n cid,\n active: true,\n })\n );\n setLocation(normalize(`${PATH.Campaign}/${cid}`));\n }}\n />\n \n \n \n \n );\n}\n","import React from 'react';\nimport { Box } from 'grommet';\n\nexport function Widget({ data, editMode }) {\n const style = editMode ? { background: 'light-4' } : {};\n return (\n \n key: {data.i}\n \n );\n}\n","import React, { useState } from 'react';\nimport {\n Box,\n Button,\n Anchor,\n CheckBox,\n RadioButtonGroup,\n Heading,\n} from 'grommet';\nimport { PATH } from '../../Util';\nimport GridLayout, { WidthProvider } from 'react-grid-layout';\nimport { Widget } from './editor/Widget';\nimport { v1 as uuid } from 'uuid';\n\nconst Grid = WidthProvider(GridLayout);\n\nconst STATES = { VIEW: 'View', EDIT: 'Edit' };\n\nexport function View({ campaigns = [], setCampaigns = (c) => {}, campaign }) {\n const [viewState, setViewState] = useState(STATES.VIEW);\n const [shareable, setShareable] = useState(campaign.public || false);\n const [layout, setLayout] = useState([]);\n\n const editMode = viewState === STATES.EDIT;\n return (\n \n \n \n \" />{' '}\n {campaign.title}\n \n \n \n \n setViewState(e.target.value)}\n direction=\"row\"\n />\n \n \n setShareable(e.target.checked)}\n />\n \n \n {editMode && (\n \n \n \n \n \n \n setLayout((old) =>\n old.concat({\n i: uuid(),\n x: 0,\n y: Infinity,\n w: 4,\n h: 1,\n })\n )\n }\n />\n \n \n )}\n \n setLayout(layout)}\n isDraggable={editMode}\n isResizable={editMode}\n >\n {layout.map((widget) => (\n \n \n
\n ))}\n \n \n \n );\n}\n","import React from 'react';\nimport { List } from '../component/campaign/List';\nimport { Add } from '../component/campaign/Add';\nimport { View } from '../component/campaign/View';\n\nexport default function Campaing({ tokens, cid, campaigns, setCampaigns }) {\n switch (cid.toString().toLowerCase()) {\n case 'list':\n return (\n
\n );\n case 'add':\n return (\n \n );\n default:\n const campaign = campaigns.find((c) => c.cid === cid);\n return (\n \n );\n }\n}\n","import React, { useState } from 'react';\nimport {\n Card,\n CardBody,\n CardFooter,\n Box,\n Button,\n CardHeader,\n Stack,\n Layer,\n Heading,\n Paragraph,\n Anchor,\n TextInput,\n Text,\n Tabs,\n Tab,\n} from 'grommet';\nimport { useAPI } from '../component/Firebase';\nimport { error } from '../Util';\n\nexport default function Admin() {\n const API = useAPI();\n\n const card = (content) => {\n return (\n \n {content}\n \n );\n };\n\n const BetaTab = () => {\n const [note, setNote] = useState('');\n const [key, setKey] = useState('');\n\n return (\n \n \n {card(\n \n setNote(e.target.value)}\n />\n {\n try {\n const { data } = await API.generateCode({ note });\n const { key: _key } = data;\n setKey(_key);\n setNote('');\n } catch (e) {\n error(e);\n }\n }}\n />\n {key && }\n \n )}\n \n \n );\n };\n\n return {BetaTab()};\n}\n","import React, { useState } from 'react';\nimport { Box, Button, CheckBox, Heading, Layer, TextArea } from 'grommet';\nimport { debug } from '../Util';\nimport { useAPI } from './Firebase';\n\nfunction Feedback({ FeedbackContext }) {\n const API = useAPI();\n const [text, setText] = useState('');\n const [checked, setChecked] = useState(false);\n\n return (\n \n {({ showFeedback, setShowFeedback }) => {\n if (!showFeedback) return ;\n\n const close = () => {\n setText('');\n setChecked(false);\n setShowFeedback(false);\n };\n\n return (\n \n \n Feedback\n \n \n \n \n setChecked(event.target.checked)}\n />\n \n \n \n {\n setShowFeedback(false);\n debug('form', { text, checked });\n debug(await API.createFeedback({ text, checked }));\n }}\n primary\n />\n \n \n \n );\n }}\n \n );\n}\n\nexport default Feedback;\n","import React, { useState } from 'react';\nimport { Box, Button, Text, TextInput } from 'grommet';\nimport { useAPI } from '../component/Firebase';\nimport { error } from '../Util';\n\nfunction BetaRequest({ user, updateUser }) {\n const [beta, setBeta] = useState(user.beta);\n const [code, setCode] = useState('');\n const API = useAPI();\n\n function PendingRequest() {\n return (\n \n \n Thanks for you interest in measure.social, your beta access is\n pending!\n \n \n Already have a code?\n setCode(e.target.value)} />\n {\n try {\n const { data } = await API.redeemCode({ code });\n updateUser(data.beta);\n } catch (e) {\n error(e);\n }\n }}\n label=\"Submit\"\n />\n \n \n );\n }\n\n function NewRequest() {\n return (\n \n Thank you for your interest in measure.social!\n {\n try {\n const { data } = await API.requestAccess();\n setBeta(data.beta);\n } catch (e) {\n error(e);\n }\n }}\n label=\"Request beta access now!\"\n />\n \n );\n }\n\n if (beta === 'request') return PendingRequest();\n return NewRequest();\n}\n\nexport default BetaRequest;\n","import React, { useState, useEffect, createContext } from 'react';\nimport theme from './Theme';\nimport { Box, Grommet, Main } from 'grommet';\nimport Header from './component/Header';\nimport Footer from './component/Footer';\nimport { PATH, error, log, normalize, getUserDoc } from './Util';\nimport { Link, Route, Switch, useLocation } from 'wouter';\n\nimport Login from './page/Login';\nimport Home from './page/Home';\nimport Add from './page/Add';\nimport Instagram from './page/Instagram';\nimport Campaign from './page/Campaign';\nimport Admin from './page/Admin';\nimport { clear, set } from './Storage';\nimport Spinner from './component/Spinner';\nimport Feedback from './component/Feedback';\nimport { useAPI, useFeatureFlags, useFirebase } from './component/Firebase';\nimport BetaRequest from './component/BetaRequest';\n\nfunction App() {\n const firebase = useFirebase();\n const API = useAPI();\n const flags = useFeatureFlags();\n const [loading, setLoading] = useState(true);\n const [user, setUser] = useState(null);\n const [tokens, setTokens] = useState([]);\n const [location, setLocation] = useLocation();\n const [displayError, setDisplayError] = useState();\n const userDoc = getUserDoc();\n const [showFeedback, setShowFeedback] = useState(false);\n const FeedbackContext = createContext({ showFeedback, setShowFeedback });\n const [campaigns, setCampaigns] = useState([\n { title: 'test campaign 1', cid: '1234567', active: true },\n { title: 'test campaign 2', cid: '2334566', active: false },\n { title: 'test campaign 3', cid: '3434466', active: true },\n { title: 'test campaign 4', cid: '3444466', active: true },\n { title: 'test campaign 5', cid: '3444266', active: false },\n { title: 'test campaign 6', cid: '3441466', active: true },\n ]);\n\n useEffect(() => {\n if (!user?.tokens) return;\n setTokens(Object.values(user?.tokens || {}));\n }, [user, setTokens]);\n\n // On page load, set auth listener to track auth state\n useEffect(() => {\n async function createUser() {\n const doc = await API.createUser();\n log('doc', doc);\n if (!doc) return;\n\n set('userDoc', JSON.stringify(doc));\n return doc;\n }\n\n const unsubscribe = firebase.auth().onAuthStateChanged(\n async (userState) => {\n log('onAuthStateChanged', userState, userDoc);\n if (!userState || userState === null) {\n clear();\n setUser(null);\n setLocation(PATH.Login);\n setLoading(false);\n return;\n }\n\n // first time auth check\n if (\n userState.metadata.creationTime ===\n userState.metadata.lastSignInTime &&\n !userDoc\n ) {\n setUser(await createUser());\n } else {\n // not first time auth, but no user record exists\n const doc = (await API.getUser()).data();\n log('user', doc, firebase.auth().currentUser);\n if (!doc) {\n setUser(await createUser());\n } else {\n // User is authenticated, set props.\n setUser(doc);\n }\n }\n\n setLoading(false);\n },\n (err) => {\n log('auth err', err);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n }, []);\n\n // Redirect auth users from login to auth\n useEffect(() => {\n if (!user) return;\n\n // Redirect logged in users to the homepage.\n if (location === PATH.Login) {\n setLocation(PATH.Home);\n }\n }, [location, setLocation, user]);\n\n const RequestBetaOverlay = () => {\n return (\n \n {\n setUser((oldUser) => ({ ...oldUser, beta: betaUpdate }));\n }}\n />\n \n );\n };\n\n const body = () => {\n if (loading) return ;\n if (user && !user.admin && (!user.beta || user.beta === 'request')) {\n return RequestBetaOverlay();\n }\n\n const getCampaigns = () => {\n if (!flags.enable_campaigns) return <>>;\n\n return (\n \n {({ cid }) => (\n \n )}\n \n );\n };\n\n return (\n \n {displayError && (\n \n {displayError}\n \n )}\n \n Settings Page!\n \n \n \n \n \n \n \n {({ pid }) => (\n {\n try {\n setDisplayError(e);\n return setLocation(PATH.Login);\n } catch (e) {\n error('instagram logout error', e);\n }\n }}\n />\n )}\n \n \n \n \n \n \n \n {getCampaigns()}\n \n Page not found! Go back to Home\n \n \n \n );\n };\n\n const getAnnouncement = () => {\n if (!flags.announcement) return <>>;\n return (\n \n {flags.announcement}\n \n );\n };\n\n return (\n \n \n {\n setUser();\n }}\n />\n {getAnnouncement()}\n \n {body()}\n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","const reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport '../node_modules/react-grid-layout/css/styles.css';\nimport '../node_modules/react-resizable/css/styles.css';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { FirebaseProvider } from './component/Firebase';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}