{"version":3,"file":"523.5b2052522f03bd2b4464.js","mappings":"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","sources":["webpack://raygun-website/./scripts/react/app/selectors/pageData.ts","webpack://raygun-website/./scripts/react/components/ds/button/toggle/index.tsx","webpack://raygun-website/./scripts/react/components/ds/dropdown/triggers/index.tsx","webpack://raygun-website/./scripts/react/components/ds/module/footer.tsx","webpack://raygun-website/./scripts/react/components/ds/module/index.tsx","webpack://raygun-website/./scripts/react/components/error.tsx","webpack://raygun-website/./scripts/react/components/horizontalRule/index.tsx","webpack://raygun-website/./scripts/react/components/loading/index.tsx","webpack://raygun-website/./scripts/react/components/modal/actions.ts","webpack://raygun-website/./scripts/react/components/paywall/trialBanner/trialBanner.tsx","webpack://raygun-website/./scripts/react/interfaces/products.tsx","webpack://raygun-website/./scripts/react/modules/permissions/models/index.ts","webpack://raygun-website/./scripts/react/selectors/time.ts","webpack://raygun-website/./scripts/react/utils/linking.ts","webpack://raygun-website/./scripts/react/utils/links/index.ts","webpack://raygun-website/./scripts/react/utils/routing/entryCallbacks.ts","webpack://raygun-website/./scripts/react/utils/routing/index.ts","webpack://raygun-website/./scripts/react/utils/storage/index.ts"],"sourcesContent":["/** @format */\n\nimport { createSelector } from 'reselect';\nimport { AppState } from 'interfaces/appState';\n\nexport const pageDataSelector = (state: AppState) => state.app.pageData;\n\nexport const getApplications = createSelector(\n pageDataSelector,\n pageData => pageData.Applications,\n);\n\nexport const getOutOfDateAgents = createSelector(\n pageDataSelector,\n pageData => pageData.OutOfDateAgents || [],\n);\n\nexport const hasSeenWelcomeModal = createSelector(\n pageDataSelector,\n pageData => pageData.APMWelcomeModalSeen,\n);\n\nexport const getSlackClientId = createSelector(\n pageDataSelector,\n pageData => pageData.SlackClientId,\n);\n\nexport const getTeamsDetailsId = createSelector(\n pageDataSelector,\n pageData => pageData.TeamsDetailsId,\n);\n\nexport const getPlanIntegrationStatuses = createSelector(\n pageDataSelector,\n pageData => pageData.PlanIntegrationStatuses,\n);\n\nexport const hasPersonalAccessToken = createSelector(\n pageDataSelector,\n pageData => pageData.HasPersonalAccessToken,\n);\n\nexport const getInstructions = createSelector(\n pageDataSelector,\n pageData => pageData.Instructions,\n);","/**\n * @prettier\n */\n/* tslint:disable:max-classes-per-file */\n\nimport React from 'react';\n\nimport { Icon } from 'components/icon';\n\nimport { BaseToggleButtonGroup, BaseToggleButtonGroupProps } from './group';\nimport { BaseToggleButtonItem, BaseToggleButtonItemProps } from './item';\n\nexport class ToggleButtonGroup extends React.Component {\n static defaultProps: Pick = {\n disabled: false,\n };\n\n render() {\n const { children, ...props } = this.props;\n return {children};\n }\n}\n\ntype ToggleButtonItemProps = {\n children: string;\n} & BaseToggleButtonItemProps;\n\nexport class ToggleButtonItem extends React.Component {\n static defaultProps: Pick = {\n selected: false,\n disabled: false,\n isIcon: false,\n };\n\n render() {\n const { children, ...props } = this.props;\n\n return {children};\n }\n}\n\ntype ToggleButtonIconProps = {\n icon: string;\n} & BaseToggleButtonItemProps;\n\nexport class ToggleButtonIcon extends React.Component {\n static defaultProps: Pick = {\n selected: false,\n disabled: false,\n isIcon: true,\n };\n\n render() {\n const { icon, ...props } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","/** @format **/\n/* tslint:disable:max-file-line-count */\n/* tslint:disable:max-classes-per-file */\n\nimport React from 'react';\nimport { omit, isEmpty } from 'lodash';\n\nimport { Omit, PropsOfWithDefaults } from 'utils/types';\n\nimport { TextButton, EmphasisButton, Button, UtilityIconButton } from 'components/ds/button';\nimport { FilterText } from 'components/ds/filters';\nimport { IconProps } from 'components/icon';\nimport { PlanAvatar } from 'components/ds/planAvatar';\nimport { Labeltip } from 'components/ds/tooltip';\n\nimport { BaseTrigger, Props as BaseProps, DefaultProps } from './base';\nimport { InputTrigger } from '../../inputs/triggers';\nimport { SubtleDropdownButton } from './subtle';\n\ntype SharedProps = Omit;\n\ntype TextDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults;\n};\nexport class TextDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: TextButton.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n\ntype IconDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults<\n typeof UtilityIconButton,\n typeof UtilityIconButton.defaultProps\n >;\n};\nconst UtilityIconButtonWrapper: React.FunctionComponent<\n IconDropdownProps['triggerProps']\n> = props => {\n return (\n \n \n \n );\n};\nexport class IconDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: UtilityIconButton.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n\ntype DropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults;\n};\nexport class Dropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: Button.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n\ntype EmphasisDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults;\n};\nexport class EmphasisDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: EmphasisButton.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n\ntype FilterTextDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults;\n} & PropsOfWithDefaults;\n\nexport class FilterTextDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: FilterText.defaultProps,\n height: 'small',\n };\n\n render() {\n const triggerProps = {\n ...this.props.triggerProps,\n disabled: this.props.disabled,\n roundLeftCorners: this.props.roundLeftCorners,\n roundRightCorners: this.props.roundRightCorners,\n };\n return ;\n }\n}\n\ntype SelectDropdownProps = {\n value?: string;\n children: any;\n onValueChange?: (value: any, item?: any) => void;\n onToggle?: (toggled: any) => void;\n label?: string | JSX.Element;\n subtext?: string;\n error?: string;\n absoluteError?: boolean;\n placeholder?: string;\n iconLeft?: React.ReactElement;\n inputId?: string;\n placeholderTextColor?: string;\n removePadding?: boolean;\n multiSelect?: boolean;\n clearableSearch?: boolean;\n forDropdownTrigger?: boolean;\n hasLabel?: boolean;\n leftIconSpacing?: boolean;\n prefixText?: string;\n credentialsValue?: string;\n onCopyButtonClick?: () => void;\n} & SharedProps &\n React.InputHTMLAttributes;\nexport class SelectDropdown extends React.Component {\n static defaultProps = {\n overflowCount: 5,\n overflow: true,\n position: 'left',\n height: 'normal',\n block: false,\n small: false,\n disabled: false,\n triggerText: '',\n label: '',\n selection: true,\n fullWidthOnMobile: false,\n placeholderTextColor: 'grey800',\n clearableSearch: false,\n };\n\n render() {\n const {\n children,\n forDropdownTrigger,\n triggerText,\n overflow,\n overflowCount,\n onValueChange,\n onToggle,\n onVisibilityChange,\n fullWidth,\n hasLabel,\n position,\n height,\n id,\n clearableSearch,\n fullWidthOnMobile,\n leftIconSpacing,\n prefixText,\n credentialsValue,\n onCopyButtonClick,\n ...triggerProps\n } = this.props;\n\n return (\n \n );\n }\n}\n\ntype PlanAvatarDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults;\n};\n\nexport class PlanAvatarDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: PlanAvatar.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n\ntype SubtleDropdownProps = SharedProps & {\n triggerProps: PropsOfWithDefaults<\n typeof SubtleDropdownButton,\n typeof SubtleDropdownButton.defaultProps\n >;\n};\n\nexport class SubtleDropdown extends React.Component {\n static defaultProps = {\n ...DefaultProps,\n triggerProps: SubtleDropdownButton.defaultProps,\n };\n\n render() {\n return ;\n }\n}\n","/** @format **/\n\nimport React from 'react';\nimport { IStyle } from 'fela';\nimport { createComponent } from 'react-fela';\n\nimport { ThemeType } from 'app/theme';\n\nimport { Padding } from 'components/layout';\nimport { Flex, FlexBlock } from 'components/flex';\nimport { screenSmallOnly } from 'fela-rules/breakpoints';\nimport { applyModifiers } from 'fela-rules/modifiers';\n\ntype Props = {\n forDialog?: boolean;\n justify?: string;\n align?: string;\n removePadding?: boolean;\n};\n\nconst StyledFooter = (props: Props & ThemeType): IStyle =>\n applyModifiers(\n [\n props.forDialog,\n {\n borderTop: 'none',\n },\n ],\n [\n props.removePadding,\n {\n padding: 'none',\n },\n ],\n )({\n backgroundColor: 'white',\n padding: '16px 24px',\n borderTop: `1px solid ${props.theme.ds.getColorByName('blueGrey100')}`,\n });\n\nconst Footer = createComponent(StyledFooter);\n\nexport const ModuleFooter: React.FunctionComponent = ({ children, ...props }) => (\n
\n \n {children}\n \n
\n);\n\nexport const ModuleFooterOnRight: React.FunctionComponent = ({ children, ...props }) => (\n
\n \n {children}\n \n
\n);\n\nexport const ModuleFooterButtonGroup: React.FunctionComponent<{}> = ({ children }) => (\n \n \n \n {children}\n \n \n \n);\n\nconst StyledModuleFooterContent = (): IStyle => ({\n ...screenSmallOnly({\n height: '40px',\n marginTop: '24px',\n display: 'flex',\n alignItems: 'center',\n }),\n});\n\nexport const ModuleFooterContent = createComponent(StyledModuleFooterContent);\n","/** @format **/\n\nimport React from 'react';\nimport { IStyle } from 'fela';\nimport { createComponentWithProxy } from 'react-fela';\nimport { OverflowProperty } from 'csstype';\n\nimport { applyModifiers } from 'fela-rules/modifiers';\n\nimport { COLORS } from 'app/theme/materialDS';\nimport { ThemeType } from 'app/theme';\n\nexport * from './header';\nexport * from './body';\nexport * from './footer';\n\ntype Props = {\n id?: string;\n forDialog?: boolean;\n backgroundColor?: COLORS;\n overflow?: OverflowProperty;\n};\n\nconst StyledModuleWrapper = (props: Props & ThemeType): IStyle =>\n applyModifiers(\n [\n props.forDialog,\n {\n border: 'none',\n borderRadius: '3px',\n overflow: 'hidden',\n boxShadow: props.theme.ds.dialogBoxShadow,\n },\n ],\n [\n !!props.overflow,\n {\n overflow: props.overflow,\n },\n ],\n )({\n border: `1px solid ${props.theme.ds.getColorByName('blueGrey100')}`,\n boxShadow: props.theme.ds.standardBoxShadow,\n backgroundColor: props.theme.ds.getColorByName(props.backgroundColor),\n });\n\nconst ModuleWrapper = createComponentWithProxy(StyledModuleWrapper);\n\nexport const Module: React.FunctionComponent = ({ children, ...props }) => {\n return {children};\n};\n\nModule.defaultProps = {\n forDialog: false,\n backgroundColor: 'white',\n};\n","/** @format **/\n\nimport * as React from 'react';\nimport { isNil } from 'lodash';\n\nimport { ERRORS } from 'constants/errors';\nimport { STATUS_URL } from 'utils/constants';\nimport { SupportLink } from \"components/supportLink\";\n\ntype CustomErrorProps = {\n headline: string;\n resolutions?: React.ReactNode[];\n button?: React.ReactNode;\n};\n\nexport const CustomError: React.FunctionComponent = ({\n headline,\n resolutions,\n button,\n}) => {\n const items = resolutions.map((message, index) => (\n
  • \n {message}\n
  • \n ));\n\n const list = items.length > 0 ?
      {items}
    : null;\n\n return (\n
    \n
    \n
    \n
    {headline}
    \n {list}\n {button}\n
    \n
    \n
    \n );\n};\n\nCustomError.defaultProps = {\n resolutions: [],\n button: null,\n};\n\nexport type Props = {\n error: Error;\n reload?: (event?: React.MouseEvent) => void;\n singleLine?: boolean;\n padding?: number;\n reloadText?: string;\n};\n\nexport const Error: React.FunctionComponent = (props: Props) => {\n const { error, reload, singleLine, padding, reloadText } = props;\n\n const reloadBtn = reload ? (\n \n {reloadText}\n \n ) : null;\n\n if (singleLine) {\n const singleLineStyle = !isNil(padding) ? { padding: `${padding}px` } : null;\n\n return (\n

    \n {getHeadlineForError(error)} {reloadBtn}\n

    \n );\n }\n\n return (\n \n );\n};\n\nError.defaultProps = {\n reloadText: 'Reload',\n};\n\nexport const getHeadlineForError = (err: Error): string => {\n if (!window.navigator.onLine) {\n return ErrorMessages.NoNet;\n }\n\n if (err) {\n switch (err.message) {\n case ERRORS.SERVER_FAILURE:\n return 'API failure';\n case ERRORS.WRONG_PATH_404:\n return 'Oops, you took a wrong turn';\n }\n }\n\n return ErrorMessages.Generic;\n};\n\n// Disabled because it gets confused by the array return below\n/* tslint:disable:jsx-wrap-multiline */\nconst getResolutionsforError = (err: Error): React.ReactNode[] => {\n if (!window.navigator.onLine) {\n return ['Check cables, modem and router', 'Reconnect to Wi-Fi or network'];\n }\n\n if (err) {\n switch (err.message) {\n case ERRORS.SERVER_FAILURE:\n return [\n \n Check the{' '}\n \n {' '}\n Raygun's API status\n \n ,\n \n Let us know about this issue\n ,\n ];\n case ERRORS.WRONG_PATH_404:\n return ['Double check the URL path', 'Update your bookmark'];\n }\n }\n\n return [\n 'Reload this page',\n \n Let us know about this issue\n ,\n ];\n};\n\nexport enum ErrorMessages {\n Generic = 'Oops, something has gone wrong!',\n NoNet = 'There is no internet connection',\n}\n","/**\n * @prettier\n */\n\nimport React from 'react';\nimport { IStyle } from 'fela';\nimport { isNil } from 'lodash';\nimport { createComponent } from 'react-fela';\n\nimport { Theme, ThemeType } from 'app/theme';\nimport { applyModifiers } from 'fela-rules/modifiers';\nimport { COLORS } from 'app/theme/materialDS';\n\ntype Props = {\n marginTop?: number;\n marginBottom?: number;\n backgroundColor?: COLORS;\n textBackgroundColor?: string;\n text?: string;\n};\n\nconst StyledHorizontalRule = (props: Props & ThemeType): IStyle => {\n const styles: IStyle = {\n height: '1px',\n width: '100%',\n backgroundColor: !isNil(props.backgroundColor)\n ? Theme.ds.getColorByName(props.backgroundColor)\n : `${props.theme.colors.border.standard}`,\n };\n\n return applyModifiers(\n [\n !!props.marginTop,\n {\n marginTop: `${props.marginTop}px`,\n },\n ],\n [\n !!props.marginBottom,\n {\n marginBottom: `${props.marginBottom}px`,\n },\n ],\n [\n !!props.text,\n {\n position: 'relative',\n textAlign: 'center',\n ':before': {\n content: `\"${props.text}\"`,\n fontSize: '14px',\n fontStyle: 'italic',\n position: 'absolute',\n backgroundColor: !isNil(props.textBackgroundColor) ? props.textBackgroundColor : '#fff',\n padding: '0 10px 0 8px', // Offset italic text width\n color: '#444',\n transform: 'translate(-50%, -50%)',\n },\n },\n ],\n )(styles);\n};\n\nconst HorizontalRuleComponent = createComponent(StyledHorizontalRule, 'div', [\n 'aria-label',\n 'aria-hidden',\n]);\n\nexport const HorizontalRule: React.FunctionComponent = (props: Props) => (\n \n);\n\nexport default HorizontalRule;\n","/**\n * @prettier\n */\n\nimport * as React from 'react';\nimport classnames from 'classnames';\n\ntype LoadingSpinnerProps = {\n active?: boolean;\n semiTransparent?: boolean;\n smallSpinner?: boolean;\n};\n\nconst LoadingSpinner: React.FunctionComponent = props => {\n const classes = classnames('loading', {\n 'loading--active': props.active,\n 'loading--semi-transparent': props.semiTransparent,\n });\n\n const spinnerClasses = classnames('loading__spinner', {\n 'loading__spinner--small': props.smallSpinner,\n });\n\n return (\n
    \n
    \n
    \n );\n};\n\nLoadingSpinner.defaultProps = {\n active: true,\n semiTransparent: false,\n smallSpinner: false,\n};\n\ntype OverlayProps = {\n smallSpinner?: boolean;\n};\n\nexport const Overlay: React.FunctionComponent = props => (\n
    \n
    {props.children}
    \n
    \n \n
    \n
    \n);\n\nOverlay.defaultProps = {\n smallSpinner: false,\n};\n\nexport const Loading: React.FunctionComponent<{}> = () => (\n
    \n \n
    \n);\n\ntype StandaloneLoadingSpinnerProps = {\n height?: string;\n} & LoadingSpinnerProps;\n\nexport const StandaloneLoadingSpinner: React.FunctionComponent = ({\n height,\n ...props\n}) => (\n
    \n \n
    \n);\n\nexport const FlexibleHeightSpinner: React.FunctionComponent = props => (\n
    \n {props.children}\n
    \n \n
    \n
    \n);\n","/** @format */\n\nimport createActionFactory from 'typescript-fsa';\n\nimport * as Actions from 'app/popups/actions';\nimport * as Models from 'app/popups/models';\n\nexport const openModal = (\n component: Models.PopupComponent,\n props: Models.PopupPassableProps = {},\n id: string = Actions.getId(),\n) => Actions.open({ component, props, id });\nexport const closeModal = Actions.close;\n","/** @format **/\n\nimport React, { FunctionComponent } from 'react';\nimport { connect } from 'react-redux';\n\nimport { ProductType } from \"interfaces/plan\";\nimport { ProductPagesState } from 'sections/productpages';\nimport {\n apmOnTrial,\n crashOnTrial,\n getPlanIdentifier,\n rumOnTrial\n} from 'app/selectors/configuration';\n\nimport { SnowplowLink } from 'components/snowplow';\nimport { Icon } from \"components/icon\";\n\nimport { BannerWrapper, IconWrapper, LinkWrapper } from './styles';\n\ntype StateProps = {\n isOnTrial: boolean;\n planIdentifier: string;\n};\n\ntype PassedProps = {\n text: string;\n isCondensed?: boolean;\n alignLeft?: boolean;\n snowplowId: string;\n overlay?: boolean;\n padding?: string;\n productType?: ProductType;\n};\n\ntype Props = StateProps & PassedProps;\n\nconst UnconnectedTrialBanner: FunctionComponent = props => {\n if (!props.isOnTrial) {\n return null;\n }\n\n return (\n \n \n \n \n\n
    \n {props.text} {' '}\n \n \n See upgrade options\n \n \n
    \n
    \n );\n};\n\nconst ConnectedTrialBanner = connect(\n (state: ProductPagesState, passedProps) => {\n\n const isOnTrial = () => {\n if (!!passedProps.productType) {\n switch (passedProps.productType) {\n case ProductType.CRASH_REPORTING:\n return crashOnTrial(state);\n case ProductType.RUM:\n return rumOnTrial(state);\n case ProductType.APM:\n return apmOnTrial(state);\n default:\n return crashOnTrial(state);\n }\n } else {\n // When on a Platform Trial, crashOnTrial will always be true no matter which area of the app we're in,\n // whereas rumOnTrial and apmOnTrial will only show as true when we are in their respective areas\n return crashOnTrial(state);\n }\n };\n\n return ({\n isOnTrial: isOnTrial(),\n planIdentifier: getPlanIdentifier(state),\n });\n },\n)(UnconnectedTrialBanner);\n\nexport { ConnectedTrialBanner as TrialBanner };","/** @format **/\nimport { ProductType } from \"interfaces/plan\";\n\nexport const CrashReporting = 'Crash Reporting';\n\nexport const RealUserMonitoring = 'Real User Monitoring';\n\nexport const APM = 'APM';\n\nexport const Platform = 'Platform';\n\nexport const UsageCapping = 'Usage Capping';\n\nexport const SingleSignOn = 'Single Sign On';\n\nexport type ProductTypes =\n | typeof CrashReporting\n | typeof RealUserMonitoring\n | typeof APM\n | typeof Platform\n | typeof UsageCapping\n | typeof SingleSignOn;\n\nexport const Products = {\n CrashReporting: CrashReporting,\n RealUserMonitoring: RealUserMonitoring,\n APM: APM,\n UsageCapping: UsageCapping,\n SingleSignOn: SingleSignOn\n};\n\n// FE Version of the `Mindscape.Raygun.Common.Interfaces.Models.ProductTypes`\nexport enum ProductTypesEnum {\n CrashReporting = 0,\n Pulse = 1,\n APM = 2,\n Platform = 10,\n AdditionalUser = 11,\n UsageCapping = 12,\n SingleSignOn = 13,\n}\n\nexport function getProductType(productTypeEnum: ProductTypesEnum): ProductType {\n switch (productTypeEnum) {\n case ProductTypesEnum.Platform:\n return ProductType.PLATFORM;\n case ProductTypesEnum.CrashReporting:\n return ProductType.CRASH_REPORTING;\n case ProductTypesEnum.Pulse:\n return ProductType.RUM;\n case ProductTypesEnum.APM:\n return ProductType.APM;\n case ProductTypesEnum.UsageCapping:\n return ProductType.USAGE_CAPPING;\n case ProductTypesEnum.SingleSignOn:\n return ProductType.SINGLE_SIGN_ON;\n }\n}\n\nexport function productEnumToProduct(product: ProductTypesEnum): ProductTypes {\n switch (product) {\n case ProductTypesEnum.CrashReporting:\n return 'Crash Reporting';\n case ProductTypesEnum.Pulse:\n return 'Real User Monitoring';\n case ProductTypesEnum.APM:\n return 'APM';\n case ProductTypesEnum.Platform:\n return 'Platform';\n case ProductTypesEnum.UsageCapping:\n return 'Usage Capping';\n case ProductTypesEnum.SingleSignOn:\n return 'Single Sign On';\n }\n}\n\nexport function productEnumToDisplayString(product: ProductTypesEnum, full: boolean = false) {\n switch (product) {\n case ProductTypesEnum.CrashReporting:\n return 'Crash Reporting';\n case ProductTypesEnum.Pulse:\n return 'Real User Monitoring';\n case ProductTypesEnum.APM:\n return full ? 'Raygun APM' : 'APM';\n case ProductTypesEnum.Platform:\n return 'Platform';\n case ProductTypesEnum.AdditionalUser:\n return 'User';\n case ProductTypesEnum.UsageCapping:\n return 'Usage Capping';\n case ProductTypesEnum.SingleSignOn:\n return 'Single Sign On';\n }\n}\n\nexport function productEnumToUrlFriendlyString(\n product: ProductTypesEnum,\n lowercase: boolean = false,\n) {\n let val: string = '';\n switch (product) {\n case ProductTypesEnum.CrashReporting:\n val = 'CrashReporting';\n break;\n case ProductTypesEnum.Pulse:\n val = 'Pulse';\n break;\n case ProductTypesEnum.APM:\n val = 'APM';\n break;\n case ProductTypesEnum.Platform:\n val = 'Platform';\n break;\n case ProductTypesEnum.AdditionalUser:\n val = 'AdditionalUser';\n break;\n case ProductTypesEnum.UsageCapping:\n val = 'UsageCapping';\n break;\n case ProductTypesEnum.SingleSignOn:\n val = 'SingleSignOn';\n break;\n }\n return lowercase ? val.toLowerCase() : val;\n}\n\nexport function stringToProductEnum(product: string): ProductTypesEnum {\n switch (product.replace(/\\s/g, '').toLowerCase()) {\n case 'crashreporting':\n return ProductTypesEnum.CrashReporting;\n case 'realusermonitoring':\n case 'pulse':\n return ProductTypesEnum.Pulse;\n case 'apm':\n return ProductTypesEnum.APM;\n case 'platform':\n return ProductTypesEnum.Platform;\n case 'additionaluser':\n return ProductTypesEnum.AdditionalUser;\n case 'usagecapping':\n return ProductTypesEnum.UsageCapping;\n case 'singlesignon':\n return ProductTypesEnum.SingleSignOn;\n }\n}","export type PermissionsState = {\n ApplicationPermissions: {\n [key: number]: ApplicationPermissions;\n },\n PlanPermissions: {\n [key: number]: PlanPermissions;\n }\n};\n\nexport enum PermissionCategory {\n ALL, PLAN, APPLICATION\n}\n\n/**\n * These enums are a mirror of the permissions enums stored on the backend.\n * When adding/removing permissions from this list, you must update the corresponding\n * enum on the backend.\n */\n\nexport enum PlanPermissions {\n None = \"None\",\n CancelSubscription = \"CancelSubscription\",\n ChangeSubscription = \"ChangeSubscription\",\n ChangeBillingDetails = \"ChangeBillingDetails\",\n UpdateOrganisationDetails = \"UpdateOrganisationDetails\",\n ViewUsageDetails = \"ViewUsageDetails\",\n UpdatePrivacyAndCompliance = \"UpdatePrivacyAndCompliance\",\n ViewSubscriptionDetails = \"ViewSubscriptionDetails\",\n\n ManageTeams = \"ManageTeams\",\n ManageApplicationsOnTeams = \"ManageApplicationsOnTeams\",\n ManageMembersOnTeams = \"ManageMembersOnTeams\",\n CreateNewApplications = \"CreateNewApplications\",\n DeleteApplications = \"DeleteApplications\",\n}\n\nexport enum ApplicationPermissions {\n None = \"None\",\n UpdateInboundFilters = \"UpdateInboundFilters\",\n UpdateReport = \"UpdateReport\",\n MergeErrors = \"MergeErrors\",\n PermanentlyIgnoreError = \"PermanentlyIgnoreErrorGroups\",\n DeleteErrorGroups = \"DeleteErrorGroups\",\n ChangeGroupingStrategy = \"ChangeGroupingStrategy\",\n UpdateSamplingRate = \"UpdateSamplingRate\",\n}\n\nexport type PermissionTypes = PlanPermissions | ApplicationPermissions;\n\nexport function GetDisplayPermissionName(permission: PermissionTypes): string {\n switch (permission) {\n case PlanPermissions.ViewSubscriptionDetails:\n return \"View subscription details\";\n case PlanPermissions.CancelSubscription:\n return \"Cancel subscription\";\n case PlanPermissions.ChangeSubscription:\n return \"Change subscription\";\n case PlanPermissions.ChangeBillingDetails:\n return \"Change billing details\";\n case PlanPermissions.UpdateOrganisationDetails:\n return \"Update organisation details\";\n case PlanPermissions.ViewUsageDetails:\n return \"View usage details\";\n case PlanPermissions.UpdatePrivacyAndCompliance:\n return \"Update privacy and compliance\";\n\n case PlanPermissions.ManageTeams:\n return \"Manage teams\";\n case PlanPermissions.ManageApplicationsOnTeams:\n return \"Manage applications on teams\";\n case PlanPermissions.ManageMembersOnTeams:\n return \"Manage members on teams\";\n\n case PlanPermissions.CreateNewApplications:\n return \"Create new applications\";\n case PlanPermissions.DeleteApplications:\n return \"Delete applications\";\n case ApplicationPermissions.UpdateInboundFilters:\n return \"Update inbound filters\";\n case ApplicationPermissions.UpdateReport:\n return \"Update reports\";\n case ApplicationPermissions.MergeErrors:\n return \"Merge errors\";\n case ApplicationPermissions.PermanentlyIgnoreError:\n return \"Change error status to permanently ignored\";\n case ApplicationPermissions.DeleteErrorGroups:\n return \"Delete error groups\";\n case ApplicationPermissions.ChangeGroupingStrategy:\n return \"Change error grouping strategy\";\n case ApplicationPermissions.UpdateSamplingRate:\n return \"Update sampling rate\";\n default:\n throw Error(`Unknown plan permission: ${permission}`);\n }\n}","/** @format */\n\nimport { get } from 'lodash';\n\nimport { Configuration } from 'interfaces/configuration';\n\nconst config: Configuration = get(window, 'RaygunConfiguration', {});\n\nexport const getTimeZoneName = () => config.TimeZoneName;\n\nexport const get24HourDisplay = () => config.Display24HourTimes;\n\nexport const getTimeZoneOffset = () => config.TimeZoneOffsetInHours;\n","/** @format */\n\nimport { isNil } from 'lodash';\n\ntype ApplicationId = string | number;\n\nexport function toIdentifier(id: number): string {\n if (isNil(id)) {\n return null;\n }\n\n return id.toString(36);\n}\n\nexport function toId(id: string): number {\n if (isNil(id)) {\n return null;\n }\n\n return parseInt(id, 36);\n}\n\nexport const CrashReporting = {\n application(appIdentifier: string) {\n return `/crashreporting/${appIdentifier}`;\n },\n applicationById(appId: number) {\n return CrashReporting.application(toIdentifier(appId));\n },\n errorGroup(appIdentifier: string, groupId: string | number) {\n return `${CrashReporting.application(appIdentifier)}/errors/${groupId}`;\n },\n errorGroupById(appId: number, groupId: string | number) {\n return CrashReporting.errorGroup(toIdentifier(appId), groupId);\n },\n errorGroupForUser(appIdentifier: string, groupId: string | number, userIdentifier: string) {\n return `${CrashReporting.errorGroup(appIdentifier, groupId)}?search=${userIdentifier}`;\n },\n};\n\nexport const RUM = {\n session(appId: ApplicationId, sessionId: string | number) {\n return `/pulse/${appId}?session=${sessionId}`;\n },\n};\n\nexport const Deployments = {\n application(appIdentifier: string) {\n return `/dashboard/${appIdentifier}/deployments`;\n },\n};\n\nexport const AffectedUsers = {\n application(appIdentifier: string) {\n return `/reporting/${appIdentifier}/affectedusers`;\n },\n};\n","/** @format **/\n\nimport { some, identity, every, memoize } from 'lodash';\n\nimport { urlContains } from 'utils/links/utils';\nimport { toIdentifier } from 'utils/linking';\nimport { Dashboard } from 'interfaces/dashboard';\nimport { Configuration } from 'interfaces/configuration';\n\nimport { ProductType } from '../../interfaces/plan';\n\n// Generate URLs\n// ___ Description ___\n// This function takes in a target application ID and based on the current page location will return a URI\n// to be used when switching applications. It factors in various situations and defaults for the various page types.\n// ___ When it should be updated ___\n// This function should be updated when a new area of the app, specific to users applications is added / modified.\n// ___ Why is this required ___\n// Due to un-uniform URI structures on the Raygun app there's no simple way to achieve building our links based on\n// the current path. Regex provided the simplest way to capture & mutate a wide variety of URLs at the cost of readability.\nexport const generateCurrentPathFromId = memoize(\n function(id: number, path: string = window.location.pathname): string {\n const appBaseAreas = [\n 'crashreporting',\n 'dashboard',\n 'pulse',\n 'reporting',\n 'search',\n 'settings',\n ];\n const appUriAreaAtBase = some(appBaseAreas.map(area => path.indexOf(area) === 1));\n\n const appUriRegex = /\\/((?:crashreporting|dashboard|pulse|reporting|search|settings))\\/[\\w]+(\\/?)([\\/\\w\\?\\=\\+\\-\\%\\.\\&\\#]+)?/gi;\n const apmUriRegex = /\\/(apm)\\/(?:(?!rules|sampling|filtering)[\\w]+)(\\/[\\w]+)?(\\/(?:methods|queries|requests|externalapis|traces))?(?:\\/(?:.*))?/gi;\n const tlfQueryRegex = /toplevelfilters=[A-Za-z0-9]+(?:%3D)?(?:&)?/gi;\n const crInstanceRegex = /\\/(?:.*)crashreporting(?:.*)errors(?:.*)/gi;\n const userInstanceRegex = /\\/(?:.*)reporting(?:.*)errorsforuser(?:.*)/gi;\n const cxmInstanceRegex = /\\/(?:.*)reporting(?:.*)customers\\/(?:.*)/gi;\n const deploymentInstanceRegex = /\\/deployments(?:.*)\\/[0-9]+/gi;\n const apiInstanceRegex = /\\/api\\/.*/gi;\n\n // Remove any top level filters from path\n const cleanPath = path.replace(tlfQueryRegex, '');\n\n // Return base Crash Reporting link if on error instance\n if (crInstanceRegex.test(cleanPath)) {\n return `/crashreporting/${toIdentifier(id)}?#active`;\n }\n\n // Return APM style url if on product, includes instance logic\n if (apmUriRegex.test(cleanPath)) {\n return cleanPath.replace(apmUriRegex, `/$1/${toIdentifier(id)}$2$3`).replace('/products/expired/', `/`);\n }\n\n // Return base users link if on a user instance\n if (userInstanceRegex.test(cleanPath)) {\n return `/reporting/${toIdentifier(id)}/affectedusers`;\n }\n\n if (cxmInstanceRegex.test(cleanPath)) {\n return `/reporting/${toIdentifier(id)}/customers`;\n }\n\n // Return deployment dashboard link if on a deployment instance\n if (deploymentInstanceRegex.test(cleanPath)) {\n return `/dashboard/${toIdentifier(id)}/deployments`;\n }\n\n if (apiInstanceRegex.test(cleanPath)) {\n return `/api/${toIdentifier(id)}`;\n }\n\n // Replace and return new path or default\n if (appUriAreaAtBase && appUriRegex.test(cleanPath)) {\n return cleanPath.replace(appUriRegex, `/$1/${toIdentifier(id)}$2$3`);\n } else {\n return buildApplicationLink(id);\n }\n },\n (\n id: number,\n path: string = window.location.pathname,\n rgConfig: Configuration = (window as any).RaygunConfiguration,\n ) => [id, path.replace(rgConfig.ApplicationIdentifier, '')].join('_'),\n);\n\nexport function buildPlanLink(id: number): string {\n return `/plan/${toIdentifier(id)}`;\n}\n\nexport function buildApplicationLink(id: number): string {\n return `/home/${toIdentifier(id)}`;\n}\n\nexport function buildDashboardLink(dashboard: Dashboard): string {\n if (dashboard.isPrimary) {\n return `/tiledashboard/${toIdentifier(dashboard.planId)}/primary`;\n }\n\n return `/tiledashboard/${toIdentifier(dashboard.id)}/display`;\n}\n\nexport function buildAlertingLink(planIdentifier: string): string {\n return `/plan/${planIdentifier}/alerts`;\n}\n\nexport function buildUsageLink(planIdentifier: string, type?: ProductType): string {\n let subArea;\n\n switch (type) {\n case ProductType.CRASH_REPORTING:\n subArea = '/crashreporting';\n break;\n case ProductType.RUM:\n subArea = '/pulse';\n break;\n case ProductType.APM:\n subArea = '/apm';\n break;\n default:\n subArea = '';\n break;\n }\n\n return `/plan/${planIdentifier}/usage${subArea}`;\n}\n\n// onPage checks\n// Crash reporting\nexport function onFilters() {\n return urlContains('filtering');\n}\nexport function onReports() {\n return urlContains('customreports');\n}\nexport function onExport() {\n return urlContains('export');\n}\nexport function onSymbols() {\n return some(['symbols', 'jssymbols', 'proguardsymbols'].map(name => urlContains(name)), identity);\n}\nexport function onErrors() {\n return every([onFilters(), onReports(), onExport(), onSymbols()], b => !b);\n}\n\n// APM\nexport function onIssues() {\n return urlContains('issues');\n}\nexport function onDiscover() {\n return urlContains('discover');\n}\nexport function onTraces() {\n return urlContains('traces');\n}\nexport function onSettings() {\n return urlContains('settings');\n}\nexport function onSampling() {\n return urlContains('sampling');\n}\nexport function onRules() {\n return urlContains('rules');\n}\nexport function activeApmHeaderTab() {\n if (onIssues()) {\n return 'issues';\n }\n if (onDiscover()) {\n return 'discover';\n }\n if (onTraces()) {\n return 'traces';\n }\n if (onSettings()) {\n return 'settings';\n } else {\n return 'overview';\n }\n}\n\n// Alerting\nexport function onAlerting() {\n return urlContains('alerts');\n}\n\nexport function onApiLanding() {\n return urlContains('/api/');\n}\n\n// Plan Selector\nexport function onPlanSelector() {\n return urlContains('planselector');\n}\n\n// String based url generation\n// Dashboards\nexport function dashboardUrl(planIdentifier: number | string): string {\n return `/tiledashboard/${planIdentifier}/primary`;\n}\n\n// Crash URLs\nexport function crashUrl(applicationIdentifier: string): string {\n return `/crashreporting/${applicationIdentifier}`;\n}\nexport function errorsUrl(applicationIdentifier: string): string {\n return `/crashreporting/${applicationIdentifier}`;\n}\nexport function filtersUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/crash/filtering`;\n}\nexport function reportsUrl(applicationIdentifier: string): string {\n return `/crashreporting/${applicationIdentifier}/customreports`;\n}\nexport function exportUrl(applicationIdentifier: string): string {\n return `/crashreporting/${applicationIdentifier}/export`;\n}\nexport function symbolsUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/symbols`;\n}\nexport function searchUrl(applicationIdentifier: string): string {\n return `/search/${applicationIdentifier}`;\n}\n\n// RUM URLs\nexport function rumUrl(applicationIdentifier: string): string {\n return `/pulse/${applicationIdentifier}`;\n}\n\n// APM URLs\nexport function apmUrl(applicationIdentifier: string): string {\n return `/apm/${applicationIdentifier}`;\n}\nexport function apmIssuesUrl(applicationIdentifier: string): string {\n return `/apm/${applicationIdentifier}/issues`;\n}\nexport function apmDiscoverUrl(applicationIdentifier: string): string {\n return `/apm/${applicationIdentifier}/discover`;\n}\nexport function apmTracesUrl(applicationIdentifier: string): string {\n return `/apm/${applicationIdentifier}/traces`;\n}\nexport function apmBlacklistUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/apm`;\n}\nexport function apmSamplingUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/apm/sampling`;\n}\nexport function apmRulesUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/apm/rules`;\n}\n\n// Misc\nexport function deploymentsUrl(applicationIdentifier: string): string {\n return `/dashboard/${applicationIdentifier}/deployments`;\n}\nexport function errorsForUserUrl(applicationIdentifier: string, userIdentifier: string): string {\n return `/reporting/${applicationIdentifier}/errorsforuser?userIdentifier=${userIdentifier}`;\n}\nexport function usersUrl(applicationIdentifier: string): string {\n return `/reporting/${applicationIdentifier}/affectedusers`;\n}\nexport function whatsNewUrl(applicationIdentifier: string): string {\n return `/whats-new?applicationIdentifier=${applicationIdentifier}`;\n}\nexport function inviteTeamUrl(planIdentifier: string): string {\n return `/plan/${planIdentifier}/teams`;\n}\nexport function integrationsUrl(applicationIdentifier: string): string {\n return `/settings/${applicationIdentifier}/plugins`;\n}\n\nexport * from './utils';\nexport * from './planSettings';\n","/** @format */\n\nimport createActionFactory from 'typescript-fsa';\nimport { reducerUpdate } from 'utils/reducerUpdate';\nimport { ScreenState } from 'app/reducers';\nimport { ActionCreator } from 'typescript-fsa';\nimport { ReducerBuilder } from 'typescript-fsa-reducers';\nimport { ReactComponent } from 'utils/types';\nimport { assign, mapValues } from 'lodash';\nimport { NOT_FOUND, redirect } from 'redux-first-router';\nimport { Dispatch } from 'redux';\nimport { Action } from 'typescript-fsa';\n\nexport const notFound = createActionFactory('')(NOT_FOUND);\nexport type RoutePreEntryCallback

    = (\n dispatch: Dispatch,\n getState: () => S,\n action: Action

    ,\n) => Action;\n\nexport interface RoutePreEntryCallbackChain

    {\n (dispatch: Dispatch, getState: () => S, action: Action

    ): Action;\n chain: (callback: RoutePreEntryCallback) => RoutePreEntryCallbackChain;\n build: () => { path: string; beforeEntryCallback: RoutePreEntryCallback };\n}\n\nfunction getChainFunction(callbacks: RoutePreEntryCallback[]) {\n return (dispatch: Dispatch, getState: () => S, action: Action

    ) => {\n for (const callback of callbacks) {\n const actionResult = callback(dispatch, getState, action);\n\n if (actionResult !== action) {\n // redux-first-router Action is a different type, but these will be RFR actions\n // So short circut the type system\n dispatch(redirect(actionResult as any));\n }\n }\n };\n}\n\nexport function createRoutePreEntryChainWithUrl(\n path: string,\n): RoutePreEntryCallbackChain {\n const callbacks: RoutePreEntryCallback[] = [];\n const callbackChain = getChainFunction(callbacks) as RoutePreEntryCallbackChain;\n callbackChain.chain = callback => {\n callbacks.push(callback);\n\n return callbackChain;\n };\n callbackChain.build = () => ({\n path,\n beforeEntryCallback: callbackChain,\n });\n\n return callbackChain;\n}\n\nexport function validatePathParam(\n name: string,\n validator: string[] | ((param: string) => boolean),\n failureAction = notFound(),\n): RoutePreEntryCallback {\n return (_dispatch: Dispatch, _getState: () => any, action: Action) => {\n const paramValue = action.payload[name];\n\n if (typeof validator === 'function') {\n if (!validator(paramValue)) {\n return failureAction;\n }\n } else {\n if (validator.indexOf(paramValue) == -1) {\n return failureAction;\n }\n }\n\n return action;\n };\n}\n","/** @format **/\n\nimport createActionFactory, { ActionCreator } from 'typescript-fsa';\nimport { ReducerBuilder } from 'typescript-fsa-reducers';\nimport { mapValues, merge, get } from 'lodash';\nimport { Action } from 'redux-first-router';\n\nimport { reducerUpdate } from 'utils/reducerUpdate';\nimport { ReactComponent } from 'utils/types';\n\nimport { ScreenState } from 'app/reducers';\n\nimport { RoutePreEntryCallback, RoutePreEntryCallbackChain } from './entryCallbacks';\nexport * from './entryCallbacks';\nexport * from './anonymous';\n\nexport const ROUTE_ACTION_BASE = 'routing';\n\nexport const createRoutingAction = createActionFactory(ROUTE_ACTION_BASE);\n\ntype MetaData = { query: { [key: string]: any } };\n\ntype MakeRoutingData =\n | [ActionCreator, ReactComponent<{}>]\n | [ActionCreator, ReactComponent<{}>, MetaData];\n\nexport type QueryPayload = { [key: string]: any };\n\nexport function makeRoutingReducer(actions: MakeRoutingData[], layout: ReactComponent<{}> = null) {\n return function buildRoutingReducer(reducerBuilder: ReducerBuilder) {\n return actions.reduce(\n (builder, [action, component, ...meta]) =>\n builder.case(action, state => {\n return reducerUpdate(state, {\n type: action.type,\n component,\n meta: merge.apply(undefined, meta),\n layout,\n });\n }),\n reducerBuilder,\n );\n };\n}\n\nexport function makeRouteMap(\n routeMap: {\n [action: string]: string | { path: string; beforeEntryCallback: RoutePreEntryCallback };\n },\n basePath: string = '',\n): {\n [action: string]: { path: string; beforeEntryCallback?: RoutePreEntryCallbackChain };\n} {\n return mapValues(routeMap, mapping => {\n if (typeof mapping === 'string') {\n return { path: `${basePath}${mapping}` };\n }\n\n return {\n ...mapping,\n path: `${basePath}${mapping.path}`,\n };\n }) as any;\n}\n\nexport function isRedirect(action: Action) {\n return get(action, 'meta.location.kind', '') === 'redirect';\n}\n","/** @format **/\n\nimport { get, set } from 'lodash';\nimport { StorageType } from './models';\n\nexport const MEMORY_STORAGE_KEY = 'RaygunMemoryStorage';\n\nexport class StorageUtil {\n storageType: StorageType;\n root: any = window;\n\n constructor(storageType: StorageType, root: any = window) {\n this.root = root;\n this.storageType = storageType;\n }\n\n isStorageSupported() {\n try {\n return !!this.root[this.storageType];\n } catch (_e) {\n //ignore\n }\n\n return false;\n }\n\n getItem(key: string) {\n if (this.isStorageSupported()) {\n return this.root[this.storageType].getItem(key);\n } else {\n return get(this.root, `${MEMORY_STORAGE_KEY}[${key}]`);\n }\n }\n\n setItem(key: string, value: string) {\n if (this.isStorageSupported()) {\n return this.root[this.storageType].setItem(key, value);\n } else {\n return set(this.root, `${MEMORY_STORAGE_KEY}[${key}]`, value);\n }\n }\n\n clear() {\n if (this.isStorageSupported()) {\n return this.root[this.storageType].clear();\n } else {\n return set(this.root, `${MEMORY_STORAGE_KEY}`, null);\n }\n }\n}\n\nexport function LocalStorageUtilFactory(root = window) {\n return new StorageUtil(StorageType.Local, root);\n}\n\nexport function SessionStorageUtilFactory(root = window) {\n return new StorageUtil(StorageType.Session, root);\n}\n\nexport const LocalStorageUtil = LocalStorageUtilFactory();\nexport const SessionStorageUtil = SessionStorageUtilFactory();\n"],"names":["pageDataSelector","state","app","pageData","getApplications","Applications","OutOfDateAgents","APMWelcomeModalSeen","SlackClientId","TeamsDetailsId","PlanIntegrationStatuses","HasPersonalAccessToken","Instructions","render","this","props","children","defaultProps","disabled","selected","isIcon","icon","set","type","UtilityIconButtonWrapper","Trigger","triggerProps","label","position","roundLeftCorners","roundRightCorners","height","hasLabel","isEmpty","required","triggerText","placeholder","overflowCount","overflow","block","small","selection","fullWidthOnMobile","placeholderTextColor","clearableSearch","forSubtle","Footer","createComponent","forDialog","borderTop","removePadding","padding","backgroundColor","theme","ds","getColorByName","ModuleFooter","justify","align","smallScreens","direction","ModuleFooterButtonGroup","order","applyToChildren","left","ModuleFooterContent","marginTop","display","alignItems","ModuleWrapper","createComponentWithProxy","border","borderRadius","boxShadow","dialogBoxShadow","standardBoxShadow","Module","CustomError","headline","resolutions","button","items","map","message","index","key","className","list","length","Error","error","reload","singleLine","reloadText","reloadBtn","onClick","singleLineStyle","isNil","style","getHeadlineForError","getResolutionsforError","ErrorMessages","err","window","navigator","onLine","NoNet","SERVER_FAILURE","WRONG_PATH_404","Generic","href","target","HorizontalRuleComponent","styles","width","colors","standard","marginBottom","text","textAlign","content","fontSize","fontStyle","textBackgroundColor","color","transform","HorizontalRule","LoadingSpinner","classes","active","semiTransparent","spinnerClasses","smallSpinner","Overlay","openModal","component","id","connect","passedProps","isOnTrial","productType","CRASH_REPORTING","RUM","APM","planIdentifier","isCondensed","alignLeft","overlay","size","dsColor","inline","interactionId","snowplowId","ProductTypesEnum","CrashReporting","RealUserMonitoring","PermissionCategory","PlanPermissions","ApplicationPermissions","config","get","getTimeZoneName","TimeZoneName","get24HourDisplay","Display24HourTimes","toIdentifier","toString","generateCurrentPathFromId","memoize","path","location","pathname","appUriAreaAtBase","some","area","indexOf","appUriRegex","apmUriRegex","cleanPath","replace","test","buildApplicationLink","rgConfig","RaygunConfiguration","ApplicationIdentifier","join","buildAlertingLink","onAlerting","onApiLanding","onPlanSelector","notFound","NOT_FOUND","ROUTE_ACTION_BASE","createRoutingAction","makeRoutingReducer","actions","layout","reducerBuilder","reduce","builder","action","meta","case","reducerUpdate","merge","apply","undefined","makeRouteMap","routeMap","basePath","mapValues","mapping","isRedirect","root","MEMORY_STORAGE_KEY","storageType","isStorageSupported","_e","getItem","setItem","value","clear","LocalStorageUtil","StorageUtil","Local","Session","SessionStorageUtilFactory"],"sourceRoot":""}