{"version":3,"file":"js/227-82b7afccaf836c6505c1.js","mappings":"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","sources":["webpack://app/./app/javascript/packs/app_container.jsx","webpack://app/./app/javascript/packs/connect_modal.jsx","webpack://app/./app/javascript/packs/logged_out_home.jsx","webpack://app/./app/javascript/packs/message.jsx","webpack://app/./app/javascript/packs/mount_fb.js","webpack://app/./app/javascript/packs/utilities.js","webpack://app/./app/javascript/packs/warning_banner.jsx"],"sourcesContent":["import React, { createRef } from 'react';\nimport Bugsnag from '@bugsnag/js';\nimport BugsnagPluginReact from '@bugsnag/plugin-react';\nimport LoggedOutHome from './logged_out_home';\nimport Dashboard from './dashboard';\nimport ConnectModal from './connect_modal';\nimport queryString from 'query-string';\nimport axios from 'axios';\nimport SlidingPane from 'react-sliding-pane';\nimport Message from './message';\nimport WarningBanner from './warning_banner';\nimport mountFb, { defaultScopes as defaultFacebookScopes, getFbLoginForBusinessPageUri } from './mount_fb';\nimport { metaTag, shimBugsnag } from './utilities'\n\nif (metaTag(\"rails_env\") === 'production') {\n Bugsnag.start({\n apiKey: '18cad3113419807c5761606144cf0dc8',\n plugins: [new BugsnagPluginReact()],\n });\n} else {\n shimBugsnag(Bugsnag);\n}\n\nlet lastStatusResponseJSON = null;\nlet isConnecting = false;\nlet hashChangeHandler;\n\nconst extractHash = () => {\n let hashSource = (window.location.hash || '').replace(/^#/, '');\n\n return queryString.parse(hashSource);\n};\n\nconst adjustedHash = (sourceData, replace = false) => {\n if (replace) {\n return queryString.stringify(sourceData);\n }\n\n return queryString.stringify({\n ...extractHash(),\n ...sourceData,\n });\n}\n\nexport default class AppContainer extends React.Component {\n constructor(props) {\n super(props);\n\n let page = document.querySelector('#js-app').dataset.page ?? 'root';\n let igConnectAction = document.querySelector('#js-app').dataset.igConnect == 'true';\n let showModalInvite = false;\n let startingStage = 2;\n let showHome = true;\n let description = '';\n let location = queryString.parse(window.location.search);\n let hash = extractHash();\n let providedUsername;\n let brand = null;\n let brandName = null;\n let brandImageUrl = null;\n let heroImagePath = '/images/sample/analyze.svg';\n let title = null;\n let data = null;\n let username = null;\n let usernameInput = null;\n let conversations = { index: [], data: {} };\n let initialFbPageCheckbox = false;\n let requestMessagePermissions = true;\n let useFbLoginForBusinessPage = true;\n let initialState = {};\n let sessionId = localStorage.getItem('mcSession') ?? null;\n let msSessionToken = hash.st ?? localStorage.getItem('msSessionToken') ?? null;\n const hasAccessDeniedError = location['error'] === 'access_denied'; // user backed out of facebook flow\n\n Bugsnag.leaveBreadcrumb('App loaded', { hash: hash });\n\n // Clear data when landing at root or brand page (and not connecting)\n if ((page === 'root' || page === 'brand') && !igConnectAction) {\n this.clearIgConnectData();\n }\n\n let sourceMsManage = (hash.source == 'ms' || hash.source == 'ms:manage' || hash.source == 'ms:manage:no-messages') || localStorage.getItem('igConnect.sourceMsManage')?.toString() == 'true';\n let sourceMsManageMessages = localStorage.getItem('igConnect.sourceMsManageMessages')?.toString() == 'true';\n\n if (sessionId?.length > 0) {\n Bugsnag.leaveBreadcrumb('Existing session present', { sessionId: sessionId });\n }\n\n if (msSessionToken?.length > 0) {\n Bugsnag.leaveBreadcrumb('Existing MS session token present', { msSessionToken: msSessionToken });\n }\n\n if (page === 'root' && sessionId?.length > 0 && !igConnectAction) {\n const connectingNewState = this.showConnectingProfile(true);\n\n initialState = {\n ...connectingNewState,\n showHome: false,\n userAvatarUrl: '/images/sample/analyze.svg',\n heroImagePath: '/images/sample/analyze.svg',\n fbStatus: 'connected',\n username: null,\n alertRestartError: hasAccessDeniedError,\n errorCode: hasAccessDeniedError ? \"access_denied\" : null,\n };\n\n Bugsnag.leaveBreadcrumb('Retrieving session information');\n axios({\n method: 'get',\n url: `/session`,\n headers: {\n 'Accept': 'application/json',\n 'X-Session-ID': sessionId,\n }\n })\n .then(res => {\n Bugsnag.leaveBreadcrumb('Retrieved session information', { response: res.data }, 'request');\n if (res.data.session_id && res.data.user?.username) {\n this.setState({\n data: res.data.data,\n showModalInvite: false,\n showDashboard: true,\n username: res.data.user.username,\n sourceMsManageMessages: res.data.data.profile.managed_messages ?? false,\n });\n } else {\n localStorage.removeItem('mcSession');\n\n this.clearIgConnectData();\n\n this.setState({\n alertRestartError: true,\n title: 'Session Expired',\n description: 'Your session has expired. Please try again.',\n heroImagePath: '/images/sample/green-ig.png'\n });\n }\n })\n .catch(err => {\n Bugsnag.leaveBreadcrumb('Session retrieval error', { response: err.response }, 'request');\n\n localStorage.removeItem('mcSession');\n\n this.clearIgConnectData();\n\n this.setState({\n alertRestartError: true,\n title: \"There's an issue\",\n description: 'There was an error loading your account. Please try again.',\n heroImagePath: '/images/sample/red-ig.png'\n });\n });\n }\n\n providedUsername = document.querySelector('#js-app').dataset.providedUsername || hash.username || null;\n brand = document.querySelector('#js-app').dataset.brandSlug || localStorage.getItem('igConnect.brand') || null;\n brandName = document.querySelector('#js-app').dataset.brandName || localStorage.getItem('igConnect.brandName') || null;\n brandImageUrl = document.querySelector('#js-app').dataset.brandImageUrl || localStorage.getItem('igConnect.brandImageUrl') || null;\n\n if (page === 'brand') {\n showModalInvite = true;\n startingStage = 1;\n showHome = false;\n requestMessagePermissions = sourceMsManage; // only request message permissions for a brand if it's a managed account\n\n if (providedUsername) {\n localStorage.setItem('igConnect.providedUsername', providedUsername);\n }\n\n if (brand) {\n localStorage.setItem('igConnect.brand', brand);\n localStorage.setItem('igConnect.brandName', brandName);\n localStorage.setItem('igConnect.brandImageUrl', brandImageUrl);\n }\n\n localStorage.setItem('igConnect.requestMessagePermissions', sourceMsManage);\n localStorage.setItem('igConnect.sourceMsManage', sourceMsManage);\n localStorage.setItem('igConnect.sourceMsManageMessages', sourceMsManageMessages);\n\n if (msSessionToken) {\n localStorage.setItem('igConnect.msSessionToken', msSessionToken);\n }\n\n Bugsnag.leaveBreadcrumb('Loading brand page', { providedUsername: providedUsername, brand: brand, brandName: brandName, brandImageUrl: brandImageUrl, requestMessagePermissions: requestMessagePermissions, sourceMsManage: sourceMsManage, sourceMsManageMessages: sourceMsManageMessages });\n }\n\n if (igConnectAction) {\n Bugsnag.leaveBreadcrumb('On page for IG Connect action');\n\n // Strip out the hash from the URL\n window.location.hash = adjustedHash({ connecting: 'true' });\n\n providedUsername = providedUsername || localStorage.getItem('igConnect.providedUsername');\n brand = brand || localStorage.getItem('igConnect.brand');\n brandName = brandName || localStorage.getItem('igConnect.brandName');\n brandImageUrl = brandImageUrl || localStorage.getItem('igConnect.brandImageUrl');\n requestMessagePermissions = requestMessagePermissions || localStorage.getItem('igConnect.requestMessagePermissions')?.toString() == 'true';\n sourceMsManage = sourceMsManage || localStorage.getItem('igConnect.sourceMsManage')?.toString() == 'true';\n sourceMsManageMessages = sourceMsManageMessages || localStorage.getItem('igConnect.sourceMsManageMessages')?.toString() == 'true';\n msSessionToken = msSessionToken || localStorage.getItem('igConnect.msSessionToken');\n\n useFbLoginForBusinessPage = true;\n page = brand ? 'brand' : page;\n\n // The docs say that we get all four of these params back from FB, but we may not -- the most important one is the `access_token`\n // so we'll consider it a success if that is present. If we want/need the others, we can remove this line and uncomment the one\n // below it to do so, but I don't expect we will need it.\n const igConnectSuccess = (hash.access_token?.length > 0 || hash.long_lived_token?.length > 0);\n // const igConnectSuccess = (hash.access_token?.length > 0 && hash.data_access_expiration_time && hash.expires_in && hash.long_lived_token);\n\n showModalInvite = true;\n startingStage = 1;\n showHome = false;\n\n if (igConnectSuccess) {\n Bugsnag.leaveBreadcrumb('Connection data present on page load');\n\n setTimeout(() => {\n const connectionData = {\n brand: brand,\n fbUserId: null,\n primaryInstagramId: null,\n primaryInstagramUsername: null,\n accessToken: hash.access_token,\n longAccessToken: hash.long_lived_token,\n providedUsername: providedUsername,\n msSessionToken: msSessionToken,\n };\n\n this.handleConnectionFrom(connectionData);\n }, 250);\n } else {\n Bugsnag.leaveBreadcrumb('Connection data not present on page load');\n\n // FB redirects back here with query params including the following params:\n // error_reason=user_denied\n // error=access_denied\n // error_description=Permissions+error.\n //\n // These appear to be static, so we may not need to bother with the particular values.\n const igFailureDetails = (new URL(document.location)).searchParams;\n\n if (igFailureDetails?.get('error') == 'access_denied') {\n Bugsnag.leaveBreadcrumb('Explicit error from FB in query params', {}, 'error');\n\n // There was definitely a failure / cancellation, show them the error as such\n initialState = {\n alertRestartError: false,\n title: 'Connection cancelled',\n description: \"It looks like you've cancelled the connection process. Please try again.\",\n heroImagePath: '/images/sample/red-ig.png'\n };\n\n window.location.hash = adjustedHash({ connection_cancelled: 'true' });\n } else {\n Bugsnag.leaveBreadcrumb('No connection data present on page load');\n\n // There was no access token present, so we'll assume that the user is starting the connection process\n // and we'll wait to see if the hash changes and retrigger it based on that change (this shouldn't ever\n // happen in practice due to how FB redirects, but it's a safety net)\n const connectingNewState = this.showConnectingProfile(true);\n\n initialState = {\n ...connectingNewState,\n showHome: false,\n userAvatarUrl: '/images/sample/analyze.svg',\n heroImagePath: '/images/sample/analyze.svg',\n username: null,\n alertRestartError: false,\n };\n }\n }\n }\n\n if (brand) {\n let invitePhrase = brandName + ' invites you to join their brand ambassador program';\n\n if (brand == 'trendhim') {\n invitePhrase = \"Help us Help YOU 😊 If you give us permission to access your posts and stories' stats, we can analyse and help you improve. It's a win–win!\";\n } else if (sourceMsManage && (!hash.ambassador || hash.ambassador == 'false')) {\n if (sourceMsManageMessages) {\n invitePhrase = brandName + ' invites you to connect your Instagram account to help manage DMs and mentions.';\n } else {\n invitePhrase = brandName + ' invites you to connect your Instagram account to help manage mentions.';\n }\n }\n\n description = invitePhrase;\n heroImagePath = brandImageUrl;\n }\n\n if (hash.username) {\n username = hash.username;\n usernameInput = username;\n } else if (location.invite) {\n username = location.invite;\n usernameInput = username;\n }\n\n if (hash.confirmed == 'true') {\n initialFbPageCheckbox = true;\n }\n\n if (hash.useLegacyLogin?.length) {\n useFbLoginForBusinessPage = false;\n }\n\n initialState.alertRestartError = hasAccessDeniedError;\n initialState.errorCode = hasAccessDeniedError ? \"access_denied\" : null;\n\n this.state = {\n page: page,\n data: data,\n showHome: showHome,\n showModalInvite: showModalInvite,\n showDashboard: false,\n fbStatus: 'not_connected',\n signupType: 'default',\n stage: startingStage,\n loggedIn: false,\n fbPageCheckbox: initialFbPageCheckbox,\n brand: brand,\n brandName: brandName,\n brandImageUrl: brandImageUrl,\n username: username,\n usernameInput: usernameInput,\n mediaFilter: 'posts',\n title: title,\n primaryInstagramId: null,\n isBusinessAccount: false,\n businessAccountChecked: false,\n userAvatarUrl: '/images/sample/analyze.svg', // TODO replace with default avatar\n description: description,\n heroImagePath: heroImagePath,\n conversations: conversations,\n conversationId: null,\n conversationContainerRef: createRef(),\n conversationMessageText: '',\n conversationMessageRef: createRef(),\n isPaneOpen: false,\n isSendingMessage: false,\n isLoadingConversation: false,\n isLoadingConversations: false,\n conversationLoadCount: {},\n conversationsLoadCount: 0,\n panelData: null,\n skipReload: false,\n sourceMsManage: sourceMsManage,\n sourceMsManageMessages: sourceMsManageMessages,\n requestMessagePermissions: requestMessagePermissions,\n useFbLoginForBusinessPage: useFbLoginForBusinessPage,\n igConnectAction: igConnectAction,\n sessionId: sessionId,\n msSessionToken: msSessionToken,\n successCode: null,\n isPersistingPreferences: false,\n ...initialState,\n };\n }\n\n componentDidMount() {\n if (metaTag(\"rails_env\") === 'development' || metaTag(\"rails_env\") === 'test') {\n const response = { status: 'connected' };\n this.initialLoginStatus(response);\n } else {\n this.loadFb();\n }\n\n hashChangeHandler = this.handleHashChange.bind(this);\n window.addEventListener('hashchange', hashChangeHandler, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener('hashchange', hashChangeHandler, false);\n }\n\n handleHashChange() {\n const hash = extractHash();\n\n if (hash.connection_cancelled == 'true') {\n return;\n }\n\n if (hash.access_token?.length > 0 || hash.long_lived_token?.length > 0) {\n const providedUsername = document.querySelector('#js-app').dataset.providedUsername ?? hash.username ?? localStorage.getItem('igConnect.providedUsername') ?? null;\n\n const connectionData = {\n fbUserId: null,\n primaryInstagramId: null,\n primaryInstagramUsername: null,\n accessToken: hash.access_token,\n longAccessToken: hash.long_lived_token,\n providedUsername: providedUsername,\n msSessionToken: this.state.msSessionToken ?? hash.st ?? localStorage.getItem('igConnect.msSessionToken') ?? null,\n };\n\n this.handleConnectionFrom(connectionData);\n }\n }\n\n loadFb() {\n mountFb({\n scopes: this.buildLoginScopes.bind(this),\n onInitialStatus: this.initialLoginStatus.bind(this), // Immediately check if user is logged in and has connected with our app before\n onStatusChange: this.statusChangeCallback.bind(this), // Show \"logging in\" status and message that they may need to allow popups\n onLoginResponse: this.loggingIntoFacebook.bind(this),\n onLogoutResponse: this.loggedOutOfFacebook.bind(this),\n });\n }\n\n showLoggingOut() {\n this.setState({ description: \"Logging you out...\" });\n }\n\n buildLoginScopes() {\n const loginScopes = [\n ...defaultFacebookScopes\n ];\n\n // Ambassador / unmanaged brand; do not ask for instagram_manage_messages\n if (!this.state.requestMessagePermissions) {\n const messagesScopeIndex = loginScopes.indexOf('instagram_manage_messages');\n\n if (messagesScopeIndex >= 0) {\n loginScopes.splice(messagesScopeIndex, 1);\n }\n }\n\n return loginScopes;\n }\n\n initialLoginStatus(response) {\n this.setState({ fbStatus: response.status, fbResponse: response });\n\n if (this.state.page === 'root') {\n console.log('Loading FB immediately...', response);\n this.statusChangeCallback(response);\n }\n }\n\n checkLoginStatus() {\n window.checkLoginState();\n }\n\n loginWithFacebook() {\n if (metaTag(\"rails_env\") === 'development' || metaTag(\"rails_env\") === 'test') {\n const response = { status: 'connected', authResponse: 'true' };\n this.loggingIntoFacebook(response);\n } else {\n window.fbLogin();\n }\n }\n\n loggingIntoFacebook(response) {\n if (response.authResponse) {\n this.showConnectingProfile();\n this.statusChangeCallback(response);\n } else {\n // user cancelled/closed fb login modal do nothing\n }\n }\n\n loggedOutOfFacebook(_response) {\n if (this.state.skipReload) {\n return false;\n }\n\n window.location.reload();\n\n return false;\n }\n\n statusChangeCallback(response) {\n const responseJSON = JSON.stringify(response);\n const sameAsLastResponse = (responseJSON == lastStatusResponseJSON);\n\n lastStatusResponseJSON = responseJSON;\n\n if (response.status === \"connected\" && sameAsLastResponse) {\n const connectionData = {\n fbUserId: response.authResponse.userID,\n primaryInstagramId: this.state.primaryInstagramId,\n primaryInstagramUsername: this.state.username,\n accessToken: response.authResponse.accessToken,\n longAccessToken: null,\n msSessionToken: this.state.msSessionToken ?? localStorage.getItem('igConnect.msSessionToken') ?? null,\n };\n\n this.handleConnectionFrom(connectionData);\n }\n }\n\n handleConnectionFrom(connectionData) {\n if (isConnecting) {\n return;\n }\n\n Bugsnag.leaveBreadcrumb('Attempting connection to Instagram (via backend)', { connectionData: connectionData });\n\n isConnecting = true;\n\n this.setState({\n showHome: false,\n fbStatus: 'connected',\n alertRestartError: false,\n successCode: null,\n });\n\n this.showConnectingProfile();\n\n let data;\n\n data = {\n 'fb_user_id': connectionData.fbUserID,\n 'primary_instagram_id': connectionData.primaryInstagramId,\n 'primary_instagram_username': connectionData.primaryInstagramUsername,\n 'access_token': connectionData.accessToken,\n 'long_access_token': connectionData.longAccessToken,\n 'provided_username': connectionData.providedUsername ?? connectionData.primaryInstagramUsername,\n 'ms_session_token': connectionData.msSessionToken,\n };\n\n const brand = connectionData.brand ?? this.state.brand;\n\n let url = \"/users\";\n let payload = { user: data };\n\n if (brand) {\n data.brand = brand;\n payload = { ambassador: data, options: {} };\n\n if (this.state.sourceMsManage) {\n payload.options.managed = true;\n }\n\n url = '/ambassadors';\n }\n\n axios.defaults.headers.common['X-CSRF-Token'] = metaTag('csrf-token');\n\n axios({\n method: 'post',\n url,\n headers: { 'Accept': 'application/json' },\n data: payload\n })\n .then(res => {\n localStorage.setItem('mcSession', res.data.session_id);\n\n if (this.state.page === 'brand') {\n Bugsnag.leaveBreadcrumb('Connection complete (to brand)', { response: res.data }, 'request');\n\n this.setState({\n data: res.data,\n showDashboard: false,\n sessionId: res.data.session_id,\n successCode: res.data.success_code,\n username: res.data.profile?.instagram_username || this.state.username,\n sourceMsManageMessages: res.data.profile?.managed_messages,\n });\n\n this.finalizeAmbassador();\n } else {\n Bugsnag.leaveBreadcrumb('Connection completed (unaffiliated)', { response: res.data }, 'request');\n\n this.setState({\n data: res.data,\n showModalInvite: false,\n showDashboard: true,\n sessionId: res.data.session_id,\n successCode: res.data.success_code,\n username: res.data.profile?.instagram_username || this.state.username,\n });\n }\n })\n .catch(err => {\n Bugsnag.leaveBreadcrumb('Error connecting to Instagram (via backend)', { response: err.response }, 'request');\n\n const errorMsg = err.response.data.message ? err.response.data.message : 'If this error persists, email joe@mightycheck.com for support.'\n this.setState({\n alertRestartError: true,\n errorCode: err.response.data.error_msg_code,\n title: \"There's an issue\",\n description: errorMsg,\n heroImagePath: '/images/sample/red-ig.png',\n skipReload: true,\n successCode: null,\n });\n\n setTimeout(() => {\n this.handleFbLogout();\n }, 50);\n })\n .finally(() => {\n isConnecting = false;\n });\n }\n\n finalizeAmbassador() {\n const brandName = this.state.brandName;\n const successPhrase = this.state.sourceMsManage ? `Your profile can now be managed by ${brandName}.` : `You've successfully joined ${brandName}'s ambassador program.`;\n const extraPhrase = this.state.signupType === 'default' ? 'MightyCheck also created a profile that helps you better understand your engagement stats, audience, and media analytics. Feel free to check it out!' : '';\n\n this.setState({\n stage: 5,\n title: \"You're in!\",\n description: `${successPhrase} ${extraPhrase}`,\n heroImagePath: '/images/sample/success-heart.png'\n });\n\n window.location.hash = '';\n\n this.clearIgConnectData();\n }\n\n clearIgConnectData() {\n localStorage.removeItem('igConnect.providedUsername');\n localStorage.removeItem('igConnect.brand');\n localStorage.removeItem('igConnect.brandName');\n localStorage.removeItem('igConnect.brandImageUrl');\n localStorage.removeItem('igConnect.requestMessagePermissions');\n localStorage.removeItem('igConnect.sourceMsManage');\n localStorage.removeItem('igConnect.sourceMsManageMessages');\n }\n\n checkIfBusinessAccount(username) {\n const cleanedUsername = username.replace(\"@\", \"\").replace(\"/\", \"\").trim();\n return axios({\n method: 'get',\n url: `/connect/${cleanedUsername}/business_status`,\n headers: { 'Accept': 'application/json' }\n })\n .then(res => {\n return { status: res.status, statusText: res.statusText, is_business_account: res.data.is_business_account, profile: res.data.profile }\n });\n }\n\n showConnectingProfile(initialConstructorState = false) {\n Bugsnag.leaveBreadcrumb('Connecting state shown', {}, 'state');\n\n const newState = {\n stage: 2,\n title: \"Connecting\",\n description: \"Please wait a moment while we build your profile.\",\n heroImagePath: (!initialConstructorState ? this.state.userAvatarUrl : null),\n showModalInvite: true\n };\n\n if (initialConstructorState) {\n return newState;\n } else {\n this.setState(newState);\n }\n }\n\n handleUsernameInputChange = (e) => {\n let username = e.target.value.replace(\"@\", \"\");\n this.setState({ usernameInput: username });\n }\n\n handleGetStarted = (e) => {\n if (this.state.useFbLoginForBusinessPage) {\n this.setState({\n showHome: false,\n showModalInvite: true,\n stage: 4,\n isBusinessAccount: true,\n businessAccountChecked: true,\n });\n\n this.showFacebookLogin(true, 0);\n\n e.preventDefault();\n } else {\n let username = this.state.usernameInput;\n\n this.setState(\n {\n username: username,\n showHome: false,\n showModalInvite: true,\n stage: 2,\n title: \"Analyzing account\",\n description: \"\",\n }\n );\n\n this.loginOrCreateUser(username);\n\n e.preventDefault();\n }\n }\n\n handleManagedMessagesChoice = (event, allowManageMessages) => {\n this.setState({\n sourceMsManageMessages: allowManageMessages,\n isPersistingPreferences: true,\n });\n\n const payload = {\n manage_messages: allowManageMessages\n };\n\n axios({\n method: 'post',\n url: `/session/update-preferences`,\n headers: {\n 'Accept': 'application/json',\n 'X-Session-ID': this.state.sessionId,\n },\n data: payload,\n })\n .then(res => {\n this.setState({\n sourceMsManageMessages: res.data.managed_messages,\n isPersistingPreferences: false,\n });\n })\n .catch(_err => {\n this.setState({\n isPersistingPreferences: false,\n });\n });\n\n event.preventDefault();\n }\n\n loginOrCreateUser(username) {\n this.checkIfBusinessAccount(username)\n .then(response => {\n let businessHash;\n\n if (response.status === 200 || response.status === 202) {\n const isBusinessAccount = response.is_business_account;\n\n if (isBusinessAccount) {\n businessHash = this.buildBusinessHash(response.profile.business_discovery);\n\n this.setState({ primaryInstagramId: response.profile.business_discovery.id });\n } else {\n businessHash = this.buildNotBusinessHash();\n\n this.handleFbLogout();\n }\n\n this.setState({\n isBusinessAccount: isBusinessAccount,\n businessAccountChecked: true,\n title: businessHash.resultTitle,\n heroImagePath: businessHash.heroImagePath,\n description: businessHash.description,\n userAvatarUrl: businessHash.userAvatarUrl,\n stage: 3\n });\n\n this.showFacebookLogin(isBusinessAccount);\n } else {\n //TODO: Show error message and let them try again\n console.log(\"didn't get response ok\")\n }\n });\n // TODO: handle scenario where request fails\n }\n\n buildBusinessHash = (profile) => {\n return {\n userAvatarUrl: profile.profile_picture_url,\n resultTitle: \"Everything looks great!\",\n heroImagePath: \"/images/sample/success-check.png\",\n description: null\n };\n }\n\n buildNotBusinessHash = () => {\n return {\n resultTitle: \"You need to create a professional account\",\n heroImagePath: \"/images/sample/red-ig.png\",\n userAvatarUrl: \"/images/sample/analyze.svg\",\n description: null\n };\n }\n\n showFacebookLogin(isBusinessAccount, timeoutDuration = 1500) {\n let hash = extractHash();\n let resultTitle = null;\n let heroImagePath = null;\n let description = null;\n\n const { brand } = this.state;\n let phrase = brand ? this.state.brandName + \" track your campaign & audience metrics\" : \" us track your audience & account metrics\";\n\n if (hash.source == \"ms\" && !hash.ambassador || hash.ambassador == \"false\") {\n phrase = this.state.brandName + \" track mentions & manage DMs\";\n }\n\n const loginCallback = () => {\n if (isBusinessAccount) {\n heroImagePath = \"/images/sample/success-check.png\";\n description = \"To help \" + phrase + \", MightyCheck needs permission to:\";\n } else {\n resultTitle = \"Switch to a professional account\";\n heroImagePath = \"/images/sample/red-ig.png\";\n description = \"@\" + this.state.username + \" is not an Instagram professional account. You must set one up to continue.\";\n }\n\n this.setState({\n stage: 4,\n title: resultTitle,\n heroImagePath: heroImagePath,\n description: description\n });\n };\n\n setTimeout(loginCallback, timeoutDuration);\n }\n\n handleAcceptInvite = (e) => {\n this.statusChangeCallback(this.state.fbResponse);\n }\n\n handleFbConnect = (e) => {\n if (this.state.useFbLoginForBusinessPage) {\n const loginScopes = this.buildLoginScopes();\n const loginUri = getFbLoginForBusinessPageUri(loginScopes);\n\n window.location.href = loginUri;\n } else {\n // TODO: confirm that this execution branch is never used\n this.loginWithFacebook();\n }\n\n e.preventDefault();\n }\n\n handleFbLogout = (event) => {\n if (event) {\n event.preventDefault();\n }\n\n if (this.state.useFbLoginForBusinessPage) {\n localStorage.removeItem('mcSession');\n\n this.clearIgConnectData();\n\n const redirectOrSetHash = () => {\n if (this.state.skipReload) {\n // window.location.hash = 'logged-out';\n } else {\n window.location.href = '/';\n }\n };\n\n axios({\n method: 'delete',\n url: '/session',\n headers: { 'Accept': 'application/json' },\n }).then(redirectOrSetHash).catch(redirectOrSetHash);\n } else if (window.fbLogout) {\n window.fbLogout();\n }\n }\n\n handleViewProfile = (e) => {\n e.preventDefault();\n\n this.setState({\n showModalInvite: false,\n showDashboard: true\n });\n\n if (window.history.pushState) {\n window.history.pushState({}, 'MightyCheck', '/');\n }\n }\n\n handleFbPageCheckboxCheck = () => {\n this.setState({\n fbPageCheckbox: !this.state.fbPageCheckbox\n });\n }\n\n handleFilterClick = (e) => {\n e.preventDefault();\n this.setState({ mediaFilter: e.target.text.toLowerCase() });\n }\n\n requestConversations = () => {\n axios.defaults.headers.common['X-CSRF-Token'] = metaTag('csrf-token');;\n\n this.setState({ isLoadingConversations: true });\n\n axios({\n method: 'get',\n url: '/conversations',\n headers: { 'Accept': 'application/json' },\n })\n .then(res => {\n const conversations = {\n ...this.state.conversations,\n index: res.data,\n };\n\n this.setState({\n conversations: conversations,\n isLoadingConversations: false,\n conversationsLoadCount: this.state.conversationsLoadCount + 1,\n });\n })\n .catch(err => {\n console.log(err.response);\n });\n }\n\n requestConversation = (conversationId) => {\n axios.defaults.headers.common['X-CSRF-Token'] = metaTag('csrf-token');;\n\n this.setState({ isLoadingConversation: true });\n\n axios({\n method: 'get',\n url: `/conversations/${conversationId}`,\n headers: { 'Accept': 'application/json' },\n })\n .then(res => {\n const conversations = {\n ...this.state.conversations,\n };\n\n conversations.data[conversationId] = res.data;\n\n const conversationLoadCount = {\n ...this.state.conversationLoadCount,\n }\n\n conversationLoadCount[conversationId] = this.state.conversationLoadCount[conversationId] + 1;\n\n this.setState({\n conversations: conversations,\n conversationLoadCount: conversationLoadCount,\n });\n })\n .catch(err => {\n console.log(err.response);\n })\n .finally(() => {\n this.setState({ isLoadingConversation: false });\n });\n }\n\n createConversationMessage = (conversationId, message) => {\n axios.defaults.headers.common['X-CSRF-Token'] = metaTag('csrf-token');;\n\n const payload = {\n message: message,\n };\n\n this.setState({\n isSendingMessage: true,\n });\n\n return axios({\n method: 'post',\n url: `/conversations/${conversationId}/message`,\n headers: { 'Accept': 'application/json' },\n data: payload,\n })\n .then(res => {\n const conversations = {\n ...this.state.conversations,\n };\n\n conversations.data[conversationId] = conversations.data[conversationId] || [];\n conversations.data[conversationId].push(res.data);\n\n this.setState({\n conversations: conversations,\n conversationMessageText: '',\n });\n })\n .catch(err => {\n console.log(err.response);\n })\n .finally(() => {\n this.setState({\n isSendingMessage: false,\n });\n });\n }\n\n handleConversationClick = (event) => {\n const conversationId = event.target.getAttribute(\"data-conversation-id\");\n\n const conversations = {\n ...this.state.conversations,\n };\n\n conversations.data[conversationId] = conversations.data[conversationId] || [];\n\n const conversationLoadCount = {\n ...this.state.conversationLoadCount,\n }\n\n conversationLoadCount[conversationId] = this.state.conversationLoadCount[conversationId] || 0;\n\n this.setState({\n conversations: conversations,\n conversationId: conversationId,\n conversationMessageText: '',\n isSendingMessage: false,\n conversationLoadCount: conversationLoadCount,\n isPaneOpen: true,\n });\n\n this.requestConversation(conversationId);\n this.setRefreshConversationTimeout();\n\n event.preventDefault();\n }\n\n setRefreshConversationTimeout() {\n this.requestConversationTimeout = setTimeout(() => {\n if (typeof this.requestConversationTimeout === 'undefined') {\n return;\n }\n\n const conversationId = this.state.conversationId;\n\n if (!conversationId) {\n this.requestConversationTimeout = undefined;\n return;\n }\n\n this.requestConversation(conversationId);\n this.setRefreshConversationTimeout();\n }, 60000);\n }\n\n handleConversationMessageInput = (event) => {\n this.setState({\n conversationMessageText: (event.target.value || '').trim(),\n });\n }\n\n handleConversationMessageSend = (event) => {\n if (typeof event.key !== 'undefined' && event.key !== 'Enter') {\n return;\n }\n\n event.preventDefault();\n\n if (!this.state.isSendingMessage && this.state.conversationMessageText) {\n this.createConversationMessage(this.state.conversationId, this.state.conversationMessageText);\n }\n\n return false;\n }\n\n handleGrantMessagePermissionsClick() {\n if (typeof fbLogin === 'undefined') {\n return;\n }\n\n fbLogin();\n }\n\n componentDidUpdate(_prevProps, prevState) {\n const hasJustSentMessage = !this.state.isSendingMessage && prevState.isSendingMessage;\n const hasJustLoadedConversation = !this.state.isLoadingConversation && prevState.isLoadingConversation;\n const hasPaneJustOpened = this.state.isPaneOpen && !prevState.isPaneOpen;\n\n if (!hasJustSentMessage && !hasJustLoadedConversation && !hasPaneJustOpened) {\n return\n }\n\n const containerElement = this.state.conversationContainerRef.current?.parentElement;\n const messageElement = this.state.conversationMessageRef.current;\n\n const scrollContainerElement = () => {\n const currentContainerElement = this.state.conversationContainerRef.current?.parentElement;\n\n if (!currentContainerElement) {\n return;\n }\n\n currentContainerElement.scrollTo({\n top: currentContainerElement.scrollHeight,\n behavior: hasJustSentMessage ? 'smooth' : 'instant',\n });\n };\n\n if (containerElement) {\n scrollContainerElement();\n } else {\n setTimeout(scrollContainerElement, 50);\n }\n\n if (!hasJustLoadedConversation && messageElement) {\n messageElement.value = '';\n messageElement.focus();\n }\n }\n\n render() {\n let conversationMessagesHtml = null;\n let conversationPaneTitle = \"Instagram Direct Message\";\n\n if (this.state.conversationId) {\n const conversationSummary = this.state.conversations.index.find((conversation) => (conversation.id == this.state.conversationId));\n const conversationMessages = this.state.conversations.data[this.state.conversationId];\n\n if (conversationSummary) {\n conversationPaneTitle = `${conversationSummary.display_name || conversationSummary.username} - ${conversationPaneTitle}`;\n }\n\n if (this.state.isLoadingConversation && !this.state.conversationLoadCount[this.state.conversationId]) {\n conversationMessagesHtml = (\n
\n

Loading conversation...

\n
\n );\n } else if (!conversationMessages || !conversationMessages.length) {\n conversationMessagesHtml = (\n
No conversation is taking place here yet.
\n );\n } else {\n conversationMessagesHtml = conversationMessages.map((message) => {\n const displayName = conversationSummary.display_name || conversationSummary.username;\n\n return (\n \n );\n });\n }\n }\n\n return (\n
\n {false && (this.state.igConnectAction || this.state.stage != 2) && (\n \n Warning:\n  \n Facebook is currently experiencing technical difficulties you may run into issues with connecting your account.\n \n )}\n {\n clearTimeout(this.requestConversationTimeout);\n this.requestConversationTimeout = undefined;\n this.setState({ isPaneOpen: false });\n }}\n >\n
\n {conversationMessagesHtml}\n
\n
\n \n \n
\n \n
\n \n {this.state.showDashboard &&\n }\n
\n \n
\n );\n }\n}\n","import React from 'react';\nimport ModalInvite from './modal_invite';\n\nexport default class ConnectModal extends React.Component {\n render (){\n return (\n
\n
\n \n

powered by MightyCheck via the Instagram API

\n
\n
\n );\n }\n}\n","import React from 'react';\n\nexport default class LoggedOutHome extends React.Component {\n render(){\n let terms = (\n Terms\n );\n\n let privacy = (\n Privacy Policy\n );\n\n let actionArea = null;\n\n if (this.props.useFbLoginForBusinessPage) {\n actionArea = (\n
\n \n \n );\n } else {\n actionArea = (\n
\n
\n \n
\n \n \n );\n }\n\n return(\n
\n

Simple, actionable, Instagram analytics

\n

Engage with your audience & understand the content they love

\n
\n {actionArea}\n
\n

By clicking Get started for free, you agree to our {terms} and {privacy}

\n
\n );\n }\n}\n","import React from 'react';\nimport moment from 'moment';\nimport { nameToAvatarText } from './conversations_helper';\nimport MediaViewableItem from './media_viewable_item';\n\nexport default class Message extends React.Component {\n render() {\n const sender = this.props.message.is_sender;\n\n let avatarHTML = nameToAvatarText(this.props.displayName);\n\n if (this.props.profilePictureURL) {\n avatarHTML = (\n \n );\n }\n\n let messageItem;\n let messageText;\n let mediaToDisplay = null;\n let mediaState = null; // Use null, 'active', 'expired', and 'notSupported'\n let messageToDisplay = null;\n\n if (!this.props.message.is_supported) {\n mediaState = 'notSupported';\n } else if (this.props.message.media) {\n if (this.props.message.media.is_expired) {\n mediaState = 'expired';\n } else if (!this.props.message.media.url) {\n mediaState = 'notSupported';\n } else {\n mediaState = 'active';\n }\n }\n\n const messageNotSupportedText = (\n Media not supported yet - possible image, audio clip, or video.\n );\n\n const messageSender = (\n
\n
\n {avatarHTML}\n
\n
\n )\n\n const messageTimestamp = (\n
\n {moment(this.props.message.sent_at).fromNow()}\n
\n );\n\n if (this.props.message.message && this.props.message.message.length) {\n messageText = this.props.message.message.split(\"\\n\").map((line, index) => (\n

{line}

\n ));\n }\n\n if (!mediaState || mediaState == 'notSupported') {\n // media isn't supported or doesn't exist, so we just don't render mediaToDisplay\n mediaToDisplay = null;\n messageToDisplay =
{messageText ? messageText : messageNotSupportedText}{messageTimestamp}
;\n } else if (mediaState == 'active') {\n if (messageText) {\n mediaToDisplay = (\n
\n
\n
{messageText}{messageTimestamp}
\n
\n );\n } else {\n mediaToDisplay = (\n
\n {messageTimestamp}\n
\n );\n }\n\n messageToDisplay = null;\n } else if (mediaState == 'expired') {\n mediaToDisplay = (
{messageTimestamp}
);\n messageToDisplay = null;\n }\n\n messageItem = (\n
\n {messageSender}\n {messageToDisplay}\n {mediaToDisplay}\n
\n );\n\n return (\n
\n {messageItem}\n
\n );\n }\n}\n","import { metaTag } from './utilities';\n\nexport const defaultScopes = [\n 'public_profile',\n 'email',\n 'pages_show_list',\n 'pages_manage_metadata',\n 'pages_read_engagement',\n 'instagram_basic',\n 'instagram_manage_comments',\n 'instagram_manage_messages',\n 'instagram_manage_insights',\n 'business_management'\n];\n\nfunction getAppId() {\n return metaTag('ig_app_id');\n}\n\nfunction getOauthURL(scopes = null) {\n let url;\n if(metaTag(\"rails_env\" ) === \"test\") {\n url = new URL(window.location.href);\n url.pathname = metaTag('facebook_oauth_url');\n } else {\n url = new URL(metaTag('facebook_oauth_url'));\n }\n\n if(scopes) {\n url.searchParams.set('scope', scopes.join(','));\n }\n return url.toString();\n}\n\nexport function getFbLoginForBusinessPageUri(scopes = []) {\n const loginScopes = scopes.length ? scopes : defaultScopes;\n\n // TODO: Uncomment this when the FB app is approved with new permissions\n // TODO: leaving this and its TODO for reference - this should be changed in facebook.yml if this is in fact something that needs to be changed\n // return `https://www.facebook.com/dialog/oauth?client_id=${appId}&display=page&extras={\"setup\":{\"channel\":\"IG_API_ONBOARDING\"}}&redirect_uri=${redirectUri}&response_type=token&scope=${loginScopeString}`\n\n return getOauthURL(loginScopes);\n}\n\nexport default (options = {}) => {\n const evaluatedLoginScopes = typeof options.scopes == 'function' ? options.scopes() : options.scopes;\n const loginScopes = evaluatedLoginScopes || defaultScopes;\n const initializationCallback = options.onInit || (() => {});\n const initialStatusCallback = options.onInitialStatus || null;\n const statusChangeCallback = options.onStatusChange || (() => {});\n const loginResponseCallback = options.onLoginResponse || (() => {});\n const logoutResponseCallback = options.onLogoutResponse || (() => {});\n\n window.fbAsyncInit = function () {\n FB.init({\n appId: getAppId(),\n cookie: true,\n xfbml: true,\n version: 'v5.0'\n });\n\n initializationCallback(FB, options);\n\n // States: connected, not_authorized (haven't authed into our app before), unknown, other(not logged in to FB)\n if (initialStatusCallback) {\n FB.getLoginStatus(initialStatusCallback);\n }\n\n window.checkLoginState = function () {\n FB.getLoginStatus(statusChangeCallback);\n };\n\n window.fbLogin = function () {\n FB.login((response) => {\n loginResponseCallback(response);\n statusChangeCallback(response);\n }, { scope: loginScopes.join(',') });\n };\n\n window.fbLogout = function () {\n FB.logout(logoutResponseCallback);\n };\n };\n\n (function (d, s, id) {\n var js, fjs = d.getElementsByTagName(s)[0];\n if (d.getElementById(id)) { return; }\n js = d.createElement(s); js.id = id;\n js.src = \"https://connect.facebook.net/en_US/sdk.js\";\n fjs.parentNode.insertBefore(js, fjs);\n }(document, 'script', 'facebook-jssdk'));\n}\n","export const metaTag = (key) => {\n const meta = document.querySelector(`meta.env[name=\"${key}\"]`);\n if (!meta) {\n return '';\n }\n return meta.getAttribute('content');\n}\n\nexport const shimBugsnag = (bugsnag) => {\n return Object.assign(bugsnag, {\n leaveBreadcrumb: () => {\n console.log.apply(['leaveBreadcrumb'].concat(arguments));\n },\n notify: () => {\n console.log.apply(['notify'].concat(arguments));\n },\n })\n}","import React from 'react';\n\nexport default class WarningBanner extends React.Component {\n render() {\n return (\n
\n
\n {this.props.children}\n
\n
\n );\n }\n}\n"],"names":["metaTag","Bugsnag","apiKey","plugins","BugsnagPluginReact","shimBugsnag","hashChangeHandler","lastStatusResponseJSON","isConnecting","extractHash","hashSource","window","location","hash","replace","queryString","adjustedHash","sourceData","arguments","length","undefined","_objectSpread","AppContainer","_React$Component","props","_document$querySelect","_localStorage$getItem","_ref","_hash$st","_localStorage$getItem2","_localStorage$getItem3","_msSessionToken","_hash$useLegacyLogin","_this","_classCallCheck","_callSuper","handleUsernameInputChange","e","username","target","value","setState","usernameInput","handleGetStarted","state","useFbLoginForBusinessPage","showHome","showModalInvite","stage","isBusinessAccount","businessAccountChecked","showFacebookLogin","preventDefault","title","description","loginOrCreateUser","handleManagedMessagesChoice","event","allowManageMessages","sourceMsManageMessages","isPersistingPreferences","payload","manage_messages","axios","method","url","headers","sessionId","data","then","res","managed_messages","_err","buildBusinessHash","profile","userAvatarUrl","profile_picture_url","resultTitle","heroImagePath","buildNotBusinessHash","handleAcceptInvite","statusChangeCallback","fbResponse","handleFbConnect","loginScopes","buildLoginScopes","loginUri","getFbLoginForBusinessPageUri","href","loginWithFacebook","handleFbLogout","localStorage","removeItem","clearIgConnectData","redirectOrSetHash","skipReload","fbLogout","handleViewProfile","showDashboard","history","pushState","handleFbPageCheckboxCheck","fbPageCheckbox","handleFilterClick","mediaFilter","text","toLowerCase","requestConversations","defaults","common","isLoadingConversations","conversations","index","conversationsLoadCount","err","console","log","response","requestConversation","conversationId","isLoadingConversation","concat","conversationLoadCount","createConversationMessage","message","isSendingMessage","push","conversationMessageText","handleConversationClick","getAttribute","isPaneOpen","setRefreshConversationTimeout","handleConversationMessageInput","trim","handleConversationMessageSend","key","providedUsername","page","document","querySelector","dataset","igConnectAction","igConnect","startingStage","search","brand","brandName","brandImageUrl","initialFbPageCheckbox","requestMessagePermissions","initialState","getItem","msSessionToken","st","hasAccessDeniedError","_localStorage$getItem4","_localStorage$getItem5","_localStorage$getItem6","_hash$access_token","_hash$long_lived_toke","sourceMsManage","source","toString","showConnectingProfile","fbStatus","alertRestartError","errorCode","_res$data$user","_res$data$data$profil","session_id","user","brandSlug","setItem","connecting","access_token","long_lived_token","setTimeout","connectionData","fbUserId","primaryInstagramId","primaryInstagramUsername","accessToken","longAccessToken","handleConnectionFrom","igFailureDetails","URL","searchParams","get","connection_cancelled","invitePhrase","ambassador","invite","confirmed","useLegacyLogin","signupType","loggedIn","conversationContainerRef","createRef","conversationMessageRef","panelData","successCode","_inherits","this","initialLoginStatus","status","loadFb","handleHashChange","bind","addEventListener","removeEventListener","_hash$access_token2","_hash$long_lived_toke2","_ref2","_ref3","_document$querySelect2","_ref4","_ref5","_this$state$msSession","mountFb","scopes","onInitialStatus","onStatusChange","onLoginResponse","loggingIntoFacebook","onLogoutResponse","loggedOutOfFacebook","_toConsumableArray","defaultFacebookScopes","messagesScopeIndex","indexOf","splice","checkLoginState","authResponse","fbLogin","_response","reload","responseJSON","JSON","stringify","sameAsLastResponse","_ref6","_this$state$msSession2","userID","_connectionData$provi","_connectionData$brand","_this2","fbUserID","options","managed","_res$data$profile","_res$data$profile2","_res$data$profile3","success_code","instagram_username","finalizeAmbassador","errorMsg","error_msg_code","successPhrase","extraPhrase","cleanedUsername","statusText","is_business_account","initialConstructorState","newState","_this3","checkIfBusinessAccount","businessHash","business_discovery","id","_this4","timeoutDuration","phrase","_this5","requestConversationTimeout","_prevProps","prevState","_this$state$conversat","_this6","hasJustSentMessage","hasJustLoadedConversation","hasPaneJustOpened","containerElement","current","parentElement","messageElement","scrollContainerElement","_this6$state$conversa","currentContainerElement","scrollTo","top","scrollHeight","behavior","focus","_this7","conversationMessagesHtml","conversationPaneTitle","conversationSummary","find","conversation","conversationMessages","display_name","React","className","map","displayName","Message","profilePictureURL","SlidingPane","overlayClassName","isOpen","onRequestClose","clearTimeout","ref","required","type","placeholder","onInput","onKeyDown","disabled","onClick","LoggedOutHome","Dashboard","handleGrantMessagePermissionsClick","ConnectModal","ModalInvite","terms","privacy","actionArea","onChange","messageItem","messageText","sender","is_sender","avatarHTML","nameToAvatarText","src","mediaToDisplay","mediaState","messageToDisplay","is_supported","media","is_expired","messageNotSupportedText","messageSender","messageTimestamp","moment","sent_at","fromNow","split","line","MediaViewableItem","mediaType","defaultScopes","pathname","set","join","getOauthURL","d","s","js","fjs","initializationCallback","onInit","initialStatusCallback","loginResponseCallback","logoutResponseCallback","fbAsyncInit","FB","init","appId","cookie","xfbml","version","getLoginStatus","login","scope","logout","getElementsByTagName","getElementById","createElement","parentNode","insertBefore","meta","bugsnag","Object","assign","leaveBreadcrumb","apply","notify"],"sourceRoot":""}